[gtk+/gestures] gesture: Add GTK_PHASE_TARGET
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/gestures] gesture: Add GTK_PHASE_TARGET
- Date: Sat, 10 May 2014 19:23:41 +0000 (UTC)
commit 31f93f4ae412bfd060dd6ceedaf5d79afa030d01
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 35dfd94..3a99b06 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -16645,8 +16645,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) &&
@@ -16747,7 +16746,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]