]> Pileus Git - ~andy/gtk/commitdiff
Reimplement _NET_WM_SYNC_REQUEST inside X11 backend
authorOwen W. Taylor <otaylor@fishsoup.net>
Wed, 19 Dec 2012 17:49:32 +0000 (12:49 -0500)
committerOwen W. Taylor <otaylor@fishsoup.net>
Thu, 14 Feb 2013 22:19:51 +0000 (17:19 -0500)
Deprecate gdk_window_enable_synchronized_configure() and
gdk_window_configure_done() and make them no-ops. Implement the
handling of _NET_WM_SYNC_REQUEST in terms of the frame cycle -
we know that all processing will be finished in the next frame
cycle after the ConfigureNotify is received.

gdk/broadway/gdkwindow-broadway.c
gdk/gdkwindow.c
gdk/gdkwindow.h
gdk/quartz/gdkwindow-quartz.c
gdk/wayland/gdkwindow-wayland.c
gdk/win32/gdkwindow-win32.c
gdk/x11/gdkwindow-x11.c
gdk/x11/gdkwindow-x11.h
gtk/gtkwindow.c

index 7a1245cca0fc9f1998a8fa32f9679a3677399081..c4931976b8dec7c1320c66117e69c409d2e6c445 100644 (file)
@@ -1294,20 +1294,6 @@ gdk_broadway_window_begin_move_drag (GdkWindow *window,
 
 }
 
-static void
-gdk_broadway_window_enable_synchronized_configure (GdkWindow *window)
-{
-  if (!GDK_IS_WINDOW_IMPL_BROADWAY (window->impl))
-    return;
-}
-
-static void
-gdk_broadway_window_configure_finished (GdkWindow *window)
-{
-  if (!WINDOW_IS_TOPLEVEL (window))
-    return;
-}
-
 static gboolean
 gdk_broadway_window_beep (GdkWindow *window)
 {
@@ -1499,8 +1485,6 @@ gdk_window_impl_broadway_class_init (GdkWindowImplBroadwayClass *klass)
   impl_class->set_functions = gdk_broadway_window_set_functions;
   impl_class->begin_resize_drag = gdk_broadway_window_begin_resize_drag;
   impl_class->begin_move_drag = gdk_broadway_window_begin_move_drag;
-  impl_class->enable_synchronized_configure = gdk_broadway_window_enable_synchronized_configure;
-  impl_class->configure_finished = gdk_broadway_window_configure_finished;
   impl_class->set_opacity = gdk_broadway_window_set_opacity;
   impl_class->set_composited = gdk_broadway_window_set_composited;
   impl_class->destroy_notify = gdk_broadway_window_destroy_notify;
index 211f8fd9ee437f8b1495020a858a94f0d75a6722..38543ce123a063efb86e42ea08ce6451e03633bc 100644 (file)
@@ -11215,44 +11215,28 @@ gdk_window_begin_move_drag (GdkWindow *window,
  * gdk_window_enable_synchronized_configure:
  * @window: a toplevel #GdkWindow
  *
- * Indicates that the application will cooperate with the window
- * system in synchronizing the window repaint with the window
- * manager during resizing operations. After an application calls
- * this function, it must call gdk_window_configure_finished() every
- * time it has finished all processing associated with a set of
- * Configure events. Toplevel GTK+ windows automatically use this
- * protocol.
- *
- * On X, calling this function makes @window participate in the
- * _NET_WM_SYNC_REQUEST window manager protocol.
+ * Does nothing, present only for compatiblity.
  *
  * Since: 2.6
+ * Deprecated: 3.8: this function is no longer needed
  **/
 void
 gdk_window_enable_synchronized_configure (GdkWindow *window)
 {
-  GDK_WINDOW_IMPL_GET_CLASS (window->impl)->enable_synchronized_configure (window);
 }
 
 /**
  * gdk_window_configure_finished:
  * @window: a toplevel #GdkWindow
- * 
- * Signal to the window system that the application has finished
- * handling Configure events it has received. Window Managers can
- * use this to better synchronize the frame repaint with the
- * application. GTK+ applications will automatically call this
- * function when appropriate.
  *
- * This function can only be called if gdk_window_enable_synchronized_configure()
- * was called previously.
+ * Does nothing, present only for compatiblity.
  *
  * Since: 2.6
+ * Deprecated: 3.8: this function is no longer needed
  **/
 void
 gdk_window_configure_finished (GdkWindow *window)
 {
-  GDK_WINDOW_IMPL_GET_CLASS (window->impl)->configure_finished (window);
 }
 
 /**
index a93e5ced99a678ee08531e96d1713a6ff5f6c201..ef8bb5eb82be2393e5bddbe346fe071dc705436a 100644 (file)
@@ -884,7 +884,9 @@ void       gdk_window_constrain_size      (GdkGeometry  *geometry,
                                            gint         *new_width,
                                            gint         *new_height);
 
+GDK_DEPRECATED_IN_3_8
 void gdk_window_enable_synchronized_configure (GdkWindow *window);
+GDK_DEPRECATED_IN_3_8
 void gdk_window_configure_finished            (GdkWindow *window);
 
 GdkWindow *gdk_get_default_root_window (void);
index b83adfc063236b7638ea2df52774af4ac750a561..a096064ae38c09544496d432ab99388b68ae54d5 100644 (file)
@@ -3002,16 +3002,6 @@ gdk_quartz_window_set_group (GdkWindow *window,
   /* FIXME: Implement */       
 }
 
-static void
-gdk_quartz_window_enable_synchronized_configure (GdkWindow *window)
-{
-}
-
-static void
-gdk_quartz_window_configure_finished (GdkWindow *window)
-{
-}
-
 static void
 gdk_quartz_window_destroy_notify (GdkWindow *window)
 {
@@ -3129,8 +3119,6 @@ gdk_window_impl_quartz_class_init (GdkWindowImplQuartzClass *klass)
   impl_class->set_functions = gdk_quartz_window_set_functions;
   impl_class->begin_resize_drag = gdk_quartz_window_begin_resize_drag;
   impl_class->begin_move_drag = gdk_quartz_window_begin_move_drag;
-  impl_class->enable_synchronized_configure = gdk_quartz_window_enable_synchronized_configure;
-  impl_class->configure_finished = gdk_quartz_window_configure_finished;
   impl_class->set_opacity = gdk_quartz_window_set_opacity;
   impl_class->destroy_notify = gdk_quartz_window_destroy_notify;
   impl_class->register_dnd = _gdk_quartz_window_register_dnd;
index 5c8d6b6dc1d7a84632604280733bb681686abd25..15cef9f4a5306ba152183c311d75c2a18b559c18 100644 (file)
@@ -1468,21 +1468,6 @@ gdk_wayland_window_begin_move_drag (GdkWindow *window,
   gdk_device_ungrab (device, timestamp);
 }
 
-static void
-gdk_wayland_window_enable_synchronized_configure (GdkWindow *window)
-{
-}
-
-static void
-gdk_wayland_window_configure_finished (GdkWindow *window)
-{
-  if (!WINDOW_IS_TOPLEVEL (window))
-    return;
-
-  if (!GDK_IS_WINDOW_IMPL_WAYLAND (window->impl))
-    return;
-}
-
 static void
 gdk_wayland_window_set_opacity (GdkWindow *window,
                                gdouble    opacity)
@@ -1666,8 +1651,6 @@ _gdk_window_impl_wayland_class_init (GdkWindowImplWaylandClass *klass)
   impl_class->set_functions = gdk_wayland_window_set_functions;
   impl_class->begin_resize_drag = gdk_wayland_window_begin_resize_drag;
   impl_class->begin_move_drag = gdk_wayland_window_begin_move_drag;
-  impl_class->enable_synchronized_configure = gdk_wayland_window_enable_synchronized_configure;
-  impl_class->configure_finished = gdk_wayland_window_configure_finished;
   impl_class->set_opacity = gdk_wayland_window_set_opacity;
   impl_class->set_composited = gdk_wayland_window_set_composited;
   impl_class->destroy_notify = gdk_wayland_window_destroy_notify;
index 5d1b1535e9a925e7ac21518dc43907f036b9b195..039284963c411b54de1ffc687e089b7e2dbac568 100644 (file)
@@ -3248,18 +3248,6 @@ gdk_win32_window_lookup_for_display (GdkDisplay *display,
   return (GdkWindow*) gdk_win32_handle_table_lookup (anid);
 }
 
-static void
-gdk_win32_window_enable_synchronized_configure (GdkWindow *window)
-{
-  /* nothing - no window manager to cooperate with */
-}
-
-static void
-gdk_win32_window_configure_finished (GdkWindow *window)
-{
-  /* nothing - no window manager to cooperate with */
-}
-
 static void
 gdk_win32_window_set_opacity (GdkWindow *window,
                        gdouble    opacity)
@@ -3618,8 +3606,6 @@ gdk_window_impl_win32_class_init (GdkWindowImplWin32Class *klass)
 
   impl_class->begin_resize_drag = gdk_win32_window_begin_resize_drag;
   impl_class->begin_move_drag = gdk_win32_window_begin_move_drag;
-  impl_class->enable_synchronized_configure = gdk_win32_window_enable_synchronized_configure;
-  impl_class->configure_finished = gdk_win32_window_configure_finished;
   impl_class->set_opacity = gdk_win32_window_set_opacity;
   //impl_class->set_composited = gdk_win32_window_set_composited;
   impl_class->destroy_notify = gdk_win32_window_destroy_notify;
index 3d625f5fa7594f43ce35ade38442cdebd95d299e..7541e59531c2dc36ca3d8cc275b18e6d5e658fe2 100644 (file)
@@ -344,7 +344,21 @@ gdk_x11_window_begin_frame (GdkWindow *window)
 
   impl->toplevel->in_frame = TRUE;
 
-  hook_surface_changed (window);
+  if (impl->toplevel->configure_counter_value != 0 &&
+      impl->toplevel->configure_counter_value_is_extended)
+    {
+      impl->toplevel->current_counter_value = impl->toplevel->configure_counter_value;
+      if ((impl->toplevel->current_counter_value % 2) == 1)
+        impl->toplevel->current_counter_value += 1;
+
+      impl->toplevel->configure_counter_value = 0;
+
+      window_pre_damage (window);
+    }
+  else
+    {
+      hook_surface_changed (window);
+    }
 }
 
 static void
@@ -407,6 +421,16 @@ gdk_x11_window_end_frame (GdkWindow *window)
 
   unhook_surface_changed (window);
 
+  if (impl->toplevel->configure_counter_value != 0 &&
+      !impl->toplevel->configure_counter_value_is_extended)
+    {
+      set_sync_counter (GDK_WINDOW_XDISPLAY (window),
+                        impl->toplevel->update_counter,
+                        impl->toplevel->configure_counter_value);
+
+      impl->toplevel->configure_counter_value = 0;
+    }
+
   if (!impl->toplevel->frame_pending)
     gdk_frame_timings_set_complete (timings, TRUE);
 }
@@ -5074,72 +5098,6 @@ gdk_x11_window_begin_move_drag (GdkWindow *window,
     emulate_move_drag (window, device, button, root_x, root_y, timestamp);
 }
 
-static void
-gdk_x11_window_enable_synchronized_configure (GdkWindow *window)
-{
-  GdkWindowImplX11 *impl;
-
-  if (!GDK_IS_WINDOW_IMPL_X11 (window->impl))
-    return;
-  
-  impl = GDK_WINDOW_IMPL_X11 (window->impl);
-         
-  if (!impl->use_synchronized_configure)
-    {
-      /* This basically means you want to do fancy X specific stuff, so
-        ensure we have a native window */
-      gdk_window_ensure_native (window);
-
-      impl->use_synchronized_configure = TRUE;
-      ensure_sync_counter (window);
-    }
-}
-
-static void
-gdk_x11_window_configure_finished (GdkWindow *window)
-{
-  GdkWindowImplX11 *impl;
-
-  if (!WINDOW_IS_TOPLEVEL (window))
-    return;
-  
-  impl = GDK_WINDOW_IMPL_X11 (window->impl);
-  if (!impl->use_synchronized_configure)
-    return;
-  
-#ifdef HAVE_XSYNC
-  if (!GDK_WINDOW_DESTROYED (window))
-    {
-      GdkDisplay *display = GDK_WINDOW_DISPLAY (window);
-      GdkToplevelX11 *toplevel = _gdk_x11_window_get_toplevel (window);
-
-      if (toplevel && toplevel->update_counter != None &&
-         GDK_X11_DISPLAY (display)->use_sync &&
-         toplevel->configure_counter_value != 0)
-       {
-          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;
-
-              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
-}
-
 static gboolean
 gdk_x11_window_beep (GdkWindow *window)
 {
@@ -5411,8 +5369,6 @@ gdk_window_impl_x11_class_init (GdkWindowImplX11Class *klass)
   impl_class->set_functions = gdk_x11_window_set_functions;
   impl_class->begin_resize_drag = gdk_x11_window_begin_resize_drag;
   impl_class->begin_move_drag = gdk_x11_window_begin_move_drag;
-  impl_class->enable_synchronized_configure = gdk_x11_window_enable_synchronized_configure;
-  impl_class->configure_finished = gdk_x11_window_configure_finished;
   impl_class->set_opacity = gdk_x11_window_set_opacity;
   impl_class->set_composited = gdk_x11_window_set_composited;
   impl_class->destroy_notify = gdk_x11_window_destroy_notify;
index d58d7e34a44366a2577d6222817d600ea12067a2..aefc88262c08844dfbe56f4952c184dc983ccc58 100644 (file)
@@ -72,7 +72,6 @@ struct _GdkWindowImplX11
   guint no_bg : 1;        /* Set when the window background is temporarily
                            * unset during resizing and scaling */
   guint override_redirect : 1;
-  guint use_synchronized_configure : 1;
 
   cairo_surface_t *cairo_surface;
 
index a2f9b18e0da5dcbcafb09e486b713087ea99a26f..a6ff07d4e483ae903d8b3288d0e759fed6e40920 100644 (file)
@@ -5164,7 +5164,6 @@ gtk_window_realize (GtkWidget *widget)
 
       gtk_style_context_set_background (gtk_widget_get_style_context (widget), gdk_window);
 
-      gdk_window_enable_synchronized_configure (gdk_window);
       return;
     }
 
@@ -5238,8 +5237,6 @@ gtk_window_realize (GtkWidget *widget)
   gdk_window = gdk_window_new (parent_window, &attributes, attributes_mask);
   gtk_widget_set_window (widget, gdk_window);
 
-  gdk_window_enable_synchronized_configure (gdk_window);
-
   gtk_widget_register_window (widget, gdk_window);
 
   context = gtk_widget_get_style_context (widget);
@@ -5580,7 +5577,6 @@ gtk_window_configure_event (GtkWidget         *widget,
       if (GTK_WIDGET_CLASS (gtk_window_parent_class)->configure_event)
        return GTK_WIDGET_CLASS (gtk_window_parent_class)->configure_event (widget, event);
 
-      gdk_window_configure_finished (gtk_widget_get_window (widget));
       return FALSE;
     }
 
@@ -5614,7 +5610,6 @@ gtk_window_configure_event (GtkWidget         *widget,
       (allocation.width == event->width &&
        allocation.height == event->height))
     {
-      gdk_window_configure_finished (gtk_widget_get_window (widget));
       return TRUE;
     }
 
@@ -7153,10 +7148,6 @@ gtk_window_move_resize (GtkWindow *window)
       set_grip_position (window);
       update_grip_visibility (window);
 
-      gdk_window_process_updates (gdk_window, TRUE);
-
-      gdk_window_configure_finished (gdk_window);
-
       /* If the configure request changed, it means that
        * we either:
        *   1) coincidentally changed hints or widget properties