[gtk+] gdk: Make debug-updates a per-display setting



commit d9b02ea4a3e3201cc7c98b01164536eac5f55532
Author: Matthias Clasen <mclasen redhat com>
Date:   Mon Nov 10 15:23:14 2014 -0500

    gdk: Make debug-updates a per-display setting
    
    Add private API to set this per-display, and make the existing
    gdk_window_set_debug_update function set a global default.

 gdk/gdk-private.c       |    4 +++-
 gdk/gdk-private.h       |    8 ++++++++
 gdk/gdkdisplay.c        |   17 +++++++++++++++++
 gdk/gdkdisplayprivate.h |    3 +++
 gdk/gdkinternals.h      |    1 +
 gdk/gdkwindow.c         |   12 ++++++++----
 6 files changed, 40 insertions(+), 5 deletions(-)
---
diff --git a/gdk/gdk-private.c b/gdk/gdk-private.c
index e6588de..7b62cc3 100644
--- a/gdk/gdk-private.c
+++ b/gdk/gdk-private.c
@@ -14,7 +14,9 @@ gdk__private__ (void)
     gdk_window_freeze_toplevel_updates,
     gdk_window_thaw_toplevel_updates,
     gdk_display_get_rendering_mode,
-    gdk_display_set_rendering_mode
+    gdk_display_set_rendering_mode,
+    gdk_display_get_debug_updates,
+    gdk_display_set_debug_updates
   };
 
   return &table;
diff --git a/gdk/gdk-private.h b/gdk/gdk-private.h
index 9a012e0..474172d 100644
--- a/gdk/gdk-private.h
+++ b/gdk/gdk-private.h
@@ -27,6 +27,10 @@ GdkRenderingMode gdk_display_get_rendering_mode (GdkDisplay       *display);
 void             gdk_display_set_rendering_mode (GdkDisplay       *display,
                                                  GdkRenderingMode  mode);
 
+gboolean         gdk_display_get_debug_updates (GdkDisplay *display);
+void             gdk_display_set_debug_updates (GdkDisplay *display,
+                                                gboolean    debug_updates);
+
 typedef struct {
   /* add all private functions here, initialize them in gdk-private.c */
   gboolean (* gdk_device_grab_info) (GdkDisplay  *display,
@@ -48,6 +52,10 @@ typedef struct {
   GdkRenderingMode (* gdk_display_get_rendering_mode) (GdkDisplay       *display);
   void             (* gdk_display_set_rendering_mode) (GdkDisplay       *display,
                                                        GdkRenderingMode  mode);
+
+  gboolean         (* gdk_display_get_debug_updates) (GdkDisplay *display);
+  void             (* gdk_display_set_debug_updates) (GdkDisplay *display,
+                                                      gboolean    debug_updates);
 } GdkPrivateVTable;
 
 GDK_AVAILABLE_IN_ALL
diff --git a/gdk/gdkdisplay.c b/gdk/gdkdisplay.c
index f3a6aaa..79fc2d8 100644
--- a/gdk/gdkdisplay.c
+++ b/gdk/gdkdisplay.c
@@ -2302,3 +2302,20 @@ gdk_display_set_rendering_mode (GdkDisplay       *display,
 {
   display->rendering_mode = mode;
 }
+
+void
+gdk_display_set_debug_updates (GdkDisplay *display,
+                               gboolean    debug_updates)
+{
+  display->debug_updates = debug_updates;
+  display->debug_updates_set = TRUE;
+}
+
+gboolean
+gdk_display_get_debug_updates (GdkDisplay *display)
+{
+  if (display->debug_updates_set)
+    return display->debug_updates;
+  else
+    return _gdk_debug_updates;
+}
diff --git a/gdk/gdkdisplayprivate.h b/gdk/gdkdisplayprivate.h
index 2f026fe..14d8ea6 100644
--- a/gdk/gdkdisplayprivate.h
+++ b/gdk/gdkdisplayprivate.h
@@ -121,6 +121,9 @@ struct _GdkDisplay
   guint has_gl_extension_texture_non_power_of_two : 1;
   guint has_gl_extension_texture_rectangle : 1;
 
+  guint debug_updates     : 1;
+  guint debug_updates_set : 1;
+
   GdkRenderingMode rendering_mode;
 };
 
diff --git a/gdk/gdkinternals.h b/gdk/gdkinternals.h
index c324681..be1b0ed 100644
--- a/gdk/gdkinternals.h
+++ b/gdk/gdkinternals.h
@@ -108,6 +108,7 @@ extern GdkWindow        *_gdk_parent_root;
 extern guint _gdk_debug_flags;
 extern guint _gdk_gl_flags;
 extern GdkRenderingMode    _gdk_rendering_mode;
+extern gboolean _gdk_debug_updates;
 
 #ifdef G_ENABLE_DEBUG
 
diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
index fdbdf37..4ebf461 100644
--- a/gdk/gdkwindow.c
+++ b/gdk/gdkwindow.c
@@ -3338,7 +3338,7 @@ gdk_cairo_create (GdkWindow *window)
 /* Code for dirty-region queueing
  */
 static GSList *update_windows = NULL;
-static gboolean debug_updates = FALSE;
+gboolean _gdk_debug_updates = FALSE;
 
 static inline gboolean
 gdk_window_is_ancestor (GdkWindow *window,
@@ -3613,7 +3613,9 @@ gdk_window_process_updates_internal (GdkWindow *window)
 {
   GdkWindowImplClass *impl_class;
   GdkWindow *toplevel;
+  GdkDisplay *display;
 
+  display = gdk_window_get_display (window);
   toplevel = gdk_window_get_toplevel (window);
   if (toplevel->geometry_dirty)
     {
@@ -3653,7 +3655,7 @@ gdk_window_process_updates_internal (GdkWindow *window)
          /* Clip to part visible in impl window */
          cairo_region_intersect (expose_region, window->clip_region);
 
-         if (debug_updates)
+         if (gdk_display_get_debug_updates (display))
            {
               cairo_region_t *swap_region = cairo_region_copy (expose_region);
               cairo_region_subtract (swap_region, window->active_update_area);
@@ -4067,6 +4069,7 @@ gdk_window_invalidate_maybe_recurse_full (GdkWindow            *window,
 {
   cairo_region_t *visible_region;
   cairo_rectangle_int_t r;
+  GdkDisplay *display;
 
   g_return_if_fail (GDK_IS_WINDOW (window));
 
@@ -4086,7 +4089,8 @@ gdk_window_invalidate_maybe_recurse_full (GdkWindow            *window,
 
   invalidate_impl_subwindows (window, region, child_func, user_data, 0, 0);
 
-  if (debug_updates)
+  display = gdk_window_get_display (window);
+  if (gdk_display_get_debug_updates (display))
     draw_ugly_color (window, visible_region, 0);
 
   while (window != NULL && 
@@ -4458,7 +4462,7 @@ gdk_window_thaw_toplevel_updates (GdkWindow *window)
 void
 gdk_window_set_debug_updates (gboolean setting)
 {
-  debug_updates = setting;
+  _gdk_debug_updates = setting;
 }
 
 /**


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]