Stop using gdk_event_get_target

We can now get the target widget from the gesture
that we are using to find the event in the first
place.
This commit is contained in:
Matthias Clasen
2020-02-16 02:47:39 -05:00
parent 2bac066a63
commit 2416b4e2a0
3 changed files with 20 additions and 20 deletions

View File

@@ -851,15 +851,13 @@ scrolled_window_drag_begin_cb (GtkScrolledWindow *scrolled_window,
GtkEventSequenceState state;
GdkEventSequence *sequence;
GtkWidget *event_widget;
const GdkEvent *event;
priv->in_drag = FALSE;
priv->drag_start_x = priv->unclamped_hadj_value;
priv->drag_start_y = priv->unclamped_vadj_value;
gtk_scrolled_window_cancel_deceleration (scrolled_window);
sequence = gtk_gesture_single_get_current_sequence (GTK_GESTURE_SINGLE (gesture));
event = gtk_gesture_get_last_event (gesture, sequence);
event_widget = GTK_WIDGET (gdk_event_get_target (event));
event_widget = gtk_gesture_get_last_target (gesture, sequence);
if (event_widget == priv->vscrollbar || event_widget == priv->hscrollbar ||
(!may_hscroll (scrolled_window) && !may_vscroll (scrolled_window)))

View File

@@ -2064,15 +2064,14 @@ gtk_widget_get_property (GObject *object,
static void
_gtk_widget_emulate_press (GtkWidget *widget,
const GdkEvent *event)
const GdkEvent *event,
GtkWidget *event_widget)
{
GtkWidget *event_widget, *next_child, *parent;
GtkWidget *next_child, *parent;
GdkEvent *press;
gdouble x, y;
graphene_point_t p;
event_widget = GTK_WIDGET (gdk_event_get_target (event));
if (event_widget == widget)
return;
@@ -2156,8 +2155,9 @@ _gtk_widget_emulate_press (GtkWidget *widget,
}
static const GdkEvent *
_gtk_widget_get_last_event (GtkWidget *widget,
GdkEventSequence *sequence)
_gtk_widget_get_last_event (GtkWidget *widget,
GdkEventSequence *sequence,
GtkWidget **target)
{
GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
GtkEventController *controller;
@@ -2171,12 +2171,15 @@ _gtk_widget_get_last_event (GtkWidget *widget,
if (!GTK_IS_GESTURE (controller))
continue;
event = gtk_gesture_get_last_event (GTK_GESTURE (controller),
sequence);
event = gtk_gesture_get_last_event (GTK_GESTURE (controller), sequence);
if (event)
return event;
{
*target = gtk_gesture_get_last_target (GTK_GESTURE (controller), sequence);
return event;
}
}
*target = NULL;
return NULL;
}
@@ -2193,8 +2196,9 @@ _gtk_widget_get_emulating_sequence (GtkWidget *widget,
if (sequence)
{
const GdkEvent *last_event;
GtkWidget *target;
last_event = _gtk_widget_get_last_event (widget, sequence);
last_event = _gtk_widget_get_last_event (widget, sequence, &target);
if (last_event &&
(last_event->any.type == GDK_TOUCH_BEGIN ||
@@ -2264,6 +2268,7 @@ _gtk_widget_set_sequence_state_internal (GtkWidget *widget,
GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
gboolean emulates_pointer, sequence_handled = FALSE;
const GdkEvent *mimic_event;
GtkWidget *target;
GList *group = NULL, *l;
GdkEventSequence *seq;
gint n_handled = 0;
@@ -2275,7 +2280,7 @@ _gtk_widget_set_sequence_state_internal (GtkWidget *widget,
group = gtk_gesture_get_group (emitter);
emulates_pointer = _gtk_widget_get_emulating_sequence (widget, sequence, &seq);
mimic_event = _gtk_widget_get_last_event (widget, seq);
mimic_event = _gtk_widget_get_last_event (widget, seq, &target);
for (l = priv->event_controllers; l; l = l->next)
{
@@ -2338,7 +2343,7 @@ _gtk_widget_set_sequence_state_internal (GtkWidget *widget,
if (n_handled > 0 && sequence_handled &&
state == GTK_EVENT_SEQUENCE_DENIED &&
gtk_widget_needs_press_emulation (widget, sequence))
_gtk_widget_emulate_press (widget, mimic_event);
_gtk_widget_emulate_press (widget, mimic_event, target);
g_list_free (group);
@@ -11919,13 +11924,11 @@ gtk_widget_cancel_event_sequence (GtkWidget *widget,
if (!handled || state != GTK_EVENT_SEQUENCE_CLAIMED)
return;
event = _gtk_widget_get_last_event (widget, sequence);
event = _gtk_widget_get_last_event (widget, sequence, &event_widget);
if (!event)
return;
event_widget = GTK_WIDGET (gdk_event_get_target (event));
while (event_widget)
{
if (event_widget == widget)

View File

@@ -1508,8 +1508,7 @@ drag_gesture_update_cb (GtkGestureDrag *gesture,
if (gtk_event_controller_get_propagation_phase (GTK_EVENT_CONTROLLER (gesture)) == GTK_PHASE_CAPTURE)
{
const GdkEvent *event = gtk_gesture_get_last_event (GTK_GESTURE (gesture), sequence);
GtkWidget *event_widget = GTK_WIDGET (gdk_event_get_target (event));
GtkWidget *event_widget = gtk_gesture_get_last_target (GTK_GESTURE (gesture), sequence);
/* Check whether the target widget should be left alone at handling
* the sequence, this is better done late to give room for gestures