[gtk: 2/15] gdk/events: Add hold GdkEvent




commit 331f1ee722b1c684ab8109a2ad4957d23c464253
Author: José Expósito <jose exposito89 gmail com>
Date:   Sun Jun 27 11:49:24 2021 +0200

    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>

 gdk/gdkevents.c        | 30 +++++++++++++++++++++++++++---
 gdk/gdkevents.h        |  3 +++
 gdk/gdkeventsprivate.h |  9 +++++++++
 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,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]