Revert "window-actor: Remove conditional checks for the shape region"

This reverts commit 84930f1d781e1432a3319ecea095d8da602498f8.
This commit is contained in:
Jasper St. Pierre 2013-02-06 00:02:02 -05:00
parent 3516902fae
commit e48c3dac87

View File

@ -68,7 +68,7 @@ struct _MetaWindowActorPrivate
gchar * desc; gchar * desc;
/* A region that matches the shape of the window, including frame bounds */ /* If the window is shaped, a region that matches the shape */
cairo_region_t *shape_region; cairo_region_t *shape_region;
/* A rectangular region with the visible extents of the window */ /* A rectangular region with the visible extents of the window */
cairo_region_t *bounding_region; cairo_region_t *bounding_region;
@ -560,7 +560,16 @@ meta_window_actor_get_shape_bounds (MetaWindowActor *self,
{ {
MetaWindowActorPrivate *priv = self->priv; MetaWindowActorPrivate *priv = self->priv;
cairo_region_get_extents (priv->shape_region, bounds); /* We need to be defensive here because there are corner cases
* where getting the shape fails on a window being destroyed
* and similar.
*/
if (priv->shape_region)
cairo_region_get_extents (priv->shape_region, bounds);
else if (priv->bounding_region)
cairo_region_get_extents (priv->bounding_region, bounds);
else
bounds->x = bounds->y = bounds->width = bounds->height = 0;
} }
static void static void
@ -1604,7 +1613,12 @@ meta_window_actor_get_obscured_region (MetaWindowActor *self)
MetaWindowActorPrivate *priv = self->priv; MetaWindowActorPrivate *priv = self->priv;
if (!priv->argb32 && priv->opacity == 0xff && priv->back_pixmap) if (!priv->argb32 && priv->opacity == 0xff && priv->back_pixmap)
return priv->shape_region; {
if (priv->shape_region)
return priv->shape_region;
else
return priv->bounding_region;
}
else else
return NULL; return NULL;
} }
@ -1853,17 +1867,25 @@ check_needs_shadow (MetaWindowActor *self)
if (*shadow_location == NULL && should_have_shadow) if (*shadow_location == NULL && should_have_shadow)
{ {
if (priv->shadow_shape == NULL) if (priv->shadow_shape == NULL)
priv->shadow_shape = meta_window_shape_new (priv->shape_region); {
if (priv->shape_region)
priv->shadow_shape = meta_window_shape_new (priv->shape_region);
else if (priv->bounding_region)
priv->shadow_shape = meta_window_shape_new (priv->bounding_region);
}
MetaShadowFactory *factory = meta_shadow_factory_get_default (); if (priv->shadow_shape != NULL)
const char *shadow_class = meta_window_actor_get_shadow_class (self); {
cairo_rectangle_int_t shape_bounds; MetaShadowFactory *factory = meta_shadow_factory_get_default ();
const char *shadow_class = meta_window_actor_get_shadow_class (self);
cairo_rectangle_int_t shape_bounds;
meta_window_actor_get_shape_bounds (self, &shape_bounds); meta_window_actor_get_shape_bounds (self, &shape_bounds);
*shadow_location = meta_shadow_factory_get_shadow (factory, *shadow_location = meta_shadow_factory_get_shadow (factory,
priv->shadow_shape, priv->shadow_shape,
shape_bounds.width, shape_bounds.height, shape_bounds.width, shape_bounds.height,
shadow_class, appears_focused); shadow_class, appears_focused);
}
} }
if (old_shadow != NULL) if (old_shadow != NULL)