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);