[metacity] compositor-xrender: pass only visible surfaces to paint_windows



commit db76f8e249efff10c8295a1d2f94b0d890e9c9a0
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Wed Oct 23 01:14:36 2019 +0300

    compositor-xrender: pass only visible surfaces to paint_windows

 src/compositor/meta-compositor-xrender.c | 23 +++++++++++++----------
 1 file changed, 13 insertions(+), 10 deletions(-)
---
diff --git a/src/compositor/meta-compositor-xrender.c b/src/compositor/meta-compositor-xrender.c
index 5c0c22eb..64b8eaea 100644
--- a/src/compositor/meta-compositor-xrender.c
+++ b/src/compositor/meta-compositor-xrender.c
@@ -729,9 +729,6 @@ paint_dock_shadows (MetaCompositorXRender *xrender,
 
       surface = META_SURFACE (l->data);
 
-      if (!meta_surface_is_visible (surface))
-        continue;
-
       window = meta_surface_get_window (surface);
 
       if (window->type == META_WINDOW_DOCK)
@@ -774,9 +771,6 @@ paint_windows (MetaCompositorXRender *xrender,
 
       surface = META_SURFACE (index->data);
 
-      if (!meta_surface_is_visible (surface))
-        continue;
-
       window = meta_surface_get_window (surface);
 
       if (window->type == META_WINDOW_DESKTOP &&
@@ -823,9 +817,6 @@ paint_windows (MetaCompositorXRender *xrender,
       surface = META_SURFACE (index->data);
       surface_xrender = META_SURFACE_XRENDER (surface);
 
-      if (!meta_surface_is_visible (surface))
-        continue;
-
       window = meta_surface_get_window (surface);
 
       if (window->type != META_WINDOW_DOCK)
@@ -1117,6 +1108,8 @@ meta_compositor_xrender_redraw (MetaCompositor *compositor,
   int screen_width;
   int screen_height;
   GList *stack;
+  GList *visible_stack;
+  GList *l;
 
   xrender = META_COMPOSITOR_XRENDER (compositor);
 
@@ -1146,7 +1139,17 @@ meta_compositor_xrender_redraw (MetaCompositor *compositor,
     }
 
   stack = meta_compositor_get_stack (compositor);
-  paint_windows (xrender, stack, xrender->root_buffer, all_damage);
+  visible_stack = NULL;
+
+  for (l = stack; l != NULL; l = l->next)
+    {
+      if (meta_surface_is_visible (META_SURFACE (l->data)))
+        visible_stack = g_list_prepend (visible_stack, l->data);
+    }
+
+  visible_stack = g_list_reverse (visible_stack);
+  paint_windows (xrender, visible_stack, xrender->root_buffer, all_damage);
+  g_list_free (visible_stack);
 
   XFixesSetPictureClipRegion (xdisplay, xrender->root_buffer, 0, 0, all_damage);
   XRenderComposite (xdisplay, PictOpSrc, xrender->root_buffer, None,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]