diff options
Diffstat (limited to 'desktop-shell')
-rw-r--r-- | desktop-shell/shell.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c index 452cd5fd..8c37963a 100644 --- a/desktop-shell/shell.c +++ b/desktop-shell/shell.c @@ -177,6 +177,8 @@ struct shell_surface { bool has_set_geometry, has_next_geometry; int focus_count; + + bool destroying; }; struct shell_grab { @@ -3575,7 +3577,7 @@ shell_handle_surface_destroy(struct wl_listener *listener, void *data) } static void -fade_out_done(struct weston_view_animation *animation, void *data) +fade_out_done_idle_cb(void *data) { struct shell_surface *shsurf = data; @@ -3583,6 +3585,21 @@ fade_out_done(struct weston_view_animation *animation, void *data) } static void +fade_out_done(struct weston_view_animation *animation, void *data) +{ + struct shell_surface *shsurf = data; + struct wl_event_loop *loop; + + loop = wl_display_get_event_loop( + shsurf->surface->compositor->wl_display); + + if (!shsurf->destroying) { + wl_event_loop_add_idle(loop, fade_out_done_idle_cb, shsurf); + shsurf->destroying = true; + } +} + +static void handle_resource_destroy(struct wl_listener *listener, void *data) { struct shell_surface *shsurf = |