summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosé Expósito <jose.exposito89@gmail.com>2021-06-27 11:49:24 +0200
committerCarlos Garnacho <carlosg@gnome.org>2022-01-26 22:49:53 +0100
commit331f1ee722b1c684ab8109a2ad4957d23c464253 (patch)
tree7c7f4e18da719c4c76ae577d0b7b72084ea730b2
parent0f351508bce14d612ff349491d3d4bfa466d47ee (diff)
downloadgtk+-331f1ee722b1c684ab8109a2ad4957d23c464253.tar.gz
gdk/events: Add hold GdkEvent
Allow to create hold events as well as the required functions to get information about the event: gesture phase, finger count, etc Part-of: <!3454>
-rw-r--r--gdk/gdkevents.c30
-rw-r--r--gdk/gdkevents.h3
-rw-r--r--gdk/gdkeventsprivate.h9
3 files changed, 39 insertions, 3 deletions
diff --git a/gdk/gdkevents.c b/gdk/gdkevents.c
index 454e69ed64..127e92e547 100644
--- a/gdk/gdkevents.c
+++ b/gdk/gdkevents.c
@@ -2496,7 +2496,8 @@ static const GdkEventTypeInfo gdk_touchpad_event_info = {
GDK_DEFINE_EVENT_TYPE (GdkTouchpadEvent, gdk_touchpad_event,
&gdk_touchpad_event_info,
GDK_EVENT_TYPE_SLOT (GDK_TOUCHPAD_SWIPE)
- GDK_EVENT_TYPE_SLOT (GDK_TOUCHPAD_PINCH))
+ GDK_EVENT_TYPE_SLOT (GDK_TOUCHPAD_PINCH)
+ GDK_EVENT_TYPE_SLOT (GDK_TOUCHPAD_HOLD))
GdkEvent *
gdk_touchpad_event_new_swipe (GdkSurface *surface,
@@ -2570,6 +2571,27 @@ gdk_touchpad_event_new_pinch (GdkSurface *surface,
return (GdkEvent *) self;
}
+GdkEvent *
+gdk_touchpad_event_new_hold (GdkSurface *surface,
+ GdkDevice *device,
+ guint32 time,
+ GdkModifierType state,
+ GdkTouchpadGesturePhase phase,
+ double x,
+ double y,
+ int n_fingers)
+{
+ GdkTouchpadEvent *self = gdk_event_alloc (GDK_TOUCHPAD_HOLD, surface, device, time);
+
+ self->state = state;
+ self->phase = phase;
+ self->x = x;
+ self->y = y;
+ self->n_fingers = n_fingers;
+
+ return (GdkEvent *) self;
+}
+
/**
* gdk_touchpad_event_get_gesture_phase:
* @event: (type GdkTouchpadEvent): a touchpad event
@@ -2585,7 +2607,8 @@ gdk_touchpad_event_get_gesture_phase (GdkEvent *event)
g_return_val_if_fail (GDK_IS_EVENT (event), 0);
g_return_val_if_fail (GDK_IS_EVENT_TYPE (event, GDK_TOUCHPAD_PINCH) ||
- GDK_IS_EVENT_TYPE (event, GDK_TOUCHPAD_SWIPE), 0);
+ GDK_IS_EVENT_TYPE (event, GDK_TOUCHPAD_SWIPE) ||
+ GDK_IS_EVENT_TYPE (event, GDK_TOUCHPAD_HOLD), 0);
return self->phase;
}
@@ -2605,7 +2628,8 @@ gdk_touchpad_event_get_n_fingers (GdkEvent *event)
g_return_val_if_fail (GDK_IS_EVENT (event), 0);
g_return_val_if_fail (GDK_IS_EVENT_TYPE (event, GDK_TOUCHPAD_PINCH) ||
- GDK_IS_EVENT_TYPE (event, GDK_TOUCHPAD_SWIPE), 0);
+ GDK_IS_EVENT_TYPE (event, GDK_TOUCHPAD_SWIPE) ||
+ GDK_IS_EVENT_TYPE (event, GDK_TOUCHPAD_HOLD), 0);
return self->n_fingers;
}
diff --git a/gdk/gdkevents.h b/gdk/gdkevents.h
index 748341e80c..99fecbc689 100644
--- a/gdk/gdkevents.h
+++ b/gdk/gdkevents.h
@@ -169,6 +169,8 @@ typedef struct _GdkTouchpadEvent GdkTouchpadEvent;
* @GDK_PAD_RING: A tablet pad axis event from a "ring".
* @GDK_PAD_STRIP: A tablet pad axis event from a "strip".
* @GDK_PAD_GROUP_MODE: A tablet pad group mode change.
+ * @GDK_TOUCHPAD_HOLD: A touchpad hold gesture event, the current state
+ * is determined by its phase field. Since: 4.6
* @GDK_EVENT_LAST: marks the end of the GdkEventType enumeration.
*
* Specifies the type of the event.
@@ -203,6 +205,7 @@ typedef enum
GDK_PAD_RING,
GDK_PAD_STRIP,
GDK_PAD_GROUP_MODE,
+ GDK_TOUCHPAD_HOLD,
GDK_EVENT_LAST /* helper variable for decls */
} GdkEventType;
diff --git a/gdk/gdkeventsprivate.h b/gdk/gdkeventsprivate.h
index 065cf1f3d3..a16fc0f654 100644
--- a/gdk/gdkeventsprivate.h
+++ b/gdk/gdkeventsprivate.h
@@ -533,6 +533,15 @@ GdkEvent * gdk_touchpad_event_new_pinch (GdkSurface *surface,
double scale,
double angle_delta);
+GdkEvent * gdk_touchpad_event_new_hold (GdkSurface *surface,
+ GdkDevice *device,
+ guint32 time,
+ GdkModifierType state,
+ GdkTouchpadGesturePhase phase,
+ double x,
+ double y,
+ int n_fingers);
+
GdkEvent * gdk_pad_event_new_ring (GdkSurface *surface,
GdkDevice *device,
guint32 time,