[gtk+] Fix a bootstrapping problem without root windows



commit 124b790a77e4852544184971fc7ae248acae0713
Author: Matthias Clasen <mclasen redhat com>
Date:   Sat Aug 12 09:36:49 2017 -0400

    Fix a bootstrapping problem without root windows
    
    We create various windows during the initial creation of display
    objects, which causes some bootstrapping issues when we try to
    find the default screen to get its root window. To work around this,
    pass the display object into gdk_window_new.
    
    This is not an API change, since gdk_window_new is no longer public API.

 gdk/gdkinternals.h              |    3 ++-
 gdk/gdkwindow.c                 |   16 +++++++---------
 gdk/wayland/gdkwindow-wayland.c |    3 ++-
 3 files changed, 11 insertions(+), 11 deletions(-)
---
diff --git a/gdk/gdkinternals.h b/gdk/gdkinternals.h
index acff6f0..537741b 100644
--- a/gdk/gdkinternals.h
+++ b/gdk/gdkinternals.h
@@ -368,7 +368,8 @@ void            gdk_cairo_set_drawing_context    (cairo_t           *cr,
 cairo_surface_t *
            _gdk_window_ref_cairo_surface (GdkWindow *window);
 
-GdkWindow* gdk_window_new                (GdkWindow      *parent,
+GdkWindow* gdk_window_new                (GdkDisplay     *display,
+                                          GdkWindow      *parent,
                                           GdkWindowAttr  *attributes);
 void       _gdk_window_destroy           (GdkWindow      *window,
                                           gboolean        foreign_destroy);
diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
index 0d6a82f..010a27e 100644
--- a/gdk/gdkwindow.c
+++ b/gdk/gdkwindow.c
@@ -976,12 +976,12 @@ get_native_event_mask (GdkWindow *private)
 }
 
 GdkWindow*
-gdk_window_new (GdkWindow     *parent,
+gdk_window_new (GdkDisplay    *display,
+                GdkWindow     *parent,
                GdkWindowAttr *attributes)
 {
   GdkWindow *window;
   GdkScreen *screen;
-  GdkDisplay *display;
   gboolean native;
   GdkEventMask event_mask;
 
@@ -989,7 +989,7 @@ gdk_window_new (GdkWindow     *parent,
 
   if (!parent)
     {
-      screen = gdk_screen_get_default ();
+      screen = gdk_display_get_default_screen (display);
       parent = gdk_screen_get_root_window (screen);
     }
   else
@@ -1003,8 +1003,6 @@ gdk_window_new (GdkWindow     *parent,
       return NULL;
     }
 
-  display = gdk_screen_get_display (screen);
-
   window = _gdk_display_create_window (display);
 
   window->parent = parent;
@@ -1159,7 +1157,7 @@ gdk_window_new_toplevel (GdkDisplay *display,
   attr.height = height;
   attr.window_type = GDK_WINDOW_TOPLEVEL;
 
-  return gdk_window_new (NULL, &attr);
+  return gdk_window_new (display, NULL, &attr);
 }
 
 /**
@@ -1193,7 +1191,7 @@ gdk_window_new_popup (GdkDisplay         *display,
   attr.height = position->height;
   attr.window_type = GDK_WINDOW_TEMP;
 
-  return gdk_window_new (NULL, &attr);
+  return gdk_window_new (display, NULL, &attr);
 }
 
 /**
@@ -1224,7 +1222,7 @@ gdk_window_new_temp (GdkDisplay *display)
   attr.height = 10;
   attr.window_type = GDK_WINDOW_TEMP;
 
-  return gdk_window_new (NULL, &attr);
+  return gdk_window_new (display, NULL, &attr);
 }
 
 /**
@@ -1256,7 +1254,7 @@ gdk_window_new_child (GdkWindow          *parent,
   attr.height = position->height;
   attr.window_type = GDK_WINDOW_CHILD;
 
-  return gdk_window_new (parent, &attr);
+  return gdk_window_new (gdk_window_get_display (parent), parent, &attr);
 }
 
 /**
diff --git a/gdk/wayland/gdkwindow-wayland.c b/gdk/wayland/gdkwindow-wayland.c
index b6c4cee..c304799 100644
--- a/gdk/wayland/gdkwindow-wayland.c
+++ b/gdk/wayland/gdkwindow-wayland.c
@@ -3719,7 +3719,8 @@ gdk_wayland_window_new_subsurface (GdkDisplay         *display,
   attr.height = position->height;
   attr.window_type = GDK_WINDOW_SUBSURFACE;
 
-  return gdk_window_new (gdk_screen_get_root_window (gdk_display_get_default_screen (display)),
+  return gdk_window_new (display,
+                         gdk_screen_get_root_window (gdk_display_get_default_screen (display)),
                          &attr);
 }
 


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