From 55226ada8a019b4e5bb9b0dd5d9efce07d1084dd Mon Sep 17 00:00:00 2001 From: "Owen W. Taylor" Date: Tue, 3 Dec 2013 00:27:03 -0500 Subject: [PATCH] MetaWindowGroup: fix paint volume In the past, MetaWindowGroup was allocated the size of the screen and painted the size of the screen because it contained the screen background, but now we also have the "top window group" which contains only popup windows, so the allocation doesn't properly reflect the paint bounds of the window group. Compute the paint bounds accurately from the children. https://bugzilla.gnome.org/show_bug.cgi?id=719669 --- src/compositor/meta-window-group.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/compositor/meta-window-group.c b/src/compositor/meta-window-group.c index 468dd3223..b0057b645 100644 --- a/src/compositor/meta-window-group.c +++ b/src/compositor/meta-window-group.c @@ -199,11 +199,30 @@ meta_window_group_paint (ClutterActor *actor) meta_cullable_reset_culling (META_CULLABLE (window_group)); } +/* Adapted from clutter_actor_update_default_paint_volume() */ static gboolean -meta_window_group_get_paint_volume (ClutterActor *actor, +meta_window_group_get_paint_volume (ClutterActor *self, ClutterPaintVolume *volume) { - return clutter_paint_volume_set_from_allocation (volume, actor); + ClutterActorIter iter; + ClutterActor *child; + + clutter_actor_iter_init (&iter, self); + while (clutter_actor_iter_next (&iter, &child)) + { + const ClutterPaintVolume *child_volume; + + if (!CLUTTER_ACTOR_IS_MAPPED (child)) + continue; + + child_volume = clutter_actor_get_transformed_paint_volume (child, self); + if (child_volume == NULL) + return FALSE; + + clutter_paint_volume_union (volume, child_volume); + } + + return TRUE; } static void