diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 7a05785aef..0eda0e21f1 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -7335,6 +7335,28 @@ _gtk_widget_run_controllers (GtkWidget *widget, return handled; } +static void +cancel_event_sequence_on_hierarchy (GtkWidget *widget, + GtkWidget *event_widget, + GdkEventSequence *sequence) +{ + gboolean cancel = TRUE; + + while (event_widget) + { + if (event_widget == widget) + cancel = FALSE; + else if (cancel) + _gtk_widget_cancel_sequence (event_widget, sequence); + else + _gtk_widget_set_sequence_state_internal (event_widget, sequence, + GTK_EVENT_SEQUENCE_DENIED, + NULL); + + event_widget = _gtk_widget_get_parent (event_widget); + } +} + gboolean _gtk_widget_captured_event (GtkWidget *widget, GdkEvent *event) @@ -17077,7 +17099,6 @@ event_controller_sequence_state_changed (GtkGesture *gesture, { gboolean handled = FALSE; GtkWidget *event_widget; - gboolean cancel = TRUE; const GdkEvent *event; handled = _gtk_widget_set_sequence_state_internal (widget, sequence, @@ -17092,20 +17113,7 @@ event_controller_sequence_state_changed (GtkGesture *gesture, return; event_widget = gtk_get_event_widget ((GdkEvent *) event); - - while (event_widget) - { - if (event_widget == widget) - cancel = FALSE; - else if (cancel) - _gtk_widget_cancel_sequence (event_widget, sequence); - else - _gtk_widget_set_sequence_state_internal (event_widget, sequence, - GTK_EVENT_SEQUENCE_DENIED, - NULL); - - event_widget = _gtk_widget_get_parent (event_widget); - } + cancel_event_sequence_on_hierarchy (widget, event_widget, sequence); } static EventControllerData *