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