rebase to latest SM patches (QTBUG-45484, QTBUG-46310)
This commit is contained in:
parent
17a4ff4a15
commit
05d8ec8529
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
173
qtbase-opensource-src-5.4.1-QTBUG-46310.patch
Normal file
173
qtbase-opensource-src-5.4.1-QTBUG-46310.patch
Normal 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,
|
Loading…
Reference in New Issue
Block a user