From 633d5d1b847bbfa5c94c662e262ccc921bbf40cb Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Wed, 8 Apr 2020 12:40:03 -0300 Subject: [PATCH] clutter/gesture-action: Cancel gesture when disabling the action Like the click action, it makes sense to cancel the ongoing gesture when the action is disabled. Do so by overriding our new friend, ClutterActorMeta.set_enabled, and canceling the gesture when disabling the action. https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1188 --- clutter/clutter/clutter-gesture-action.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/clutter/clutter/clutter-gesture-action.c b/clutter/clutter/clutter-gesture-action.c index bd345eacb..636053036 100644 --- a/clutter/clutter/clutter-gesture-action.c +++ b/clutter/clutter/clutter-gesture-action.c @@ -556,6 +556,21 @@ clutter_gesture_action_set_actor (ClutterActorMeta *meta, meta_class->set_actor (meta, actor); } +static void +clutter_gesture_action_set_enabled (ClutterActorMeta *meta, + gboolean is_enabled) +{ + ClutterActorMetaClass *meta_class = + CLUTTER_ACTOR_META_CLASS (clutter_gesture_action_parent_class); + ClutterGestureAction *gesture_action = CLUTTER_GESTURE_ACTION (meta); + ClutterGestureActionPrivate *priv = gesture_action->priv; + + if (!is_enabled && priv->in_gesture) + cancel_gesture (gesture_action); + + meta_class->set_enabled (meta, is_enabled); +} + static gboolean default_event_handler (ClutterGestureAction *action, ClutterActor *actor) @@ -654,6 +669,7 @@ clutter_gesture_action_class_init (ClutterGestureActionClass *klass) gobject_class->get_property = clutter_gesture_action_get_property; meta_class->set_actor = clutter_gesture_action_set_actor; + meta_class->set_enabled = clutter_gesture_action_set_enabled; klass->gesture_begin = default_event_handler; klass->gesture_progress = default_event_handler;