summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlberts Muktupāvels <alberts.muktupavels@gmail.com>2019-10-23 01:14:36 +0300
committerAlberts Muktupāvels <alberts.muktupavels@gmail.com>2019-10-23 01:34:56 +0300
commitdb76f8e249efff10c8295a1d2f94b0d890e9c9a0 (patch)
tree2a20b3866ebd5de42c5e3edd3bed82a10731a064
parente94ee45ef7613128da673a36eafd755141e68969 (diff)
downloadmetacity-db76f8e249efff10c8295a1d2f94b0d890e9c9a0.tar.gz
compositor-xrender: pass only visible surfaces to paint_windows
-rw-r--r--src/compositor/meta-compositor-xrender.c23
1 files 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,