From 909c3cb760886a1c879a94938b5b9590a3d0bdff Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Wed, 13 Jun 2012 15:05:35 -0500 Subject: Add 0084 compositing patch from RedHat (cherry picked from commit 7295893a208dd65d616cebca19befa4cf55aa08b) --- src/kernel/qwidget_x11.cpp | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/src/kernel/qwidget_x11.cpp b/src/kernel/qwidget_x11.cpp index 02fdebf..a095025 100644 --- a/src/kernel/qwidget_x11.cpp +++ b/src/kernel/qwidget_x11.cpp @@ -558,7 +558,10 @@ void QWidget::create( WId window, bool initializeWindow, bool destroyOldWindow) wsa.save_under = True; XChangeWindowAttributes( dpy, id, CWOverrideRedirect | CWSaveUnder, &wsa ); - x11SetWindowType(); + XClassHint class_hint; + class_hint.res_name = (char *) qAppName(); // application name + class_hint.res_class = (char *) qAppClass(); // application class + XSetClassHint( dpy, id, &class_hint ); } else if ( topLevel && !desktop ) { // top-level widget QWidget *p = parentWidget(); // real parent if (p) @@ -621,8 +624,6 @@ void QWidget::create( WId window, bool initializeWindow, bool destroyOldWindow) else XDeleteProperty(dpy, id, qt_xa_motif_wm_hints); - x11SetWindowType(); - // set _NET_WM_WINDOW_STATE if (curr_winstate > 0) XChangeProperty(dpy, id, qt_net_wm_state, XA_ATOM, 32, PropModeReplace, @@ -630,11 +631,6 @@ void QWidget::create( WId window, bool initializeWindow, bool destroyOldWindow) else XDeleteProperty(dpy, id, qt_net_wm_state); - // set _NET_WM_PID - long curr_pid = getpid(); - XChangeProperty(dpy, id, qt_net_wm_pid, XA_CARDINAL, 32, PropModeReplace, - (unsigned char *) &curr_pid, 1); - #ifndef QT_NO_XSYNC // set _NET_WM_SYNC_COUNTER createSyncCounter(); @@ -646,19 +642,31 @@ void QWidget::create( WId window, bool initializeWindow, bool destroyOldWindow) // when we create a toplevel widget, the frame strut should be dirty fstrut_dirty = 1; + } else { + // non-toplevel widgets don't have a frame, so no need to + // update the strut + fstrut_dirty = 0; + } + + if (initializeWindow && (popup || (topLevel && !desktop))) { // properties set on all toplevel windows + x11SetWindowType(); + + // set _NET_WM_PID + long curr_pid = getpid(); + XChangeProperty(dpy, id, qt_net_wm_pid, XA_CARDINAL, 32, PropModeReplace, + (unsigned char *) &curr_pid, 1); + // declare the widget's object name as window role XChangeProperty( dpy, id, qt_window_role, XA_STRING, 8, PropModeReplace, (unsigned char *)name(), qstrlen( name() ) ); // set client leader property + if ( !qt_x11_wm_client_leader ) + qt_x11_create_wm_client_leader(); XChangeProperty( dpy, id, qt_wm_client_leader, XA_WINDOW, 32, PropModeReplace, (unsigned char *)&qt_x11_wm_client_leader, 1 ); - } else { - // non-toplevel widgets don't have a frame, so no need to - // update the strut - fstrut_dirty = 0; } if ( initializeWindow ) { -- cgit v1.2.3