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.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/src/compositor/compositor.c b/src/compositor/compositor.c
index a7b23ba3c..2545d2c0e 100644
--- a/src/compositor/compositor.c
+++ b/src/compositor/compositor.c
@@ -133,6 +133,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);
@@ -516,9 +525,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
@@ -528,8 +538,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);