summaryrefslogtreecommitdiff
path: root/src/compositor/compositor.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/compositor/compositor.c')
-rw-r--r--src/compositor/compositor.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/src/compositor/compositor.c b/src/compositor/compositor.c
index 0eb54fd4e..ff919e6de 100644
--- a/src/compositor/compositor.c
+++ b/src/compositor/compositor.c
@@ -674,9 +674,6 @@ meta_compositor_remove_window (MetaCompositor *compositor,
if (compositor->unredirected_window == window)
set_unredirected_window (compositor, NULL);
- if (compositor->top_window_actor == window_actor)
- compositor->top_window_actor = NULL;
-
meta_window_actor_destroy (window_actor);
}
@@ -955,6 +952,16 @@ get_top_visible_window_actor (MetaCompositor *compositor)
return NULL;
}
+static void
+on_top_window_actor_destroyed (MetaWindowActor *window_actor,
+ MetaCompositor *compositor)
+{
+ compositor->top_window_actor = NULL;
+ compositor->windows = g_list_remove (compositor->windows, window_actor);
+
+ meta_stack_tracker_queue_sync_stack (compositor->display->screen->stack_tracker);
+}
+
void
meta_compositor_sync_stack (MetaCompositor *compositor,
GList *stack)
@@ -1042,7 +1049,17 @@ meta_compositor_sync_stack (MetaCompositor *compositor,
sync_actor_stacking (compositor);
+ if (compositor->top_window_actor)
+ g_signal_handlers_disconnect_by_func (compositor->top_window_actor,
+ on_top_window_actor_destroyed,
+ compositor);
+
compositor->top_window_actor = get_top_visible_window_actor (compositor);
+
+ if (compositor->top_window_actor)
+ g_signal_connect (compositor->top_window_actor, "destroy",
+ G_CALLBACK (on_top_window_actor_destroyed),
+ compositor);
}
void