Wayland: fix a crash in opaque region handling

We may get a NULL region passed to the backend, which means
'nothing is opaque'. In that case, don't crash, but pass
the information on to the compositor.

http://bugzilla.gnome.org/show_bug.cgi?id=709854
This commit is contained in:
Matthias Clasen
2013-10-15 18:19:22 -04:00
parent db7115d841
commit 73bae5b816

View File

@ -2070,7 +2070,7 @@ gdk_wayland_window_set_opaque_region (GdkWindow *window,
cairo_region_t *region) cairo_region_t *region)
{ {
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl); GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
struct wl_region *wl_region; struct wl_region *wl_region = NULL;
if (GDK_WINDOW_DESTROYED (window)) if (GDK_WINDOW_DESTROYED (window))
return; return;
@ -2078,12 +2078,13 @@ gdk_wayland_window_set_opaque_region (GdkWindow *window,
if (!impl->surface) if (!impl->surface)
gdk_wayland_window_create_surface (window); gdk_wayland_window_create_surface (window);
wl_region = wl_region_from_cairo_region (GDK_WAYLAND_DISPLAY (gdk_window_get_display (window)), region); if (region != NULL)
if (wl_region == NULL) wl_region = wl_region_from_cairo_region (GDK_WAYLAND_DISPLAY (gdk_window_get_display (window)), region);
return;
wl_surface_set_opaque_region (impl->surface, wl_region); wl_surface_set_opaque_region (impl->surface, wl_region);
wl_region_destroy (wl_region);
if (wl_region != NULL)
wl_region_destroy (wl_region);
} }