Author: olivier
Date: 2006-08-30 19:41:26 +0000 (Wed, 30 Aug 2006)
New Revision: 22954

Modified:
   xfwm4/trunk/src/compositor.c
   xfwm4/trunk/src/hints.c
   xfwm4/trunk/src/hints.h
   xfwm4/trunk/src/main.c
Log:
Add support for newest _NET_WM_CM_S<n> property used by  
gdk_screen_is_composited() in gtk+-2.10.x

Modified: xfwm4/trunk/src/compositor.c
===================================================================
--- xfwm4/trunk/src/compositor.c        2006-08-30 16:47:12 UTC (rev 22953)
+++ xfwm4/trunk/src/compositor.c        2006-08-30 19:41:26 UTC (rev 22954)
@@ -2711,6 +2711,26 @@
 #endif /* HAVE_COMPOSITOR */
 }
 
+static void
+compositorSetCMSelection (ScreenInfo *screen_info, Window w)
+{
+    DisplayInfo *display_info;
+    gchar selection[32];
+    Atom a;
+    
+    g_return_if_fail (screen_info != NULL);
+
+    display_info = screen_info->display_info;
+    /* Newer EWMH standard property "_NET_WM_CM_S<n>" */
+    g_snprintf (selection, sizeof (selection), "_NET_WM_CM_S%d", 
screen_info->screen);
+    a = XInternAtom (display_info->dpy, selection, FALSE);
+    setXAtomManagerOwner (display_info, a, screen_info->xroot, w);
+
+    /* Older property "COMPOSITING_MANAGER" */
+    setAtomIdManagerOwner (display_info, COMPOSITING_MANAGER, 
screen_info->xroot, w);
+}
+
+
 gboolean
 compositorManageScreen (ScreenInfo *screen_info)
 {
@@ -2777,8 +2797,7 @@
     screen_info->overlays = 0;
 
     XClearArea (display_info->dpy, screen_info->xroot, 0, 0, 0, 0, TRUE);
-    setAtomManagerOwner (display_info, COMPOSITING_MANAGER, 
-                         screen_info->xroot, screen_info->xfwm4_win);
+    compositorSetCMSelection (screen_info, screen_info->xfwm4_win);
 
     return TRUE;
 #else
@@ -2856,7 +2875,7 @@
     XCompositeUnredirectSubwindows (display_info->dpy, screen_info->xroot, 
                                     display_info->composite_mode);
 
-    setAtomManagerOwner (display_info, COMPOSITING_MANAGER, 
screen_info->xroot, None);
+    compositorSetCMSelection (screen_info, None);
 #endif /* HAVE_COMPOSITOR */
 }
 

Modified: xfwm4/trunk/src/hints.c
===================================================================
--- xfwm4/trunk/src/hints.c     2006-08-30 16:47:12 UTC (rev 22953)
+++ xfwm4/trunk/src/hints.c     2006-08-30 19:41:26 UTC (rev 22954)
@@ -1115,30 +1115,29 @@
 }
 
 gboolean
-setAtomManagerOwner (DisplayInfo *display_info, int atom_id, Window root, 
Window w)
+setXAtomManagerOwner (DisplayInfo *display_info, Atom atom, Window root, 
Window w)
 {
     XClientMessageEvent ev;
     Time server_time;
     int status;
-    
-    g_return_val_if_fail (((atom_id >= 0) && (atom_id < NB_ATOMS)), FALSE);
+
+    g_return_val_if_fail (root != None, FALSE);
+
     server_time = myDisplayGetCurrentTime (display_info);
-    status = XSetSelectionOwner (display_info->dpy, 
-                                 display_info->atoms[atom_id],
-                                 w, server_time);
+    status = XSetSelectionOwner (display_info->dpy, atom, w, server_time);
 
     if ((status == BadAtom) || (status == BadWindow))
     {
         return FALSE;
     }
 
-    if (XGetSelectionOwner (display_info->dpy, display_info->atoms[atom_id]) 
== w)
+    if (XGetSelectionOwner (display_info->dpy, atom) == w)
     {
         ev.type = ClientMessage;
-        ev.message_type = display_info->atoms[atom_id];
+        ev.message_type = atom;
         ev.format = 32;
         ev.data.l[0] = server_time;
-        ev.data.l[1] = display_info->atoms[atom_id];
+        ev.data.l[1] = atom;
         ev.data.l[2] = w;
         ev.data.l[3] = 0;
         ev.data.l[4] = 0;
@@ -1152,6 +1151,14 @@
     return FALSE;
 }
 
+gboolean
+setAtomIdManagerOwner (DisplayInfo *display_info, int atom_id, Window root, 
Window w)
+{
+    g_return_val_if_fail (((atom_id >= 0) && (atom_id < NB_ATOMS)), FALSE);
+
+    return setXAtomManagerOwner(display_info, display_info->atoms[atom_id], 
root, w);
+}
+
 #ifdef ENABLE_KDE_SYSTRAY_PROXY
 gboolean
 checkKdeSystrayWindow(DisplayInfo *display_info, Window window)

Modified: xfwm4/trunk/src/hints.h
===================================================================
--- xfwm4/trunk/src/hints.h     2006-08-30 16:47:12 UTC (rev 22953)
+++ xfwm4/trunk/src/hints.h     2006-08-30 19:41:26 UTC (rev 22954)
@@ -178,7 +178,8 @@
 gboolean getRGBIconData (DisplayInfo *, Window, unsigned long **, unsigned 
long *);
 gboolean getOpacity (DisplayInfo *, Window, guint *);
 gboolean getOpacityLock (DisplayInfo *, Window);
-gboolean setAtomManagerOwner (DisplayInfo *, int, Window , Window);
+gboolean setAtomIdManagerOwner (DisplayInfo *, int, Window , Window);
+gboolean setXAtomManagerOwner (DisplayInfo *, Atom, Window , Window);
 
 #ifdef ENABLE_KDE_SYSTRAY_PROXY
 gboolean checkKdeSystrayWindow(DisplayInfo *, Window);

Modified: xfwm4/trunk/src/main.c
===================================================================
--- xfwm4/trunk/src/main.c      2006-08-30 16:47:12 UTC (rev 22953)
+++ xfwm4/trunk/src/main.c      2006-08-30 19:41:26 UTC (rev 22954)
@@ -461,7 +461,7 @@
                    compositing manager (used by WM tweaks to determine whether 
or not
                    show the "compositor" tab.
                  */
-                setAtomManagerOwner (display_info, XFWM4_COMPOSITING_MANAGER, 
+                setAtomIdManagerOwner (display_info, 
XFWM4_COMPOSITING_MANAGER, 
                                      screen_info->xroot, 
screen_info->xfwm4_win);
             }
         }

_______________________________________________
Xfce4-commits mailing list
Xfce4-commits@xfce.org
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to