diff --git a/src/compositor/compositor-private.h b/src/compositor/compositor-private.h
index 4669bc5cb..4582792d4 100644
--- a/src/compositor/compositor-private.h
+++ b/src/compositor/compositor-private.h
@@ -73,4 +73,6 @@ MetaCloseDialog * meta_compositor_create_close_dialog (MetaCompositor *composito
MetaInhibitShortcutsDialog * meta_compositor_create_inhibit_shortcuts_dialog (MetaCompositor *compositor,
MetaWindow *window);
+void meta_compositor_unmanage_window_actors (MetaCompositor *compositor);
+
#endif /* META_COMPOSITOR_PRIVATE_H */
diff --git a/src/compositor/compositor.c b/src/compositor/compositor.c
index 2545d2c0e..6d045339c 100644
--- a/src/compositor/compositor.c
+++ b/src/compositor/compositor.c
@@ -145,19 +145,6 @@ 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 ();
}
@@ -610,6 +597,23 @@ meta_compositor_unmanage (MetaCompositor *compositor)
}
}
+void
+meta_compositor_unmanage_window_actors (MetaCompositor *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 = 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);
+}
+
/**
* meta_shape_cow_for_window:
* @compositor: A #MetaCompositor
diff --git a/src/core/screen.c b/src/core/screen.c
index d7623f3fb..2e59754d1 100644
--- a/src/core/screen.c
+++ b/src/core/screen.c
@@ -41,6 +41,7 @@
#include "stack.h"
#include
#include
+#include "compositor-private.h"
#include "core.h"
#include "meta-cursor-tracker-private.h"
#include "boxes-private.h"
@@ -844,6 +845,8 @@ meta_screen_free (MetaScreen *screen,
meta_display_unmanage_windows_for_screen (display, screen, timestamp);
+ meta_compositor_unmanage_window_actors (display->compositor);
+
meta_prefs_remove_listener (prefs_changed_callback, screen);
meta_screen_ungrab_keys (screen);