Don't crash in DND when the X server doesn't support SHAPE

Reported in bug 612768
This commit is contained in:
Matthias Clasen 2010-03-16 12:35:13 -04:00 committed by Tristan Van Berkom
parent 4b7b8e513f
commit 1f3a57691f

View 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);
region = _xwindow_get_shape (GDK_DISPLAY_XDISPLAY (display),
window, ShapeBounding);
window,
ShapeBounding,
0, 0,
GDK_PIXMAP_XID (mask),
ShapeSet);
XDestroyWindow (GDK_DISPLAY_XDISPLAY (display),
window);
region = _xwindow_get_shape (GDK_DISPLAY_XDISPLAY (display),
window, ShapeBounding);
XDestroyWindow (GDK_DISPLAY_XDISPLAY (display), window);
return region;
}