diff options
Diffstat (limited to 'src/compositor/compositor.c')
-rw-r--r-- | src/compositor/compositor.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/src/compositor/compositor.c b/src/compositor/compositor.c index f47889f43..2a2c8fb3b 100644 --- a/src/compositor/compositor.c +++ b/src/compositor/compositor.c @@ -135,6 +135,15 @@ meta_switch_workspace_completed (MetaCompositor *compositor) void meta_compositor_destroy (MetaCompositor *compositor) { + g_signal_handler_disconnect (compositor->stage, + compositor->stage_after_paint_id); + g_signal_handler_disconnect (compositor->stage, + compositor->stage_presented_id); + + compositor->stage_after_paint_id = 0; + compositor->stage_presented_id = 0; + compositor->stage = NULL; + clutter_threads_remove_repaint_func (compositor->pre_paint_func_id); clutter_threads_remove_repaint_func (compositor->post_paint_func_id); @@ -520,9 +529,10 @@ meta_compositor_manage (MetaCompositor *compositor) compositor->stage = meta_backend_get_stage (backend); - g_signal_connect (compositor->stage, "presented", - G_CALLBACK (on_presented), - compositor); + compositor->stage_presented_id = + g_signal_connect (compositor->stage, "presented", + G_CALLBACK (on_presented), + compositor); /* We use connect_after() here to accomodate code in GNOME Shell that, * when benchmarking drawing performance, connects to ::after-paint @@ -532,8 +542,9 @@ meta_compositor_manage (MetaCompositor *compositor) * connections to ::after-paint, connect() vs. connect_after() doesn't * matter. */ - g_signal_connect_after (CLUTTER_STAGE (compositor->stage), "after-paint", - G_CALLBACK (after_stage_paint), compositor); + compositor->stage_after_paint_id = + g_signal_connect_after (compositor->stage, "after-paint", + G_CALLBACK (after_stage_paint), compositor); clutter_stage_set_sync_delay (CLUTTER_STAGE (compositor->stage), META_SYNC_DELAY); |