summaryrefslogtreecommitdiff
path: root/libraries/qt4/patches/0195-compositing-properties.diff
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/qt4/patches/0195-compositing-properties.diff')
-rw-r--r--libraries/qt4/patches/0195-compositing-properties.diff58
1 files changed, 58 insertions, 0 deletions
diff --git a/libraries/qt4/patches/0195-compositing-properties.diff b/libraries/qt4/patches/0195-compositing-properties.diff
new file mode 100644
index 0000000000..979df94366
--- /dev/null
+++ b/libraries/qt4/patches/0195-compositing-properties.diff
@@ -0,0 +1,58 @@
+qt-bugs@ issue : none
+bugs.kde.org number : none
+applied: no
+author: Lubos Lunak <l.lunak@kde.org>
+
+This patch makes override-redirect windows (popup menu, dropdown menu,
+tooltip, combobox, etc.) also have more window properties like WM_CLASS,
+so they can be used when compositing.
+
+--- src/gui/kernel/qwidget_x11.cpp
++++ src/gui/kernel/qwidget_x11.cpp
+@@ -637,6 +637,11 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO
+ Q_ASSERT(id);
+ XChangeWindowAttributes(dpy, id, CWOverrideRedirect | CWSaveUnder,
+ &wsa);
++ XClassHint class_hint;
++ QByteArray appName = qAppName().toLatin1();
++ class_hint.res_name = appName.data(); // application name
++ class_hint.res_class = const_cast<char *>(QX11Info::appClass()); // application class
++ XSetWMProperties(dpy, id, 0, 0, 0, 0, 0, 0, &class_hint);
+ } else if (topLevel && !desktop) { // top-level widget
+ if (!X11->wm_client_leader)
+ create_wm_client_leader();
+@@ -685,13 +690,21 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO
+ // set EWMH window types
+ setNetWmWindowTypes();
+
++ // when we create a toplevel widget, the frame strut should be dirty
++ data.fstrut_dirty = 1;
++
++ } else {
++ // non-toplevel widgets don't have a frame, so no need to
++ // update the strut
++ data.fstrut_dirty = 0;
++ }
++
++ if (initializeWindow && (popup || (topLevel && !desktop))) { // properties set on all toplevel windows
+ // set _NET_WM_PID
+ long curr_pid = getpid();
+ XChangeProperty(dpy, id, ATOM(_NET_WM_PID), XA_CARDINAL, 32, PropModeReplace,
+ (unsigned char *) &curr_pid, 1);
+
+- // when we create a toplevel widget, the frame strut should be dirty
+- data.fstrut_dirty = 1;
+
+ // declare the widget's window role
+ if (QTLWExtra *topData = maybeTopData()) {
+@@ -707,10 +720,6 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO
+ XChangeProperty(dpy, id, ATOM(WM_CLIENT_LEADER),
+ XA_WINDOW, 32, PropModeReplace,
+ (unsigned char *)&X11->wm_client_leader, 1);
+- } else {
+- // non-toplevel widgets don't have a frame, so no need to
+- // update the strut
+- data.fstrut_dirty = 0;
+ }
+
+ if (initializeWindow && q->internalWinId()) {