[gtk+/gtk-2-18] Don't crash in DND when the X server doesn't support SHAPE



commit a66aa434f933526663d62d202f9bd7841d52449e
Author: Matthias Clasen <mclasen redhat com>
Date:   Tue Mar 16 12:35:13 2010 -0400

    Don't crash in DND when the X server doesn't support SHAPE
    
    Reported in bug 612768
    (cherry picked from commit 996541d096d4d59e9baa384e5d5359a10567433e)

 gdk/x11/gdkwindow-x11.c |   33 ++++++++++++++++++---------------
 1 files changed, 18 insertions(+), 15 deletions(-)
---
diff --git a/gdk/x11/gdkwindow-x11.c b/gdk/x11/gdkwindow-x11.c
index 1914258..58ff6a3 100644
--- a/gdk/x11/gdkwindow-x11.c
+++ b/gdk/x11/gdkwindow-x11.c
@@ -4606,14 +4606,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
@@ -4650,21 +4654,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;
 }



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