[mutter] backends/native/meta-seat: Capture hold events



commit d4ba16252bb5fdafb9ff7a9411ef591bc04434bb
Author: JoseExposito <jose exposito89 gmail com>
Date:   Sun Apr 18 18:47:02 2021 +0200

    backends/native/meta-seat: Capture hold events
    
    Receive hold gesture events from libinput and enqueue them as Clutter
    events.
    
    Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1830>

 src/backends/native/meta-seat-impl.c | 51 ++++++++++++++++++++++++++++++++++++
 1 file changed, 51 insertions(+)
---
diff --git a/src/backends/native/meta-seat-impl.c b/src/backends/native/meta-seat-impl.c
index 26db30bd42..4c3d0179ad 100644
--- a/src/backends/native/meta-seat-impl.c
+++ b/src/backends/native/meta-seat-impl.c
@@ -1331,6 +1331,35 @@ notify_swipe_gesture_event (ClutterInputDevice          *input_device,
   queue_event (seat_impl, event);
 }
 
+static void
+notify_hold_gesture_event (ClutterInputDevice          *input_device,
+                           ClutterTouchpadGesturePhase  phase,
+                           uint64_t                     time_us,
+                           uint32_t                     n_fingers)
+{
+  MetaSeatImpl *seat_impl;
+  ClutterEvent *event = NULL;
+
+  seat_impl = seat_impl_from_device (input_device);
+
+  event = clutter_event_new (CLUTTER_TOUCHPAD_HOLD);
+
+  event->touchpad_hold.phase = phase;
+  event->touchpad_hold.time = us2ms (time_us);
+  event->touchpad_hold.n_fingers = n_fingers;
+
+  meta_input_device_native_get_coords_in_impl (META_INPUT_DEVICE_NATIVE (seat_impl->core_pointer),
+                                               &event->touchpad_hold.x,
+                                               &event->touchpad_hold.y);
+
+  meta_xkb_translate_state (event, seat_impl->xkb, seat_impl->button_state);
+
+  clutter_event_set_device (event, seat_impl->core_pointer);
+  clutter_event_set_source_device (event, input_device);
+
+  queue_event (seat_impl, event);
+}
+
 static void
 notify_proximity (ClutterInputDevice *input_device,
                   uint64_t            time_us,
@@ -2367,6 +2396,28 @@ process_device_event (MetaSeatImpl          *seat_impl,
                                     time_us, n_fingers, dx, dy, dx_unaccel, dy_unaccel);
         break;
       }
+    case LIBINPUT_EVENT_GESTURE_HOLD_BEGIN:
+    case LIBINPUT_EVENT_GESTURE_HOLD_END:
+      {
+        struct libinput_event_gesture *gesture_event =
+          libinput_event_get_gesture_event (event);
+        ClutterTouchpadGesturePhase phase;
+        uint32_t n_fingers;
+        uint64_t time_us;
+
+        device = libinput_device_get_user_data (libinput_device);
+        time_us = libinput_event_gesture_get_time_usec (gesture_event);
+        n_fingers = libinput_event_gesture_get_finger_count (gesture_event);
+
+        if (libinput_event_get_type (event) == LIBINPUT_EVENT_GESTURE_HOLD_BEGIN)
+          phase = CLUTTER_TOUCHPAD_GESTURE_PHASE_BEGIN;
+        else
+          phase = libinput_event_gesture_get_cancelled (gesture_event) ?
+            CLUTTER_TOUCHPAD_GESTURE_PHASE_CANCEL : CLUTTER_TOUCHPAD_GESTURE_PHASE_END;
+
+        notify_hold_gesture_event (device, phase, time_us, n_fingers);
+        break;
+      }
     case LIBINPUT_EVENT_TABLET_TOOL_AXIS:
       {
         process_tablet_axis (seat_impl, event);


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