[mutter] compositor: Use direct access to disconnect top window actor signal
- From: Marco Trevisan <marcotrevi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] compositor: Use direct access to disconnect top window actor signal
- Date: Fri, 28 Jun 2019 17:44:11 +0000 (UTC)
commit b850f5a732c9438b8246eeec7a18bb6e9065a9f2
Author: Marco Trevisan (TreviƱo) <mail 3v1n0 net>
Date: Fri Jun 28 19:33:40 2019 +0200
compositor: Use direct access to disconnect top window actor signal
Everytime the top window changes we connect/disconnect to the actor's destroy
signal, although as explained in commit ba8f5a11 this might be slower in case
the window actor has many other signal connections.
So, just track this using an ID.
https://gitlab.gnome.org/GNOME/mutter/merge_requests/660
src/compositor/compositor-private.h | 1 +
src/compositor/compositor.c | 22 +++++++++++++---------
2 files changed, 14 insertions(+), 9 deletions(-)
---
diff --git a/src/compositor/compositor-private.h b/src/compositor/compositor-private.h
index 2bd7d696b..07fbf5119 100644
--- a/src/compositor/compositor-private.h
+++ b/src/compositor/compositor-private.h
@@ -33,6 +33,7 @@ struct _MetaCompositor
CoglContext *context;
MetaWindowActor *top_window_actor;
+ gulong top_window_actor_destroy_id;
/* Used for unredirecting fullscreen windows */
guint disable_unredirect_count;
diff --git a/src/compositor/compositor.c b/src/compositor/compositor.c
index 95a1de8ea..1ec31d338 100644
--- a/src/compositor/compositor.c
+++ b/src/compositor/compositor.c
@@ -149,10 +149,10 @@ meta_compositor_destroy (MetaCompositor *compositor)
if (compositor->top_window_actor)
{
- g_signal_handlers_disconnect_by_func (compositor->top_window_actor,
- on_top_window_actor_destroyed,
- compositor);
+ g_signal_handler_disconnect (compositor->top_window_actor,
+ compositor->top_window_actor_destroy_id);
compositor->top_window_actor = NULL;
+ compositor->top_window_actor_destroy_id = 0;
}
g_clear_pointer (&compositor->window_group, clutter_actor_destroy);
@@ -1025,6 +1025,7 @@ on_top_window_actor_destroyed (MetaWindowActor *window_actor,
MetaCompositor *compositor)
{
compositor->top_window_actor = NULL;
+ compositor->top_window_actor_destroy_id = 0;
compositor->windows = g_list_remove (compositor->windows, window_actor);
meta_stack_tracker_queue_sync_stack (compositor->display->stack_tracker);
@@ -1124,16 +1125,19 @@ meta_compositor_sync_stack (MetaCompositor *compositor,
return;
if (compositor->top_window_actor)
- g_signal_handlers_disconnect_by_func (compositor->top_window_actor,
- on_top_window_actor_destroyed,
- compositor);
+ {
+ g_signal_handler_disconnect (compositor->top_window_actor,
+ compositor->top_window_actor_destroy_id);
+ compositor->top_window_actor_destroy_id = 0;
+ }
compositor->top_window_actor = top_window_actor;
if (compositor->top_window_actor)
- g_signal_connect (compositor->top_window_actor, "destroy",
- G_CALLBACK (on_top_window_actor_destroyed),
- compositor);
+ compositor->top_window_actor_destroy_id =
+ g_signal_connect (compositor->top_window_actor, "destroy",
+ G_CALLBACK (on_top_window_actor_destroyed),
+ compositor);
}
void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]