[gtk+/gestures: 151/173] gesture: Add GTK_PHASE_TARGET



commit 4beeb9f7200941dee0f7b7ca4f1c3ae53781f961
Author: Carlos Garnacho <carlosg gnome org>
Date:   Sat May 10 20:50:23 2014 +0200

    gesture: Add GTK_PHASE_TARGET
    
    This phase is meant to run in the default widget handlers, as opposed
    to externally as in the bubble/capture phase. This will be most usually
    the expected phase for every controller replacing code in event handlers
    in GTK+, just so invocation and triggering order is kept unaltered.

 gtk/gtkenums.h   |   10 +++++++---
 gtk/gtkgesture.c |    2 +-
 gtk/gtkwidget.c  |    5 ++---
 3 files changed, 10 insertions(+), 7 deletions(-)
---
diff --git a/gtk/gtkenums.h b/gtk/gtkenums.h
index 8e0504b..ff31cca 100644
--- a/gtk/gtkenums.h
+++ b/gtk/gtkenums.h
@@ -1277,8 +1277,11 @@ typedef enum
  *   to the event widget. This option should only be used on containers that
  *   might possibly handle events before their children do.
  * @GTK_PHASE_BUBBLE: Events are delivered in the bubble phase. The bubble
- *   phase happens after the capture phase, runs from the event widget, up to
- *   the toplevel.
+ *   phase happens after the capture phase, and before the default handlers
+ *   are run. This phase runs from the event widget, up to the toplevel.
+ * @GTK_PHASE_TARGET: Events are delivered in the default widget event handlers,
+ *   note that widget implementations must chain up on button, motion, touch and
+ *   grab broken handlers for controllers in this phase to be run.
  *
  * Describes the stage at which events are fed into a #GtkEventController.
  *
@@ -1288,7 +1291,8 @@ typedef enum
 {
   GTK_PHASE_NONE,
   GTK_PHASE_CAPTURE,
-  GTK_PHASE_BUBBLE
+  GTK_PHASE_BUBBLE,
+  GTK_PHASE_TARGET
 } GtkPropagationPhase;
 
 /**
diff --git a/gtk/gtkgesture.c b/gtk/gtkgesture.c
index 9689f55..5cdba14 100644
--- a/gtk/gtkgesture.c
+++ b/gtk/gtkgesture.c
@@ -1530,7 +1530,7 @@ gtk_gesture_attach (GtkGesture          *gesture,
   GtkWidget *widget;
 
   g_return_if_fail (GTK_IS_GESTURE (gesture));
-  g_return_if_fail (phase >= GTK_PHASE_NONE && phase <= GTK_PHASE_BUBBLE);
+  g_return_if_fail (phase >= GTK_PHASE_NONE && phase <= GTK_PHASE_TARGET);
 
   widget = gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (gesture));
   _gtk_widget_add_controller (widget, GTK_EVENT_CONTROLLER (gesture), phase);
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 1fa707d..5dcbc2c 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -16694,8 +16694,7 @@ event_controller_grab_notify (GtkWidget           *widget,
   if (!grab_widget || grab_widget == widget)
     return;
 
-  if (((data->phase == GTK_PHASE_NONE ||
-        data->phase == GTK_PHASE_BUBBLE) &&
+  if ((data->phase != GTK_PHASE_CAPTURE &&
        !gtk_widget_is_ancestor (widget, grab_widget)) ||
       (data->phase == GTK_PHASE_CAPTURE &&
        !gtk_widget_is_ancestor (widget, grab_widget) &&
@@ -16796,7 +16795,7 @@ _gtk_widget_add_controller (GtkWidget           *widget,
   g_return_if_fail (GTK_IS_EVENT_CONTROLLER (controller));
   g_return_if_fail (widget == gtk_event_controller_get_widget (controller));
   g_return_if_fail (!_gtk_widget_has_controller (widget, controller));
-  g_return_if_fail (phase >= GTK_PHASE_NONE && phase <= GTK_PHASE_BUBBLE);
+  g_return_if_fail (phase >= GTK_PHASE_NONE && phase <= GTK_PHASE_TARGET);
 
   priv = widget->priv;
   data = _gtk_widget_has_controller (widget, controller);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]