From: Emilio Pozuelo Monfort <[email protected]> We were calling exposay_highlight_surface() inside a wl_list_for_each loop for a layer, but exposay_highlight_surface() calls activate() which calls shell_surface_update_layer(), which removes the surface from its layer and reinserts it, causing an infinite loop.
Call exposay_highlight_surface() outside the for_each to avoid this. https://bugs.freedesktop.org/show_bug.cgi?id=72404 --- desktop-shell/exposay.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/desktop-shell/exposay.c b/desktop-shell/exposay.c index 81da00a..f409aa3 100644 --- a/desktop-shell/exposay.c +++ b/desktop-shell/exposay.c @@ -187,7 +187,7 @@ exposay_layout(struct desktop_shell *shell) struct weston_compositor *compositor = shell->compositor; struct weston_output *output = get_default_output(compositor); struct weston_view *view; - struct exposay_surface *esurface; + struct exposay_surface *esurface, *highlight = NULL; int w, h; int i; int last_row_removed = 0; @@ -284,13 +284,16 @@ exposay_layout(struct desktop_shell *shell) esurface->height = view->surface->height * esurface->scale; if (shell->exposay.focus_current == esurface->view) - exposay_highlight_surface(shell, esurface); + highlight = esurface; exposay_animate_in(esurface); i++; } + if (highlight) + exposay_highlight_surface(shell, highlight); + weston_compositor_schedule_repaint(shell->compositor); return EXPOSAY_LAYOUT_ANIMATE_TO_OVERVIEW; -- 1.8.5.2 _______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
