clutter/click-action: Factor out drag threshold check

Next commit will perform the same check to determine if the
button release should emit the "clicked" signal or not, so
put it in a shared function.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1667>
This commit is contained in:
Georges Basile Stavracas Neto 2021-01-11 14:27:53 -03:00 committed by Marge Bot
parent 857e56b96e
commit 8a82abc4d7

View File

@ -272,6 +272,23 @@ click_action_cancel_long_press (ClutterClickAction *action)
} }
} }
static inline gboolean
event_within_drag_threshold (ClutterClickAction *click_action,
ClutterEvent *event)
{
ClutterClickActionPrivate *priv =
clutter_click_action_get_instance_private (click_action);
float motion_x, motion_y;
float delta_x, delta_y;
clutter_event_get_coords (event, &motion_x, &motion_y);
delta_x = ABS (motion_x - priv->press_x);
delta_y = ABS (motion_y - priv->press_y);
return delta_x <= priv->drag_threshold && delta_y <= priv->drag_threshold;
}
static gboolean static gboolean
on_event (ClutterActor *actor, on_event (ClutterActor *actor,
ClutterEvent *event, ClutterEvent *event,
@ -408,9 +425,6 @@ on_captured_event (ClutterActor *stage,
case CLUTTER_MOTION: case CLUTTER_MOTION:
case CLUTTER_TOUCH_UPDATE: case CLUTTER_TOUCH_UPDATE:
{ {
gfloat motion_x, motion_y;
gfloat delta_x, delta_y;
if (clutter_event_get_device (event) != priv->press_device || if (clutter_event_get_device (event) != priv->press_device ||
clutter_event_get_event_sequence (event) != priv->press_sequence) clutter_event_get_event_sequence (event) != priv->press_sequence)
return CLUTTER_EVENT_PROPAGATE; return CLUTTER_EVENT_PROPAGATE;
@ -418,13 +432,7 @@ on_captured_event (ClutterActor *stage,
if (!priv->is_held) if (!priv->is_held)
return CLUTTER_EVENT_PROPAGATE; return CLUTTER_EVENT_PROPAGATE;
clutter_event_get_coords (event, &motion_x, &motion_y); if (!event_within_drag_threshold (action, event))
delta_x = ABS (motion_x - priv->press_x);
delta_y = ABS (motion_y - priv->press_y);
if (delta_x > priv->drag_threshold ||
delta_y > priv->drag_threshold)
click_action_cancel_long_press (action); click_action_cancel_long_press (action);
} }
break; break;