summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/compositor/compositor.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/compositor/compositor.c b/src/compositor/compositor.c
index 0854a198b..f47889f43 100644
--- a/src/compositor/compositor.c
+++ b/src/compositor/compositor.c
@@ -92,6 +92,10 @@ on_presented (ClutterStage *stage,
ClutterFrameInfo *frame_info,
MetaCompositor *compositor);
+static void
+on_top_window_actor_destroyed (MetaWindowActor *window_actor,
+ MetaCompositor *compositor);
+
static gboolean
is_modal (MetaDisplay *display)
{
@@ -134,6 +138,19 @@ meta_compositor_destroy (MetaCompositor *compositor)
clutter_threads_remove_repaint_func (compositor->pre_paint_func_id);
clutter_threads_remove_repaint_func (compositor->post_paint_func_id);
+ 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 = NULL;
+ }
+
+ g_clear_pointer (&compositor->window_group, clutter_actor_destroy);
+ g_clear_pointer (&compositor->top_window_group, clutter_actor_destroy);
+ g_clear_pointer (&compositor->feedback_group, clutter_actor_destroy);
+ g_clear_pointer (&compositor->windows, g_list_free);
+
if (compositor->have_x11_sync_object)
meta_sync_ring_destroy ();
}