diff --git a/0002-xcb-set-SM_CLIENT_ID-property.patch b/0002-xcb-set-SM_CLIENT_ID-property.patch deleted file mode 100644 index 6fb1114..0000000 --- a/0002-xcb-set-SM_CLIENT_ID-property.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 72de0df09c2fb5b0d61b019753aa4522964113a5 Mon Sep 17 00:00:00 2001 -From: Stefan Becker -Date: Mon, 25 May 2015 17:46:49 +0300 -Subject: [PATCH 2/2] xcb: set SM_CLIENT_ID property - -SM_CLIENT_ID is required by kwin for proper session management. - -Copy the code from the QT4 implementation to the appropriate place in -QT5. - -Task-number: QTBUG-46310 ---- - src/plugins/platforms/xcb/qxcbwindow.cpp | 10 ++++++++++ - 1 file changed, 10 insertions(+) - -diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp -index f8c2ff8..513f556 100644 ---- a/src/plugins/platforms/xcb/qxcbwindow.cpp -+++ b/src/plugins/platforms/xcb/qxcbwindow.cpp -@@ -530,6 +530,16 @@ void QXcbWindow::create() - atom(QXcbAtom::WM_CLIENT_LEADER), XCB_ATOM_WINDOW, 32, - 1, &leader)); - -+#ifndef QT_NO_SESSIONMANAGER -+ // If we are session managed, inform the window manager about it -+ QByteArray session = qApp->sessionId().toLatin1(); -+ if (!session.isEmpty()) { -+ Q_XCB_CALL(xcb_change_property(xcb_connection(), XCB_PROP_MODE_REPLACE, leader, -+ atom(QXcbAtom::SM_CLIENT_ID), XCB_ATOM_STRING, 8, -+ session.length(), session.constData())); -+ } -+#endif -+ - /* Add XEMBED info; this operation doesn't initiate the embedding. */ - quint32 data[] = { XEMBED_VERSION, XEMBED_MAPPED }; - Q_XCB_CALL(xcb_change_property(xcb_connection(), XCB_PROP_MODE_REPLACE, m_window, --- -2.4.0 - diff --git a/qt5-qtbase.spec b/qt5-qtbase.spec index 8204f6b..eb18ab9 100644 --- a/qt5-qtbase.spec +++ b/qt5-qtbase.spec @@ -42,7 +42,7 @@ Summary: Qt5 - QtBase components Name: qt5-qtbase Version: 5.4.2 -Release: 1%{?dist} +Release: 2%{?dist} # See LGPL_EXCEPTIONS.txt, for exception details License: LGPLv2 with exceptions or GPLv3 with exceptions @@ -107,7 +107,7 @@ Patch53: qtbase-opensource-src-5.4.1-QTBUG-45484.patch # https://bugreports.qt.io/browse/QTBUG-46310 #SM_CLIENT_ID property is not set -Patch54: https://bugreports.qt.io/secure/attachment/48820/0002-xcb-set-SM_CLIENT_ID-property.patch +Patch54: qtbase-opensource-src-5.4.1-QTBUG-46310.patch ## upstream patches # workaround https://bugreports.qt-project.org/browse/QTBUG-43057 @@ -911,6 +911,9 @@ fi %changelog +* Mon Jun 08 2015 Rex Dieter 5.4.2-2 +- rebase to latest SM patches (QTBUG-45484, QTBUG-46310) + * Tue Jun 02 2015 Jan Grulich 5.4.2-1 - Update to 5.4.2 diff --git a/qtbase-opensource-src-5.4.1-QTBUG-45484.patch b/qtbase-opensource-src-5.4.1-QTBUG-45484.patch index 39557fc..3cd8b7b 100644 --- a/qtbase-opensource-src-5.4.1-QTBUG-45484.patch +++ b/qtbase-opensource-src-5.4.1-QTBUG-45484.patch @@ -1,127 +1,165 @@ -diff -up qtbase-opensource-src-5.4.1/src/gui/kernel/qplatformwindow.cpp.QTBUG-45484 qtbase-opensource-src-5.4.1/src/gui/kernel/qplatformwindow.cpp ---- qtbase-opensource-src-5.4.1/src/gui/kernel/qplatformwindow.cpp.QTBUG-45484 2015-02-16 22:56:48.000000000 -0600 -+++ qtbase-opensource-src-5.4.1/src/gui/kernel/qplatformwindow.cpp 2015-05-25 08:45:55.305771441 -0500 -@@ -286,6 +286,16 @@ void QPlatformWindow::setWindowFilePath( - void QPlatformWindow::setWindowIcon(const QIcon &icon) { Q_UNUSED(icon); } - - /*! -+ Reimplement to set the window role to \a role -+*/ -+void QPlatformWindow::setWindowRole(const QString &role) { Q_UNUSED(role); } -+ -+/*! -+ Reimplement to get the window role -+*/ -+QString QPlatformWindow::windowRole() const { return QString(); } +From 7187a71d80d5bd14171dae1215df454c64f8c8b8 Mon Sep 17 00:00:00 2001 +From: Alexander Volkov +Date: Mon, 8 Jun 2015 14:35:22 +0300 +Subject: [PATCH 1/2] Fix QWidget::setWindowRole() + +Introduce QXcbWindowFunctions::setWmWindowRole() and call it either from +the implementation of QWidget::setWindowRole() or after the creation of +the corresponding QWidgetWindow. + +Change-Id: I143450f4673dd707bb491c1d0f0e8b61d564283d +Task-number: QTBUG-45484 +--- + .../xcbfunctions/qxcbwindowfunctions.h | 10 ++++++++++ + src/plugins/platforms/xcb/qxcbnativeinterface.cpp | 3 +++ + src/plugins/platforms/xcb/qxcbwindow.cpp | 21 +++++++++++++++++++++ + src/plugins/platforms/xcb/qxcbwindow.h | 2 ++ + src/widgets/kernel/qwidget.cpp | 12 +++++++----- + 5 files changed, 43 insertions(+), 5 deletions(-) + +diff --git a/src/platformheaders/xcbfunctions/qxcbwindowfunctions.h b/src/platformheaders/xcbfunctions/qxcbwindowfunctions.h +index 5227732..d166c9f 100644 +--- a/src/platformheaders/xcbfunctions/qxcbwindowfunctions.h ++++ b/src/platformheaders/xcbfunctions/qxcbwindowfunctions.h +@@ -72,6 +72,16 @@ public: + if (func) + func(window, type); + } + -+/*! - Reimplement to be able to let Qt raise windows to the top of the desktop - */ - void QPlatformWindow::raise() { qWarning("This plugin does not support raise()"); } -diff -up qtbase-opensource-src-5.4.1/src/gui/kernel/qplatformwindow.h.QTBUG-45484 qtbase-opensource-src-5.4.1/src/gui/kernel/qplatformwindow.h ---- qtbase-opensource-src-5.4.1/src/gui/kernel/qplatformwindow.h.QTBUG-45484 2015-02-16 22:56:48.000000000 -0600 -+++ qtbase-opensource-src-5.4.1/src/gui/kernel/qplatformwindow.h 2015-05-25 08:45:55.305771441 -0500 -@@ -90,9 +90,12 @@ public: - virtual void setWindowTitle(const QString &title); - virtual void setWindowFilePath(const QString &title); - virtual void setWindowIcon(const QIcon &icon); -+ virtual void setWindowRole(const QString &role); - virtual void raise(); - virtual void lower(); - -+ virtual QString windowRole() const; ++ typedef void (*SetWmWindowRole)(QWindow *window, const QByteArray &role); ++ static const QByteArray setWmWindowRoleIdentifier() { return QByteArrayLiteral("XcbSetWmWindowRole"); } + - virtual bool isExposed() const; - virtual bool isActive() const; - virtual bool isEmbedded(const QPlatformWindow *parentWindow) const; -diff -up qtbase-opensource-src-5.4.1/src/plugins/platforms/xcb/qxcbwindow.cpp.QTBUG-45484 qtbase-opensource-src-5.4.1/src/plugins/platforms/xcb/qxcbwindow.cpp ---- qtbase-opensource-src-5.4.1/src/plugins/platforms/xcb/qxcbwindow.cpp.QTBUG-45484 2015-05-25 08:45:55.258771302 -0500 -+++ qtbase-opensource-src-5.4.1/src/plugins/platforms/xcb/qxcbwindow.cpp 2015-05-25 09:07:12.608572492 -0500 -@@ -256,6 +256,7 @@ QXcbWindow::QXcbWindow(QWindow *window) - , m_lastWindowStateEvent(-1) - , m_syncState(NoSyncNeeded) - , m_pendingSyncRequest(0) -+ , m_windowRole() - { - setConnection(xcbscreen()->connection()); ++ static void setWmWindowRole(QWindow *window, const QByteArray &role) ++ { ++ SetWmWindowRole func = reinterpret_cast(QGuiApplication::platformFunction(setWmWindowRoleIdentifier())); ++ if (func) ++ func(window, role); ++ } + }; + -@@ -1455,6 +1456,20 @@ void QXcbWindow::setWindowIcon(const QIc +diff --git a/src/plugins/platforms/xcb/qxcbnativeinterface.cpp b/src/plugins/platforms/xcb/qxcbnativeinterface.cpp +index 31dedd4..0bd49b8 100644 +--- a/src/plugins/platforms/xcb/qxcbnativeinterface.cpp ++++ b/src/plugins/platforms/xcb/qxcbnativeinterface.cpp +@@ -339,6 +339,9 @@ QFunctionPointer QXcbNativeInterface::platformFunction(const QByteArray &functio + if (function == QXcbWindowFunctions::setWmWindowTypeIdentifier()) { + return QFunctionPointer(QXcbWindow::setWmWindowTypeStatic); } ++ if (function == QXcbWindowFunctions::setWmWindowRoleIdentifier()) { ++ return QFunctionPointer(QXcbWindow::setWmWindowRoleStatic); ++ } + return Q_NULLPTR; + } + +diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp +index 0094278..14e186a 100644 +--- a/src/plugins/platforms/xcb/qxcbwindow.cpp ++++ b/src/plugins/platforms/xcb/qxcbwindow.cpp +@@ -236,6 +236,7 @@ static inline bool positionIncludesFrame(QWindow *w) + } + + static const char *wm_window_type_property_id = "_q_xcb_wm_window_type"; ++static const char *wm_window_role_property_id = "_q_xcb_wm_window_role"; + + QXcbWindow::QXcbWindow(QWindow *window) + : QPlatformWindow(window) +@@ -562,6 +563,11 @@ void QXcbWindow::create() + setOpacity(opacity); + if (window()->isTopLevel()) + setWindowIcon(window()->icon()); ++ ++ if (window()->dynamicPropertyNames().contains(wm_window_type_property_id)) { ++ QByteArray wmWindowRole = window()->property(wm_window_type_property_id).toByteArray(); ++ setWmWindowRole(wmWindowRole); ++ } + } + + QXcbWindow::~QXcbWindow() +@@ -1596,6 +1602,14 @@ void QXcbWindow::setWmWindowTypeStatic(QWindow *window, QXcbWindowFunctions::WmW + window->setProperty(wm_window_type_property_id, QVariant::fromValue(static_cast(windowTypes))); } -+void QXcbWindow::setWindowRole(const QString &role) ++void QXcbWindow::setWmWindowRoleStatic(QWindow *window, const QByteArray &role) +{ -+ const QByteArray ba = role.toLatin1(); -+ Q_XCB_CALL(xcb_change_property(xcb_connection(), -+ XCB_PROP_MODE_REPLACE, -+ m_window, -+ atom(QXcbAtom::WM_WINDOW_ROLE), -+ XCB_ATOM_STRING, -+ 8, -+ ba.length(), -+ ba.constData())); -+ m_windowRole = role; ++ if (window->handle()) ++ static_cast(window->handle())->setWmWindowRole(role); ++ else ++ window->setProperty(wm_window_role_property_id, role); +} + - void QXcbWindow::raise() + QXcbWindowFunctions::WmWindowTypes QXcbWindow::wmWindowTypes() const { - const quint32 mask = XCB_CONFIG_WINDOW_STACK_MODE; -diff -up qtbase-opensource-src-5.4.1/src/plugins/platforms/xcb/qxcbwindow.h.QTBUG-45484 qtbase-opensource-src-5.4.1/src/plugins/platforms/xcb/qxcbwindow.h ---- qtbase-opensource-src-5.4.1/src/plugins/platforms/xcb/qxcbwindow.h.QTBUG-45484 2015-05-25 08:45:55.258771302 -0500 -+++ qtbase-opensource-src-5.4.1/src/plugins/platforms/xcb/qxcbwindow.h 2015-05-25 08:45:55.306771444 -0500 -@@ -88,8 +88,12 @@ public: - - void setWindowTitle(const QString &title); - void setWindowIcon(const QIcon &icon); -+ void setWindowRole(const QString &role); - void raise(); - void lower(); -+ -+ QString windowRole() const Q_DECL_OVERRIDE { return m_windowRole; } + QXcbWindowFunctions::WmWindowTypes result(0); +@@ -1712,6 +1726,13 @@ void QXcbWindow::setWmWindowType(QXcbWindowFunctions::WmWindowTypes types) + xcb_flush(xcb_connection()); + } + ++void QXcbWindow::setWmWindowRole(const QByteArray &role) ++{ ++ Q_XCB_CALL(xcb_change_property(xcb_connection(), XCB_PROP_MODE_REPLACE, m_window, ++ atom(QXcbAtom::WM_WINDOW_ROLE), XCB_ATOM_STRING, 8, ++ role.size(), role.constData())); ++} + - void propagateSizeHints(); + class ExposeCompressor + { + public: +diff --git a/src/plugins/platforms/xcb/qxcbwindow.h b/src/plugins/platforms/xcb/qxcbwindow.h +index 254421e..2c9964c 100644 +--- a/src/plugins/platforms/xcb/qxcbwindow.h ++++ b/src/plugins/platforms/xcb/qxcbwindow.h +@@ -143,9 +143,11 @@ public: + #endif - void requestActivateWindow(); -@@ -234,6 +238,8 @@ private: - SyncState m_syncState; + static void setWmWindowTypeStatic(QWindow *window, QXcbWindowFunctions::WmWindowTypes windowTypes); ++ static void setWmWindowRoleStatic(QWindow *window, const QByteArray &role); - QXcbSyncWindowRequest *m_pendingSyncRequest; -+ -+ QString m_windowRole; - }; + QXcbWindowFunctions::WmWindowTypes wmWindowTypes() const; + void setWmWindowType(QXcbWindowFunctions::WmWindowTypes types); ++ void setWmWindowRole(const QByteArray &role); - QT_END_NAMESPACE -diff -up qtbase-opensource-src-5.4.1/src/widgets/kernel/qwidget.cpp.QTBUG-45484 qtbase-opensource-src-5.4.1/src/widgets/kernel/qwidget.cpp ---- qtbase-opensource-src-5.4.1/src/widgets/kernel/qwidget.cpp.QTBUG-45484 2015-02-16 22:56:40.000000000 -0600 -+++ qtbase-opensource-src-5.4.1/src/widgets/kernel/qwidget.cpp 2015-05-25 08:45:55.309771453 -0500 -@@ -6226,8 +6226,11 @@ void QWidgetPrivate::setWindowFilePath_s + bool needsSync() const; - QString QWidget::windowRole() const - { -- Q_D(const QWidget); -- return (d->extra && d->extra->topextra) ? d->extra->topextra->role : QString(); -+ if (const QWindow *window = windowHandle()) -+ if (QPlatformWindow *platformWindow = window->handle()) -+ return platformWindow->windowRole(); +diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp +index c99e15b..bc4750e 100644 +--- a/src/widgets/kernel/qwidget.cpp ++++ b/src/widgets/kernel/qwidget.cpp +@@ -100,6 +100,7 @@ + + #include "qwindowcontainer_p.h" + ++#include "QtPlatformHeaders/qxcbwindowfunctions.h" + + // widget/widget data creation count + //#define QWIDGET_EXTRA_DEBUG +@@ -1445,6 +1446,9 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO + + data.window_flags = win->flags(); + ++ if (!topData()->role.isNull()) ++ QXcbWindowFunctions::setWmWindowRole(win, topData()->role.toLatin1()); + -+ return QString(); - } + QBackingStore *store = q->backingStore(); - /*! -@@ -6236,13 +6239,9 @@ QString QWidget::windowRole() const + if (!store) { +@@ -6236,13 +6240,11 @@ QString QWidget::windowRole() const */ void QWidget::setWindowRole(const QString &role) { -#if defined(Q_WS_X11) -- Q_D(QWidget); -- d->topData()->role = role; + Q_D(QWidget); ++ d->createTLExtra(); + d->topData()->role = role; - d->setWindowRole(); -#else - Q_UNUSED(role) -#endif -+ if (const QWindow *window = windowHandle()) -+ if (QPlatformWindow *platformWindow = window->handle()) -+ return platformWindow->setWindowRole(role); ++ if (windowHandle()) ++ QXcbWindowFunctions::setWmWindowRole(windowHandle(), role.toLatin1()); } /*! +-- +2.4.2 + diff --git a/qtbase-opensource-src-5.4.1-QTBUG-46310.patch b/qtbase-opensource-src-5.4.1-QTBUG-46310.patch new file mode 100644 index 0000000..82849d4 --- /dev/null +++ b/qtbase-opensource-src-5.4.1-QTBUG-46310.patch @@ -0,0 +1,173 @@ +diff -up qtbase-opensource-src-5.4.1/src/plugins/platforms/xcb/qxcbconnection.cpp.QTBUG-46310 qtbase-opensource-src-5.4.1/src/plugins/platforms/xcb/qxcbconnection.cpp +--- qtbase-opensource-src-5.4.1/src/plugins/platforms/xcb/qxcbconnection.cpp.QTBUG-46310 2015-06-08 18:55:19.427037122 +0300 ++++ qtbase-opensource-src-5.4.1/src/plugins/platforms/xcb/qxcbconnection.cpp 2015-06-08 18:55:19.436036915 +0300 +@@ -330,6 +330,7 @@ QXcbConnection::QXcbConnection(QXcbNativ + , has_xkb(false) + , m_buttons(0) + , m_focusWindow(0) ++ , m_clientLeader(0) + , m_systemTrayTracker(0) + { + #ifdef XCB_USE_EGL +@@ -1241,6 +1242,58 @@ xcb_window_t QXcbConnection::rootWindow( + return primaryScreen()->root(); + } + ++xcb_window_t QXcbConnection::clientLeader() ++{ ++ if (m_clientLeader == 0) { ++ m_clientLeader = xcb_generate_id(xcb_connection()); ++ QXcbScreen *screen = primaryScreen(); ++ Q_XCB_CALL(xcb_create_window(xcb_connection(), ++ XCB_COPY_FROM_PARENT, ++ m_clientLeader, ++ screen->root(), ++ 0, 0, 1, 1, ++ 0, ++ XCB_WINDOW_CLASS_INPUT_OUTPUT, ++ screen->screen()->root_visual, ++ 0, 0)); ++#ifndef QT_NO_DEBUG ++ QByteArray ba("Qt client leader window"); ++ Q_XCB_CALL(xcb_change_property(xcb_connection(), ++ XCB_PROP_MODE_REPLACE, ++ m_clientLeader, ++ atom(QXcbAtom::_NET_WM_NAME), ++ atom(QXcbAtom::UTF8_STRING), ++ 8, ++ ba.length(), ++ ba.constData())); ++#endif ++ Q_XCB_CALL(xcb_change_property(xcb_connection(), ++ XCB_PROP_MODE_REPLACE, ++ m_clientLeader, ++ atom(QXcbAtom::WM_CLIENT_LEADER), ++ XCB_ATOM_WINDOW, ++ 32, ++ 1, ++ &m_clientLeader)); ++ ++#if !defined(QT_NO_SESSIONMANAGER) && defined(XCB_USE_SM) ++ // If we are session managed, inform the window manager about it ++ QByteArray session = qGuiApp->sessionId().toLatin1(); ++ if (!session.isEmpty()) { ++ Q_XCB_CALL(xcb_change_property(xcb_connection(), ++ XCB_PROP_MODE_REPLACE, ++ m_clientLeader, ++ atom(QXcbAtom::SM_CLIENT_ID), ++ XCB_ATOM_STRING, ++ 8, ++ session.length(), ++ session.constData())); ++ } ++#endif ++ } ++ return m_clientLeader; ++} ++ + void QXcbConnection::processXcbEvents() + { + int connection_error = xcb_connection_has_error(xcb_connection()); +diff -up qtbase-opensource-src-5.4.1/src/plugins/platforms/xcb/qxcbconnection.h.QTBUG-46310 qtbase-opensource-src-5.4.1/src/plugins/platforms/xcb/qxcbconnection.h +--- qtbase-opensource-src-5.4.1/src/plugins/platforms/xcb/qxcbconnection.h.QTBUG-46310 2015-02-17 06:56:51.000000000 +0200 ++++ qtbase-opensource-src-5.4.1/src/plugins/platforms/xcb/qxcbconnection.h 2015-06-08 18:55:19.436036915 +0300 +@@ -394,6 +394,8 @@ public: + + QXcbWMSupport *wmSupport() const { return m_wmSupport.data(); } + xcb_window_t rootWindow(); ++ xcb_window_t clientLeader(); ++ + #ifdef XCB_USE_XLIB + void *xlib_display() const { return m_xlib_display; } + #endif +@@ -617,6 +619,7 @@ private: + + QXcbWindow *m_focusWindow; + ++ xcb_window_t m_clientLeader; + QByteArray m_startupId; + QXcbSystemTrayTracker *m_systemTrayTracker; + +diff -up qtbase-opensource-src-5.4.1/src/plugins/platforms/xcb/qxcbscreen.cpp.QTBUG-46310 qtbase-opensource-src-5.4.1/src/plugins/platforms/xcb/qxcbscreen.cpp +--- qtbase-opensource-src-5.4.1/src/plugins/platforms/xcb/qxcbscreen.cpp.QTBUG-46310 2015-02-17 06:56:51.000000000 +0200 ++++ qtbase-opensource-src-5.4.1/src/plugins/platforms/xcb/qxcbscreen.cpp 2015-06-08 18:55:19.436036915 +0300 +@@ -163,38 +163,6 @@ QXcbScreen::QXcbScreen(QXcbConnection *c + else + m_syncRequestSupported = true; + +- m_clientLeader = xcb_generate_id(xcb_connection()); +- Q_XCB_CALL2(xcb_create_window(xcb_connection(), +- XCB_COPY_FROM_PARENT, +- m_clientLeader, +- screen()->root, +- 0, 0, 1, 1, +- 0, +- XCB_WINDOW_CLASS_INPUT_OUTPUT, +- screen()->root_visual, +- 0, 0), connection); +-#ifndef QT_NO_DEBUG +- QByteArray ba("Qt client leader window for screen "); +- ba += m_outputName.toUtf8(); +- Q_XCB_CALL2(xcb_change_property(xcb_connection(), +- XCB_PROP_MODE_REPLACE, +- m_clientLeader, +- atom(QXcbAtom::_NET_WM_NAME), +- atom(QXcbAtom::UTF8_STRING), +- 8, +- ba.length(), +- ba.constData()), connection); +-#endif +- +- Q_XCB_CALL2(xcb_change_property(xcb_connection(), +- XCB_PROP_MODE_REPLACE, +- m_clientLeader, +- atom(QXcbAtom::WM_CLIENT_LEADER), +- XCB_ATOM_WINDOW, +- 32, +- 1, +- &m_clientLeader), connection); +- + xcb_depth_iterator_t depth_iterator = + xcb_screen_allowed_depths_iterator(screen()); + +diff -up qtbase-opensource-src-5.4.1/src/plugins/platforms/xcb/qxcbscreen.h.QTBUG-46310 qtbase-opensource-src-5.4.1/src/plugins/platforms/xcb/qxcbscreen.h +--- qtbase-opensource-src-5.4.1/src/plugins/platforms/xcb/qxcbscreen.h.QTBUG-46310 2015-02-17 06:56:51.000000000 +0200 ++++ qtbase-opensource-src-5.4.1/src/plugins/platforms/xcb/qxcbscreen.h 2015-06-08 18:55:19.437036892 +0300 +@@ -80,8 +80,6 @@ public: + xcb_screen_t *screen() const { return m_screen; } + xcb_window_t root() const { return m_screen->root; } + +- xcb_window_t clientLeader() const { return m_clientLeader; } +- + void windowShown(QXcbWindow *window); + QString windowManagerName() const { return m_windowManagerName; } + bool syncRequestSupported() const { return m_syncRequestSupported; } +@@ -125,7 +123,6 @@ private: + int m_number; + QString m_windowManagerName; + bool m_syncRequestSupported; +- xcb_window_t m_clientLeader; + QMap m_visuals; + QMap m_visualDepths; + QXcbCursor *m_cursor; +diff -up qtbase-opensource-src-5.4.1/src/plugins/platforms/xcb/qxcbwindow.cpp.QTBUG-46310 qtbase-opensource-src-5.4.1/src/plugins/platforms/xcb/qxcbwindow.cpp +--- qtbase-opensource-src-5.4.1/src/plugins/platforms/xcb/qxcbwindow.cpp.QTBUG-46310 2015-06-08 18:55:19.437036892 +0300 ++++ qtbase-opensource-src-5.4.1/src/plugins/platforms/xcb/qxcbwindow.cpp 2015-06-08 18:56:40.773169979 +0300 +@@ -525,7 +525,7 @@ void QXcbWindow::create() + + xcb_set_wm_hints(xcb_connection(), m_window, &hints); + +- xcb_window_t leader = screen->clientLeader(); ++ xcb_window_t leader = connection()->clientLeader(); + Q_XCB_CALL(xcb_change_property(xcb_connection(), XCB_PROP_MODE_REPLACE, m_window, + atom(QXcbAtom::WM_CLIENT_LEADER), XCB_ATOM_WINDOW, 32, + 1, &leader)); +@@ -750,7 +750,7 @@ void QXcbWindow::show() + // Default to client leader if there is no transient parent, else modal dialogs can + // be hidden by their parents. + if (!transientXcbParent) +- transientXcbParent = static_cast(xcbscreen())->clientLeader(); ++ transientXcbParent = connection()->clientLeader(); + if (transientXcbParent) { // ICCCM 4.1.2.6 + Q_XCB_CALL(xcb_change_property(xcb_connection(), XCB_PROP_MODE_REPLACE, m_window, + XCB_ATOM_WM_TRANSIENT_FOR, XCB_ATOM_WINDOW, 32,