From: Lubos Lunak Date: Tue, 2 Oct 2007 14:08:32 +0000 (+0200) Subject: This patch makes override-redirect windows (popup menu, dropdown menu, tooltip, combo... X-Git-Tag: archive/raspbian/4%4.8.7+dfsg-17+rpi1^2~49 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=306fa512a805d07e891c4760ffde0655b76cbc6a;p=qt4-x11.git 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. qt-bugs@ issue : none bugs.kde.org number : none Gbp-Pq: Name 0195-compositing-properties.diff --- diff --git a/src/gui/kernel/qwidget_x11.cpp b/src/gui/kernel/qwidget_x11.cpp index 43720f74c..442bd256e 100644 --- a/src/gui/kernel/qwidget_x11.cpp +++ b/src/gui/kernel/qwidget_x11.cpp @@ -773,6 +773,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(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(); @@ -827,13 +832,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()) { @@ -849,10 +862,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()) {