diff options
author | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2012-06-13 15:05:35 -0500 |
---|---|---|
committer | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2012-06-13 15:05:35 -0500 |
commit | 7295893a208dd65d616cebca19befa4cf55aa08b (patch) | |
tree | 2cbb32bb2525f44323c4ab9d91a2c9d036894919 /src | |
parent | 3c3de9a5eb7afaadd2017bc971d2e8180c62396b (diff) | |
download | qt3-7295893a208dd65d616cebca19befa4cf55aa08b.tar.gz qt3-7295893a208dd65d616cebca19befa4cf55aa08b.zip |
Add 0084 compositing patch from RedHat
Diffstat (limited to 'src')
-rw-r--r-- | src/kernel/qwidget_x11.cpp | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/src/kernel/qwidget_x11.cpp b/src/kernel/qwidget_x11.cpp index 775829c..b4133d0 100644 --- a/src/kernel/qwidget_x11.cpp +++ b/src/kernel/qwidget_x11.cpp @@ -630,7 +630,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) @@ -693,8 +696,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, @@ -709,11 +710,6 @@ void QWidget::create( WId window, bool initializeWindow, bool destroyOldWindow) else XDeleteProperty(dpy, id, qt_net_wm_action); - // 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(); @@ -725,19 +721,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 ) { |