gdk/events: Add hold GdkEvent
authorJosé Expósito <jose.exposito89@gmail.com>
Sun, 27 Jun 2021 09:49:24 +0000 (11:49 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Wed, 26 Jan 2022 21:49:53 +0000 (22:49 +0100)
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>

gdk/gdkevents.c
gdk/gdkevents.h
gdk/gdkeventsprivate.h

index 454e69ed64093d2e9a1f99a11d1cd6dde929e61d..127e92e5472a6ff52111722b0b8d26446708872b 100644 (file)
@@ -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;
 }
index 748341e80c13c25bba5837a25288b9a1d5113d29..99fecbc6895872b14f36d392c70d13b5c82f5297 100644 (file)
@@ -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;
 
index 065cf1f3d31712efe167d7319c7147aabcd15d1a..a16fc0f654aa5a326e13c5aa2f01673d080cb672 100644 (file)
@@ -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,