From ccb49f75e4acba9c94e39208db6a886b0b65d3c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= Date: Mon, 4 Apr 2022 11:14:22 +0200 Subject: [PATCH] clutter/actions: Never stop crossing events Crossing events should never be stopped during event emission. We already have a check that enforces this in clutter_actor_event(), but ClutterActions still sometimes try to stop crossing events from propagating. Improve that situation and return CLUTTER_EVENT_PROPAGATE when handling crossings in ClutterActions, too. Part-of: --- clutter/clutter/clutter-click-action.c | 4 ++-- clutter/clutter/clutter-gesture-action.c | 26 +++++++++++++----------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/clutter/clutter/clutter-click-action.c b/clutter/clutter/clutter-click-action.c index 4691d6c86..7af3f2e18 100644 --- a/clutter/clutter/clutter-click-action.c +++ b/clutter/clutter/clutter-click-action.c @@ -343,12 +343,12 @@ clutter_click_action_handle_event (ClutterAction *action, case CLUTTER_ENTER: click_action_set_pressed (click_action, priv->is_held); - break; + return CLUTTER_EVENT_PROPAGATE; case CLUTTER_LEAVE: click_action_set_pressed (click_action, FALSE); click_action_cancel_long_press (click_action); - break; + return CLUTTER_EVENT_PROPAGATE; case CLUTTER_TOUCH_CANCEL: clutter_click_action_release (click_action); diff --git a/clutter/clutter/clutter-gesture-action.c b/clutter/clutter/clutter-gesture-action.c index 83f4e73f0..a09084aa8 100644 --- a/clutter/clutter/clutter-gesture-action.c +++ b/clutter/clutter/clutter-gesture-action.c @@ -378,20 +378,22 @@ clutter_gesture_action_handle_event (ClutterAction *action, return CLUTTER_EVENT_PROPAGATE; } - if (point && - event_type == CLUTTER_LEAVE && - (event->crossing.flags & CLUTTER_EVENT_FLAG_GRAB_NOTIFY) != 0) - { - gesture_unregister_point (gesture_action, position); - - if (priv->in_gesture) - cancel_gesture (gesture_action); - - return CLUTTER_EVENT_PROPAGATE; - } - switch (clutter_event_type (event)) { + case CLUTTER_ENTER: + case CLUTTER_LEAVE: + if (point && + event_type == CLUTTER_LEAVE && + (event->crossing.flags & CLUTTER_EVENT_FLAG_GRAB_NOTIFY) != 0) + { + gesture_unregister_point (gesture_action, position); + + if (priv->in_gesture) + cancel_gesture (gesture_action); + } + + return CLUTTER_EVENT_PROPAGATE; + case CLUTTER_BUTTON_PRESS: case CLUTTER_TOUCH_BEGIN: if (priv->stage == NULL)