Blob Blame History Raw
From a796938b3991535ac9b5e79436ce1dbf1da72904 Mon Sep 17 00:00:00 2001
From: "Owen W. Taylor" <otaylor@fishsoup.net>
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 -up mutter-3.8.4/src/compositor/meta-window-group.c.window-group-paint-volume mutter-3.8.4/src/compositor/meta-window-group.c
--- mutter-3.8.4/src/compositor/meta-window-group.c.window-group-paint-volume	2014-02-11 11:36:22.448065800 -0500
+++ mutter-3.8.4/src/compositor/meta-window-group.c	2014-02-11 11:40:28.723506360 -0500
@@ -250,11 +250,30 @@ meta_window_group_paint (ClutterActor *a
   g_list_free (children);
 }
 
+/* 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