]> Pileus Git - ~andy/gtk/commitdiff
Fix up for newer draft of wm-spec
authorOwen W. Taylor <otaylor@fishsoup.net>
Wed, 19 Dec 2012 17:01:52 +0000 (12:01 -0500)
committerOwen W. Taylor <otaylor@fishsoup.net>
Thu, 14 Feb 2013 22:19:51 +0000 (17:19 -0500)
* 64-bit quantities are consistently ordered low-32-bits / high-32-bits
* data.l[4] in _NET_WM_SYNC_REQUEST indicates which counter to update

gdk/x11/gdkdisplay-x11.c
gdk/x11/gdkwindow-x11.c
gdk/x11/gdkwindow-x11.h

index cf26b3016df467b412c31398dd7a73472223b40d..466f7e56bfdfa5424161f99eacad3d959dff8be1 100644 (file)
@@ -763,6 +763,7 @@ gdk_x11_display_translate_event (GdkEventTranslator *translator,
       if (!is_substructure && toplevel && display_x11->use_sync && toplevel->pending_counter_value != 0)
        {
          toplevel->configure_counter_value = toplevel->pending_counter_value;
+         toplevel->configure_counter_value_is_extended = toplevel->pending_counter_value_is_extended;
          toplevel->pending_counter_value = 0;
        }
 #endif
@@ -1107,8 +1108,8 @@ _gdk_wm_protocols_filter (GdkXEvent *xev,
           guint32 d2 = xevent->xclient.data.l[2];
           guint32 d3 = xevent->xclient.data.l[3];
 
-          guint64 serial = ((guint64)d0 << 32) | d1;
-          gint64 frame_drawn_time = ((guint64)d2 << 32) | d3;
+          guint64 serial = ((guint64)d1 << 32) | d0;
+          gint64 frame_drawn_time = ((guint64)d3 << 32) | d2;
           gint64 refresh_interval, presentation_time;
 
           GdkFrameClock *clock = gdk_window_get_frame_clock (event->any.window);
@@ -1145,7 +1146,7 @@ _gdk_wm_protocols_filter (GdkXEvent *xev,
           guint32 d2 = xevent->xclient.data.l[2];
           guint32 d3 = xevent->xclient.data.l[3];
 
-          guint64 serial = ((guint64)d0 << 32) | d1;
+          guint64 serial = ((guint64)d1 << 32) | d0;
 
           GdkFrameClock *clock = gdk_window_get_frame_clock (event->any.window);
           GdkFrameTimings *timings = find_frame_timings (clock, serial);
@@ -1239,6 +1240,7 @@ _gdk_wm_protocols_filter (GdkXEvent *xev,
        {
 #ifdef HAVE_XSYNC
          toplevel->pending_counter_value = xevent->xclient.data.l[2] + ((gint64)xevent->xclient.data.l[3] << 32);
+         toplevel->pending_counter_value_is_extended = xevent->xclient.data.l[4] != 0;
 #endif
        }
       return GDK_FILTER_REMOVE;
index d3fac4df5f3a58c9506aa14516a71c8921a910d2..3d625f5fa7594f43ce35ade38442cdebd95d299e 100644 (file)
@@ -5117,20 +5117,25 @@ gdk_x11_window_configure_finished (GdkWindow *window)
          GDK_X11_DISPLAY (display)->use_sync &&
          toplevel->configure_counter_value != 0)
        {
-         set_sync_counter (GDK_WINDOW_XDISPLAY (window),
-                           toplevel->update_counter,
-                           toplevel->configure_counter_value);
-
-         toplevel->current_counter_value = toplevel->configure_counter_value;
-         if ((toplevel->current_counter_value % 2) == 1)
-           toplevel->current_counter_value += 1;
+          if (toplevel->configure_counter_value_is_extended)
+            {
+              toplevel->current_counter_value = toplevel->configure_counter_value;
+              if ((toplevel->current_counter_value % 2) == 1)
+                toplevel->current_counter_value += 1;
 
-         toplevel->configure_counter_value = 0;
+              toplevel->configure_counter_value = 0;
 
-         set_sync_counter (GDK_WINDOW_XDISPLAY (window),
-                           toplevel->extended_update_counter,
-                           toplevel->current_counter_value);
-       }
+              set_sync_counter (GDK_WINDOW_XDISPLAY (window),
+                                toplevel->extended_update_counter,
+                                toplevel->current_counter_value);
+            }
+          else
+            {
+              set_sync_counter (GDK_WINDOW_XDISPLAY (window),
+                                toplevel->update_counter,
+                                toplevel->configure_counter_value);
+            }
+        }
     }
 #endif
 }
index 7eb95a07f223d3eb05adb9a0d73efede9b159152..d58d7e34a44366a2577d6222817d600ea12067a2 100644 (file)
@@ -131,7 +131,12 @@ struct _GdkToplevelX11
 
   /* If we're expecting a response from the compositor after painting a frame */
   guint frame_pending : 1;
-  
+
+  /* Whether pending_counter_value/configure_counter_value are updates
+   * to the extended update counter */
+  guint pending_counter_value_is_extended : 1;
+  guint configure_counter_value_is_extended : 1;
+
   gulong map_serial;   /* Serial of last transition from unmapped */
   
   cairo_surface_t *icon_pixmap;