diff options
author | Alberts Muktupāvels <alberts.muktupavels@gmail.com> | 2019-10-23 01:14:36 +0300 |
---|---|---|
committer | Alberts Muktupāvels <alberts.muktupavels@gmail.com> | 2019-10-23 01:34:56 +0300 |
commit | db76f8e249efff10c8295a1d2f94b0d890e9c9a0 (patch) | |
tree | 2a20b3866ebd5de42c5e3edd3bed82a10731a064 | |
parent | e94ee45ef7613128da673a36eafd755141e68969 (diff) | |
download | metacity-db76f8e249efff10c8295a1d2f94b0d890e9c9a0.tar.gz |
compositor-xrender: pass only visible surfaces to paint_windows
-rw-r--r-- | src/compositor/meta-compositor-xrender.c | 23 |
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, |