[Xfce4-commits] r25130 - xfwm4/branches/xfce_4_4/src

Olivier Fourdan olivier at xfce.org
Wed Mar 7 22:01:59 CET 2007


Author: olivier
Date: 2007-03-07 21:01:59 +0000 (Wed, 07 Mar 2007)
New Revision: 25130

Modified:
   xfwm4/branches/xfce_4_4/src/client.c
Log:
Fix a misinterpretation of ICCCM about when to send a synthetic configureNotify event (bug #2977).

Modified: xfwm4/branches/xfce_4_4/src/client.c
===================================================================
--- xfwm4/branches/xfce_4_4/src/client.c	2007-03-07 21:01:50 UTC (rev 25129)
+++ xfwm4/branches/xfce_4_4/src/client.c	2007-03-07 21:01:59 UTC (rev 25130)
@@ -785,10 +785,23 @@
     }
 
     clientConfigureWindows (c, wc, mask, flags);
+    /*
 
-    if ((flags & CFG_NOTIFY) ||
-        ((flags & CFG_REQUEST) && !(WIN_MOVED || WIN_RESIZED)) ||
-        (WIN_MOVED && !WIN_RESIZED))
+      We reparent to client window. According to the ICCCM spec, the
+      WM must send a senthetic event when the window is moved and not resized.
+
+      But, since we reparent the window, we must also send a synthetic
+      configure event when the window is moved and resized.
+
+      See this thread for the rational:
+      http://www.mail-archive.com/wm-spec-list@gnome.org/msg00379.html
+
+      And specifically this post from Carsten Haitzler:
+      http://www.mail-archive.com/wm-spec-list@gnome.org/msg00382.html
+
+     */
+    if ((WIN_MOVED) || (flags & CFG_NOTIFY) ||
+        ((flags & CFG_REQUEST) && !(WIN_MOVED || WIN_RESIZED)))
     {
         DBG ("Sending ConfigureNotify");
         ce.type = ConfigureNotify;
@@ -4077,6 +4090,7 @@
         eventFilterPop (display_info->xfilter);
     }
     myScreenUngrabPointer (screen_info);
+
     if (passdata.grab && screen_info->params->box_move)
     {
         myDisplayUngrabServer (display_info);
@@ -4606,11 +4620,12 @@
     wc.y = c->y;
     wc.width = c->width;
     wc.height = c->height;
-    clientConfigure (c, &wc, CWX | CWY | CWHeight | CWWidth, CFG_NOTIFY);
+    clientConfigure (c, &wc, CWX | CWY | CWHeight | CWWidth, NO_CFG_FLAG);
 #ifdef HAVE_XSYNC
     clientXSyncClearTimeout (c);
     c->xsync_waiting = FALSE;
 #endif /* HAVE_XSYNC */
+
     myScreenUngrabKeyboard (screen_info);
     if (!passdata.released)
     {
@@ -4622,6 +4637,7 @@
         eventFilterPop (display_info->xfilter);
     }
     myScreenUngrabPointer (screen_info);
+
     if (passdata.grab && screen_info->params->box_resize)
     {
         myDisplayUngrabServer (display_info);



More information about the Xfce4-commits mailing list