rdieter pushed to qt5-qtbase (master). "rebase to latest SM patches (QTBUG-45484, QTBUG-46310)"

notifications at fedoraproject.org notifications at fedoraproject.org
Mon Jun 8 16:51:37 UTC 2015


From 05d8ec8529fe92463996725bd08317fdbfc4e5d2 Mon Sep 17 00:00:00 2001
From: Rex Dieter <rdieter at math.unl.edu>
Date: Mon, 8 Jun 2015 11:51:18 -0500
Subject: rebase to latest SM patches (QTBUG-45484, QTBUG-46310)


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 <chemobejk at 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
-
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 <rdieter at fedoraproject.org> 5.4.2-2
+- rebase to latest SM patches (QTBUG-45484, QTBUG-46310)
+
 * Tue Jun 02 2015 Jan Grulich <jgrulich at redhat.com> 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 <a.volkov at 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);
+     }
 +
-+/*!
-   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<SetWmWindowRole>(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<int>(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<QXcbWindow *>(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<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,
-- 
cgit v0.10.2


	http://pkgs.fedoraproject.org/cgit/qt5-qtbase.git/commit/?h=master&id=05d8ec8529fe92463996725bd08317fdbfc4e5d2


More information about the scm-commits mailing list