rebase to latest SM patches (QTBUG-45484, QTBUG-46310)

This commit is contained in:
Rex Dieter 2015-06-08 11:51:18 -05:00
parent 17a4ff4a15
commit 05d8ec8529
4 changed files with 324 additions and 149 deletions

View File

@ -1,39 +0,0 @@
From 72de0df09c2fb5b0d61b019753aa4522964113a5 Mon Sep 17 00:00:00 2001
From: Stefan Becker <chemobejk@gmail.com>
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

View File

@ -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 <rdieter@fedoraproject.org> 5.4.2-2
- rebase to latest SM patches (QTBUG-45484, QTBUG-46310)
* Tue Jun 02 2015 Jan Grulich <jgrulich@redhat.com> 5.4.2-1
- Update to 5.4.2

View File

@ -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(); }
+
+/*!
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;
+
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());
@@ -1455,6 +1456,20 @@ void QXcbWindow::setWindowIcon(const QIc
From 7187a71d80d5bd14171dae1215df454c64f8c8b8 Mon Sep 17 00:00:00 2001
From: Alexander Volkov <a.volkov@rusbitech.ru>
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);
}
}
+void QXcbWindow::setWindowRole(const QString &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;
+}
+
void QXcbWindow::raise()
{
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();
+ typedef void (*SetWmWindowRole)(QWindow *window, const QByteArray &role);
+ static const QByteArray setWmWindowRoleIdentifier() { return QByteArrayLiteral("XcbSetWmWindowRole"); }
+
+ QString windowRole() const Q_DECL_OVERRIDE { return m_windowRole; }
+
void propagateSizeHints();
void requestActivateWindow();
@@ -234,6 +238,8 @@ private:
SyncState m_syncState;
QXcbSyncWindowRequest *m_pendingSyncRequest;
+
+ QString m_windowRole;
+ static void setWmWindowRole(QWindow *window, const QByteArray &role)
+ {
+ SetWmWindowRole func = reinterpret_cast<SetWmWindowRole>(QGuiApplication::platformFunction(setWmWindowRoleIdentifier()));
+ if (func)
+ func(window, 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
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();
+
+ return QString();
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;
}
/*!
@@ -6236,13 +6239,9 @@ QString QWidget::windowRole() const
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<int>(windowTypes)));
}
+void QXcbWindow::setWmWindowRoleStatic(QWindow *window, const QByteArray &role)
+{
+ if (window->handle())
+ static_cast<QXcbWindow *>(window->handle())->setWmWindowRole(role);
+ else
+ window->setProperty(wm_window_role_property_id, role);
+}
+
QXcbWindowFunctions::WmWindowTypes QXcbWindow::wmWindowTypes() const
{
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()));
+}
+
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
static void setWmWindowTypeStatic(QWindow *window, QXcbWindowFunctions::WmWindowTypes windowTypes);
+ static void setWmWindowRoleStatic(QWindow *window, const QByteArray &role);
QXcbWindowFunctions::WmWindowTypes wmWindowTypes() const;
void setWmWindowType(QXcbWindowFunctions::WmWindowTypes types);
+ void setWmWindowRole(const QByteArray &role);
bool needsSync() const;
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());
+
QBackingStore *store = q->backingStore();
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

View File

@ -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<xcb_visualid_t, xcb_visualtype_t> m_visuals;
QMap<xcb_visualid_t, quint8> 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<QXcbScreen *>(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,