[MetaWindowActor] Fix crash in shadow shape creation

Protect against shape_region or bounding_region being NULL in check_needs_shadow.

This can happen for short lived windows and result into a crash.

https://bugzilla.gnome.org/show_bug.cgi?id=635421
This commit is contained in:
Adel Gadllah 2010-11-21 19:57:42 +01:00
parent 3183d954a0
commit 1394c566eb

View File

@ -1887,24 +1887,26 @@ check_needs_shadow (MetaWindowActor *self)
if (*shadow_location == NULL && should_have_shadow) if (*shadow_location == NULL && should_have_shadow)
{ {
MetaShadowFactory *factory = meta_shadow_factory_get_default ();
const char *shadow_class = meta_window_actor_get_shadow_class (self);
cairo_rectangle_int_t shape_bounds;
if (priv->shadow_shape == NULL) if (priv->shadow_shape == NULL)
{ {
if (priv->shaped) if (priv->shaped && priv->shape_region)
priv->shadow_shape = meta_window_shape_new (priv->shape_region); priv->shadow_shape = meta_window_shape_new (priv->shape_region);
else else if (priv->bounding_region)
priv->shadow_shape = meta_window_shape_new (priv->bounding_region); priv->shadow_shape = meta_window_shape_new (priv->bounding_region);
} }
meta_window_actor_get_shape_bounds (self, &shape_bounds); if (priv->shadow_shape != NULL)
{
MetaShadowFactory *factory = meta_shadow_factory_get_default ();
const char *shadow_class = meta_window_actor_get_shadow_class (self);
cairo_rectangle_int_t shape_bounds;
*shadow_location = meta_shadow_factory_get_shadow (factory, meta_window_actor_get_shape_bounds (self, &shape_bounds);
priv->shadow_shape, *shadow_location = meta_shadow_factory_get_shadow (factory,
shape_bounds.width, shape_bounds.height, priv->shadow_shape,
shadow_class, appears_focused); shape_bounds.width, shape_bounds.height,
shadow_class, appears_focused);
}
} }
if (old_shadow != NULL) if (old_shadow != NULL)