exposay: fix infinite loop with fullscreen surfaces
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
This commit is contained in:
parent
ef9c8eb2db
commit
e6bbe5a90d
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user