]> Pileus Git - ~andy/gtk/commitdiff
Don't crash in DND when the X server doesn't support SHAPE
authorMatthias Clasen <mclasen@redhat.com>
Tue, 16 Mar 2010 16:35:13 +0000 (12:35 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 16 Mar 2010 16:35:13 +0000 (12:35 -0400)
Reported in bug 612768

gdk/x11/gdkwindow-x11.c

index 455a88bf2ee02364ebe7613218696ae4c99d326a..f7789d4ef48a927a7103fe1f6dead67ef214cf87 100644 (file)
@@ -4604,14 +4604,18 @@ _xwindow_get_shape (Display *xdisplay,
   gint rn, ord, i;
 
   shape = NULL;
-  
+  rn = 0;
+
   xrl = XShapeGetRectangles (xdisplay,
                             window,
                             shape_type, &rn, &ord);
-  
+
+  if (xrl == NULL)
+    return NULL; /* XShape not supported */
+
   if (rn == 0)
     return gdk_region_new (); /* Empty */
-  
+
   if (ord != YXBanded)
     {
       /* This really shouldn't happen with any xserver, as they
@@ -4648,21 +4652,20 @@ _gdk_windowing_get_shape_for_mask (GdkBitmap *mask)
   display = gdk_drawable_get_display (GDK_DRAWABLE (mask));
 
   window = XCreateSimpleWindow (GDK_DISPLAY_XDISPLAY (display),
-                               GDK_SCREEN_XROOTWIN (gdk_display_get_default_screen (display)),
-                               -1, -1, 1, 1, 0,
-                               0, 0);
+                                GDK_SCREEN_XROOTWIN (gdk_display_get_default_screen (display)),
+                                -1, -1, 1, 1, 0,
+                                0, 0);
   XShapeCombineMask (GDK_DISPLAY_XDISPLAY (display),
-                    window,
-                    ShapeBounding,
-                    0, 0,
-                    GDK_PIXMAP_XID (mask),
-                    ShapeSet);
-  
+                     window,
+                     ShapeBounding,
+                     0, 0,
+                     GDK_PIXMAP_XID (mask),
+                     ShapeSet);
+
   region = _xwindow_get_shape (GDK_DISPLAY_XDISPLAY (display),
-                             window, ShapeBounding);
+                               window, ShapeBounding);
 
-  XDestroyWindow (GDK_DISPLAY_XDISPLAY (display),
-                 window);
+  XDestroyWindow (GDK_DISPLAY_XDISPLAY (display), window);
 
   return region;
 }