]> Pileus Git - ~andy/gtk/commitdiff
GdkWindowX11: the root window is not a toplevel
authorOwen W. Taylor <otaylor@fishsoup.net>
Sat, 16 Feb 2013 16:54:12 +0000 (11:54 -0500)
committerOwen W. Taylor <otaylor@fishsoup.net>
Sat, 16 Feb 2013 16:56:17 +0000 (11:56 -0500)
The macros we had for checking for toplevel windows were passing
through the root window, which was not intentional and meant that
for the root window WINDOW_IS_TOPLEVEL() returned TRUE but
window->impl->toplevel was NULL, causing gdk_window_create_cairo_surface()
to crash.

gdk/x11/gdkwindow-x11.c

index 4f30287b239d645ba022f9f2ed47061cd544c2b1..26eaf697a4123ff657526b88518aba4b98256ea1 100644 (file)
@@ -111,14 +111,14 @@ static void     gdk_window_x11_set_background     (GdkWindow      *window,
 
 static void        gdk_window_impl_x11_finalize   (GObject            *object);
 
-#define WINDOW_IS_TOPLEVEL_OR_FOREIGN(window) \
-  (GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD &&   \
-   GDK_WINDOW_TYPE (window) != GDK_WINDOW_OFFSCREEN)
-
-#define WINDOW_IS_TOPLEVEL(window)                  \
-  (GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD &&   \
-   GDK_WINDOW_TYPE (window) != GDK_WINDOW_FOREIGN && \
-   GDK_WINDOW_TYPE (window) != GDK_WINDOW_OFFSCREEN)
+#define WINDOW_IS_TOPLEVEL_OR_FOREIGN(window)           \
+  (GDK_WINDOW_TYPE (window) == GDK_WINDOW_TOPLEVEL ||   \
+   GDK_WINDOW_TYPE (window) == GDK_WINDOW_TEMP ||       \
+   GDK_WINDOW_TYPE (window) == GDK_WINDOW_FOREIGN)
+
+#define WINDOW_IS_TOPLEVEL(window)                      \
+  (GDK_WINDOW_TYPE (window) == GDK_WINDOW_TOPLEVEL ||   \
+   GDK_WINDOW_TYPE (window) == GDK_WINDOW_TEMP)
 
 /* Return whether time1 is considered later than time2 as far as xserver
  * time is concerned.  Accounts for wraparound.