diff options
author | Marco Trevisan (TreviƱo) <mail@3v1n0.net> | 2019-04-29 20:02:18 +0000 |
---|---|---|
committer | Marco Trevisan <mail@3v1n0.net> | 2019-05-03 18:31:56 +0000 |
commit | b838fe8f05ee3c99cb6cc65ba387fecc7cba3e46 (patch) | |
tree | 619900d5ca9b4c334111bb9b30377cb36604727a | |
parent | 2e64457f4c85a8e2e0991bce7c2ead869abd594a (diff) | |
download | mutter-b838fe8f05ee3c99cb6cc65ba387fecc7cba3e46.tar.gz |
compositor: Disconnect from stage signals on destruction
From this point there's not any need for the compositor to listen to signals
so we can disconnect from the stage ones we are connected to.
https://gitlab.gnome.org/GNOME/mutter/merge_requests/556
(cherry picked from commit 3ba79961fed2c70df3201b3e588990c92aadcd7f)
-rw-r--r-- | src/compositor/compositor-private.h | 3 | ||||
-rw-r--r-- | src/compositor/compositor.c | 21 |
2 files changed, 19 insertions, 5 deletions
diff --git a/src/compositor/compositor-private.h b/src/compositor/compositor-private.h index 40c0344cc..4669bc5cb 100644 --- a/src/compositor/compositor-private.h +++ b/src/compositor/compositor-private.h @@ -18,6 +18,9 @@ struct _MetaCompositor guint pre_paint_func_id; guint post_paint_func_id; + guint stage_presented_id; + guint stage_after_paint_id; + gint64 server_time_query_time; gint64 server_time_offset; 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); |