From 7295893a208dd65d616cebca19befa4cf55aa08b Mon Sep 17 00:00:00 2001
From: Timothy Pearson <kb9vqf@pearsoncomputing.net>
Date: Wed, 13 Jun 2012 15:05:35 -0500
Subject: Add 0084 compositing patch from RedHat

---
 src/kernel/qwidget_x11.cpp | 32 ++++++++++++++++++++------------
 1 file changed, 20 insertions(+), 12 deletions(-)

(limited to 'src/kernel')

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 ) {
-- 
cgit v1.2.1