xcb: ignore the xscreens which don't belong to current connection
This amends 9a4c98e55659b32db984612e6247ac193812a502. When a X server has multiple xscreens, for example, ":0.0" and ":0.1", a Qt application, which uses ":0.1" as display, can't use the randr monitor from other connection(":0.0") to show contents there. Then we don't need to generate QXcbScreen for them. Pick-to: 6.4 6.5 Fixes: QTBUG-110898 Change-Id: I04c1512664b763ffabb55b75db4411d100536255 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Reviewed-by: JiDe Zhang <zhangjide@uniontech.com> Reviewed-by: Liang Qi <liang.qi@qt.io>
This commit is contained in:
parent
a53429c1ec
commit
2b94453cbd
@ -489,6 +489,10 @@ void QXcbConnection::initializeScreensFromMonitor(xcb_screen_iterator_t *it, int
|
|||||||
virtualDesktop = new QXcbVirtualDesktop(this, xcbScreen, xcbScreenNumber);
|
virtualDesktop = new QXcbVirtualDesktop(this, xcbScreen, xcbScreenNumber);
|
||||||
m_virtualDesktops.append(virtualDesktop);
|
m_virtualDesktops.append(virtualDesktop);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (xcbScreenNumber != primaryScreenNumber())
|
||||||
|
return;
|
||||||
|
|
||||||
QList<QPlatformScreen*> old = virtualDesktop->m_screens;
|
QList<QPlatformScreen*> old = virtualDesktop->m_screens;
|
||||||
|
|
||||||
QList<QPlatformScreen *> siblings;
|
QList<QPlatformScreen *> siblings;
|
||||||
@ -521,14 +525,12 @@ void QXcbConnection::initializeScreensFromMonitor(xcb_screen_iterator_t *it, int
|
|||||||
siblings << screen;
|
siblings << screen;
|
||||||
|
|
||||||
// similar logic with QXcbConnection::initializeScreensFromOutput()
|
// similar logic with QXcbConnection::initializeScreensFromOutput()
|
||||||
if (primaryScreenNumber() == xcbScreenNumber) {
|
if (!(*primaryScreen) || monitor_info->primary) {
|
||||||
if (!(*primaryScreen) || monitor_info->primary) {
|
if (*primaryScreen)
|
||||||
if (*primaryScreen)
|
(*primaryScreen)->setPrimary(false);
|
||||||
(*primaryScreen)->setPrimary(false);
|
*primaryScreen = screen;
|
||||||
*primaryScreen = screen;
|
(*primaryScreen)->setPrimary(true);
|
||||||
(*primaryScreen)->setPrimary(true);
|
siblings.prepend(siblings.takeLast());
|
||||||
siblings.prepend(siblings.takeLast());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
xcb_randr_monitor_info_next(&monitor_iter);
|
xcb_randr_monitor_info_next(&monitor_iter);
|
||||||
@ -551,10 +553,8 @@ void QXcbConnection::initializeScreensFromMonitor(xcb_screen_iterator_t *it, int
|
|||||||
qCDebug(lcQpaScreen) << "create a fake screen: " << screen;
|
qCDebug(lcQpaScreen) << "create a fake screen: " << screen;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (primaryScreenNumber() == xcbScreenNumber) {
|
*primaryScreen = screen;
|
||||||
*primaryScreen = screen;
|
(*primaryScreen)->setPrimary(true);
|
||||||
(*primaryScreen)->setPrimary(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
siblings << screen;
|
siblings << screen;
|
||||||
m_screens << screen;
|
m_screens << screen;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user