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:
@@ -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)))
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user