From 2dd851d9f4aa60dfb36c59dab9dc86dfe9f8d0ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= Date: Wed, 6 Apr 2022 12:19:27 +0200 Subject: [PATCH] clutter: Add a GRABS debug flag Now that we have two kinds of grabs, the intricacies of event delivery got slightly more complicated. So this seems like a good point to introduce a new GRABS debug flag that gives an overview of which grabs are currently in effect. Part-of: --- clutter/clutter/clutter-main.c | 1 + clutter/clutter/clutter-main.h | 1 + clutter/clutter/clutter-stage.c | 45 +++++++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+) diff --git a/clutter/clutter/clutter-main.c b/clutter/clutter/clutter-main.c index d589174d7..9be960f5e 100644 --- a/clutter/clutter/clutter-main.c +++ b/clutter/clutter/clutter-main.c @@ -116,6 +116,7 @@ static const GDebugKey clutter_debug_keys[] = { { "oob-transforms", CLUTTER_DEBUG_OOB_TRANSFORMS }, { "frame-timings", CLUTTER_DEBUG_FRAME_TIMINGS }, { "detailed-trace", CLUTTER_DEBUG_DETAILED_TRACE }, + { "grabs", CLUTTER_DEBUG_GRABS }, }; #endif /* CLUTTER_ENABLE_DEBUG */ diff --git a/clutter/clutter/clutter-main.h b/clutter/clutter/clutter-main.h index b9854956b..3315b7896 100644 --- a/clutter/clutter/clutter-main.h +++ b/clutter/clutter/clutter-main.h @@ -55,6 +55,7 @@ typedef enum CLUTTER_DEBUG_OOB_TRANSFORMS = 1 << 16, CLUTTER_DEBUG_FRAME_TIMINGS = 1 << 17, CLUTTER_DEBUG_DETAILED_TRACE = 1 << 18, + CLUTTER_DEBUG_GRABS = 1 << 19, } ClutterDebugFlag; typedef enum diff --git a/clutter/clutter/clutter-stage.c b/clutter/clutter/clutter-stage.c index 997f90c48..0d45b65af 100644 --- a/clutter/clutter/clutter-stage.c +++ b/clutter/clutter/clutter-stage.c @@ -4085,6 +4085,20 @@ clutter_stage_grab (ClutterStage *stage, priv->topmost_grab->prev = grab; priv->topmost_grab = grab; + + if (G_UNLIKELY (clutter_debug_flags & CLUTTER_DEBUG_GRABS)) + { + unsigned int n_grabs = 0; + ClutterGrab *g; + + for (g = priv->topmost_grab; g != NULL; g = g->next) + n_grabs++; + + CLUTTER_NOTE (GRABS, + "[grab=%p] Attached seat grab (n_grabs: %u) on actor: %s", + grab, n_grabs, _clutter_actor_get_debug_name (actor)); + } + clutter_actor_attach_grab (actor, grab); clutter_stage_notify_grab (stage, grab, grab->next); @@ -4132,6 +4146,19 @@ clutter_stage_unlink_grab (ClutterStage *stage, priv->grab_state = CLUTTER_GRAB_STATE_NONE; } + if (G_UNLIKELY (clutter_debug_flags & CLUTTER_DEBUG_GRABS)) + { + unsigned int n_grabs = 0; + ClutterGrab *g; + + for (g = priv->topmost_grab; g != NULL; g = g->next) + n_grabs++; + + CLUTTER_NOTE (GRABS, + "[grab=%p] Detached seat grab (n_grabs: %u)", + grab, n_grabs); + } + grab->next = NULL; grab->prev = NULL; } @@ -4311,6 +4338,10 @@ setup_implicit_grab (PointerDeviceEntry *entry) return FALSE; } + CLUTTER_NOTE (GRABS, + "[device=%p sequence=%p] Aquiring implicit grab", + entry->device, entry->sequence); + g_assert (entry->press_count == 0); g_assert (entry->event_emission_chain->len == 0); @@ -4331,6 +4362,10 @@ release_implicit_grab (PointerDeviceEntry *entry) return FALSE; } + CLUTTER_NOTE (GRABS, + "[device=%p sequence=%p] Releasing implicit grab", + entry->device, entry->sequence); + g_assert (entry->press_count == 1); entry->press_count = 0; @@ -4356,6 +4391,10 @@ clutter_stage_maybe_lost_implicit_grab (ClutterStage *self, if (!entry->press_count) return; + CLUTTER_NOTE (GRABS, + "[device=%p sequence=%p] Lost implicit grab", + device, sequence); + for (i = 0; i < entry->event_emission_chain->len; i++) { EventReceiver *receiver = @@ -4504,6 +4543,12 @@ cancel_implicit_grab_on_actor (PointerDeviceEntry *entry, unsigned int i; ClutterActor *parent = clutter_actor_get_parent (actor); + CLUTTER_NOTE (GRABS, + "[device=%p sequence=%p] Cancelling implicit grab on actor (%s) " + "due to unmap", + entry->device, entry->sequence, + _clutter_actor_get_debug_name (actor)); + for (i = 0; i < entry->event_emission_chain->len; i++) { EventReceiver *receiver =