xcb: ensure the primary screen is added first
Currently, Qt windows without an explicit screen parameter always appear on screen 0 despite the DISPLAY being set to :0.1. With this change, the xcb backend adds the primary display at the beginning of the screen list. QGuiApplication::primaryScreen() will then return that display for all windows without an explicit screen. Change-Id: I657c4ed92b9e0f0ed379e91c732dad9d69c4f5e0 Reviewed-by: Donald Carr <donald.carr@nokia.com> Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
This commit is contained in:
parent
abe4b31713
commit
3c8eb40487
@ -98,6 +98,7 @@ static int nullErrorHandler(Display *, XErrorEvent *)
|
||||
|
||||
QXcbConnection::QXcbConnection(QXcbNativeInterface *nativeInterface, const char *displayName)
|
||||
: m_connection(0)
|
||||
, m_primaryScreen(0)
|
||||
, m_displayName(displayName ? QByteArray(displayName) : qgetenv("DISPLAY"))
|
||||
, m_nativeInterface(nativeInterface)
|
||||
#ifdef XCB_USE_XINPUT2_MAEMO
|
||||
@ -115,8 +116,6 @@ QXcbConnection::QXcbConnection(QXcbNativeInterface *nativeInterface, const char
|
||||
, has_randr_extension(false)
|
||||
, has_input_shape(false)
|
||||
{
|
||||
m_primaryScreen = 0;
|
||||
|
||||
#ifdef XCB_USE_XLIB
|
||||
Display *dpy = XOpenDisplay(m_displayName.constData());
|
||||
if (dpy) {
|
||||
@ -167,7 +166,14 @@ QXcbConnection::QXcbConnection(QXcbNativeInterface *nativeInterface, const char
|
||||
|
||||
int screenNumber = 0;
|
||||
while (it.rem) {
|
||||
m_screens << new QXcbScreen(this, it.data, screenNumber++);
|
||||
QXcbScreen *screen = new QXcbScreen(this, it.data, screenNumber);
|
||||
// make sure the primary screen appears first since it is used by QGuiApplication::primaryScreen()
|
||||
if (m_primaryScreen == screenNumber) {
|
||||
m_screens.prepend(screen);
|
||||
} else {
|
||||
m_screens.append(screen);
|
||||
}
|
||||
++screenNumber;
|
||||
xcb_screen_next(&it);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user