summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk/gtkwidget.c99
-rw-r--r--gtk/gtkwidget.h12
2 files changed, 54 insertions, 57 deletions
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index a2b1522625..74df382645 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -398,7 +398,7 @@ typedef struct {
} GtkWidgetTemplate;
typedef struct {
- GtkEventController *controller;
+ GtkGesture *controller;
guint evmask_notify_id;
guint propagation_phase : 2;
} EventControllerData;
@@ -7130,7 +7130,7 @@ _gtk_widget_get_controllers_evmask (GtkWidget *widget)
for (l = priv->event_controllers; l; l = l->next)
{
data = l->data;
- evmask |= gtk_event_controller_get_event_mask (data->controller);
+ evmask |= gtk_event_controller_get_event_mask (GTK_EVENT_CONTROLLER (data->controller));
}
return evmask;
@@ -7153,7 +7153,8 @@ _gtk_widget_run_controllers (GtkWidget *widget,
data = l->data;
if (data->propagation_phase == phase)
- handled |= gtk_event_controller_handle_event (data->controller, event);
+ handled |= gtk_event_controller_handle_event (GTK_EVENT_CONTROLLER (data->controller),
+ event);
}
return handled;
@@ -11864,7 +11865,7 @@ gtk_widget_finalize (GObject *object)
while (priv->event_controllers)
{
data = priv->event_controllers->data;
- gtk_widget_remove_controller (widget, data->controller);
+ gtk_widget_remove_gesture (widget, data->controller);
}
if (g_object_is_floating (object))
@@ -16538,75 +16539,82 @@ event_controller_notify_event_mask (GtkEventController *controller,
gtk_widget_add_events_internal (widget, NULL, evmask);
}
-void
-gtk_widget_add_controller (GtkWidget *widget,
- GtkEventController *controller,
- GtkPropagationPhase phase)
+EventControllerData *
+_gtk_widget_has_gesture (GtkWidget *widget,
+ GtkGesture *gesture)
{
EventControllerData *data;
GtkWidgetPrivate *priv;
GList *l;
- g_return_if_fail (GTK_IS_WIDGET (widget));
- g_return_if_fail (GTK_IS_EVENT_CONTROLLER (controller));
- g_return_if_fail (phase >= GTK_PHASE_NONE &&
- phase <= GTK_PHASE_BUBBLE);
-
priv = widget->priv;
for (l = priv->event_controllers; l; l = l->next)
{
data = l->data;
+ if (data->controller == gesture)
+ return data;
+ }
- if (data->controller != controller)
- continue;
+ return NULL;
+}
- data->propagation_phase = phase;
- return;
- }
+void
+gtk_widget_add_gesture (GtkWidget *widget,
+ GtkGesture *gesture,
+ GtkPropagationPhase phase)
+{
+ EventControllerData *data;
+ GtkWidgetPrivate *priv;
+
+ g_return_if_fail (GTK_IS_WIDGET (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 (!_gtk_widget_has_gesture (widget, gesture));
+
+ priv = widget->priv;
data = g_new0 (EventControllerData, 1);
- data->controller = g_object_ref (controller);
+ data->controller = g_object_ref (gesture);
data->propagation_phase = phase;
data->evmask_notify_id =
- g_signal_connect (controller, "notify::event-mask",
+ g_signal_connect (gesture, "notify::event-mask",
G_CALLBACK (event_controller_notify_event_mask), widget);
priv->event_controllers = g_list_prepend (priv->event_controllers, data);
}
void
-gtk_widget_remove_controller (GtkWidget *widget,
- GtkEventController *controller)
+gtk_widget_remove_gesture (GtkWidget *widget,
+ GtkGesture *gesture)
{
EventControllerData *data;
GtkWidgetPrivate *priv;
- GList *l;
g_return_if_fail (GTK_IS_WIDGET (widget));
- g_return_if_fail (GTK_IS_EVENT_CONTROLLER (controller));
+ g_return_if_fail (GTK_IS_GESTURE (gesture));
priv = widget->priv;
+ data = _gtk_widget_has_gesture (widget, gesture);
- for (l = priv->event_controllers; l; l = l->next)
- {
- data = l->data;
+ if (!data)
+ return;
- if (data->controller != controller)
- continue;
+ priv->event_controllers = g_list_remove (priv->event_controllers, data);
- gtk_event_controller_reset (data->controller);
- g_signal_handler_disconnect (data->controller, data->evmask_notify_id);
- g_object_unref (data->controller);
- g_free (data);
- priv->event_controllers = g_list_delete_link (priv->event_controllers, l);
- return;
- }
+ if (g_signal_handler_is_connected (widget, data->grab_notify_id))
+ g_signal_handler_disconnect (widget, data->grab_notify_id);
+
+ g_signal_handler_disconnect (data->controller, data->evmask_notify_id);
+ gtk_event_controller_reset (GTK_EVENT_CONTROLLER (data->controller));
+ g_object_unref (data->controller);
+ g_free (data);
}
GList *
-gtk_widget_list_controllers (GtkWidget *widget,
- GtkPropagationPhase phase)
+gtk_widget_list_gestures (GtkWidget *widget,
+ GtkPropagationPhase phase)
{
EventControllerData *data;
GtkWidgetPrivate *priv;
@@ -16646,12 +16654,7 @@ gtk_widget_get_sequence_state (GtkWidget *widget,
for (l = priv->event_controllers; l; l = l->next)
{
data = l->data;
-
- if (!GTK_IS_GESTURE (data->controller))
- continue;
-
- state = gtk_gesture_get_sequence_state (GTK_GESTURE (data->controller),
- sequence);
+ state = gtk_gesture_get_sequence_state (data->controller, sequence);
if (state != GTK_EVENT_SEQUENCE_NONE)
return state;
}
@@ -16664,10 +16667,8 @@ gtk_widget_set_sequence_state (GtkWidget *widget,
GdkEventSequence *sequence,
GtkEventSequenceState state)
{
- EventControllerData *data;
gboolean handled = FALSE;
GtkWidget *event_widget;
- GtkWidgetPrivate *priv;
const GdkEvent *event;
g_return_if_fail (GTK_IS_WIDGET (widget));
@@ -16680,16 +16681,12 @@ gtk_widget_set_sequence_state (GtkWidget *widget,
if (!handled)
return;
- priv = widget->priv;
- data = priv->event_controllers->data;
- event = gtk_gesture_get_last_event (GTK_GESTURE (data->controller), sequence);
+ event = _gtk_widget_get_last_event (widget, sequence);
if (!event)
return;
event_widget = gtk_get_event_widget ((GdkEvent *) event);
- g_assert (widget == event_widget ||
- gtk_widget_is_ancestor (event_widget, widget));
while (event_widget)
{
diff --git a/gtk/gtkwidget.h b/gtk/gtkwidget.h
index f3b2cf0d23..5795865bdd 100644
--- a/gtk/gtkwidget.h
+++ b/gtk/gtkwidget.h
@@ -33,7 +33,7 @@
#include <gtk/gtkaccelgroup.h>
#include <gtk/gtkborder.h>
#include <gtk/gtktypes.h>
-#include <gtk/gtkeventcontroller.h>
+#include <gtk/gtkgesture.h>
#include <atk/atk.h>
G_BEGIN_DECLS
@@ -1471,14 +1471,14 @@ void gtk_widget_class_bind_template_child_full (GtkWidgetClass *
gssize struct_offset);
GDK_AVAILABLE_IN_3_14
-void gtk_widget_add_controller (GtkWidget *widget,
- GtkEventController *controller,
+void gtk_widget_add_gesture (GtkWidget *widget,
+ GtkGesture *gesture,
GtkPropagationPhase phase);
GDK_AVAILABLE_IN_3_14
-void gtk_widget_remove_controller (GtkWidget *widget,
- GtkEventController *controller);
+void gtk_widget_remove_gesture (GtkWidget *widget,
+ GtkGesture *gesture);
GDK_AVAILABLE_IN_3_14
-GList * gtk_widget_list_controllers (GtkWidget *widget,
+GList * gtk_widget_list_gestures (GtkWidget *widget,
GtkPropagationPhase phase);
GDK_AVAILABLE_IN_3_14