From b21294dcac211632d6f3693e9dbbffa55cdbff30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Wed, 24 May 2023 14:25:12 +0200 Subject: [PATCH] clutter/actor: Add cloned/decloned signals This are called when a clone directly attaches to an actor. While not reliable to know whether a particular actor is cloned or not, one can at least this way get notified about whether an actor in particular is cloned. This can be useful for e.g. the MetaWindowActor, as it's what's most likely cloned, e.g. for alt-tab views etc. Part-of: --- clutter/clutter/clutter-actor.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c index 5c6f06b9d..0fc8c5c1d 100644 --- a/clutter/clutter/clutter-actor.c +++ b/clutter/clutter/clutter-actor.c @@ -926,6 +926,8 @@ enum TRANSITION_STOPPED, STAGE_VIEWS_CHANGED, RESOURCE_SCALE_CHANGED, + CLONED, + DECLONED, LAST_SIGNAL }; @@ -7381,6 +7383,24 @@ clutter_actor_class_init (ClutterActorClass *klass) G_STRUCT_OFFSET (ClutterActorClass, resource_scale_changed), NULL, NULL, NULL, G_TYPE_NONE, 0); + + /*< private > */ + actor_signals[CLONED] = + g_signal_new ("cloned", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + 0, NULL, NULL, NULL, + G_TYPE_NONE, 1, + CLUTTER_TYPE_CLONE); + + /*< private > */ + actor_signals[DECLONED] = + g_signal_new ("decloned", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + 0, NULL, NULL, NULL, + G_TYPE_NONE, 1, + CLUTTER_TYPE_CLONE); } static void @@ -18517,6 +18537,8 @@ _clutter_actor_attach_clone (ClutterActor *actor, g_hash_table_add (priv->clones, clone); clutter_actor_push_in_cloned_branch (actor, 1); + + g_signal_emit (actor, actor_signals[CLONED], 0, clone); } void @@ -18540,6 +18562,8 @@ _clutter_actor_detach_clone (ClutterActor *actor, g_hash_table_unref (priv->clones); priv->clones = NULL; } + + g_signal_emit (actor, actor_signals[DECLONED], 0, clone); } /**