summaryrefslogtreecommitdiff
path: root/desktop-shell
diff options
context:
space:
mode:
Diffstat (limited to 'desktop-shell')
-rw-r--r--desktop-shell/shell.c19
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 =