summaryrefslogtreecommitdiff
path: root/gtk/gtkgesture.c
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2014-03-26 10:25:09 +0100
committerCarlos Garnacho <carlosg@gnome.org>2014-05-23 19:54:24 +0200
commit8e1d5f98de2312b241fb81838d667eeec1d0bd02 (patch)
tree434f489f6275cb83d19f80eafcd4411ae4aa1474 /gtk/gtkgesture.c
parentc49ac32393587f034068fda8cd4fde625624ad42 (diff)
downloadgtk+-8e1d5f98de2312b241fb81838d667eeec1d0bd02.tar.gz
widget: Improve button press emulation on sequence denied
Ensure that state being set on pointer emulating touches actually gets propagated properly on widgets with gestures that only handle pointer events.
Diffstat (limited to 'gtk/gtkgesture.c')
-rw-r--r--gtk/gtkgesture.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/gtk/gtkgesture.c b/gtk/gtkgesture.c
index 0f0fb9a84e..c6bd6583c2 100644
--- a/gtk/gtkgesture.c
+++ b/gtk/gtkgesture.c
@@ -1161,3 +1161,40 @@ _gtk_gesture_handled_sequence_press (GtkGesture *gesture,
return data->press_handled;
}
+
+gboolean
+_gtk_gesture_get_pointer_emulating_sequence (GtkGesture *gesture,
+ GdkEventSequence **sequence)
+{
+ GtkGesturePrivate *priv;
+ GdkEventSequence *seq;
+ GHashTableIter iter;
+ PointData *data;
+
+ g_return_val_if_fail (GTK_IS_GESTURE (gesture), FALSE);
+
+ priv = gtk_gesture_get_instance_private (gesture);
+ g_hash_table_iter_init (&iter, priv->points);
+
+ while (g_hash_table_iter_next (&iter, (gpointer*) &seq, (gpointer*) &data))
+ {
+ switch (data->event->type)
+ {
+ case GDK_TOUCH_BEGIN:
+ case GDK_TOUCH_UPDATE:
+ case GDK_TOUCH_END:
+ if (!data->event->touch.emulating_pointer)
+ continue;
+ /* Fall through */
+ case GDK_BUTTON_PRESS:
+ case GDK_BUTTON_RELEASE:
+ case GDK_MOTION_NOTIFY:
+ *sequence = seq;
+ return TRUE;
+ default:
+ break;
+ }
+ }
+
+ return FALSE;
+}