[mutter/wip/carlosg/input-thread: 64/157] backends: Use slot from cancel events




commit 31090aadd8e5805e55a0fcff726108721cdb3082
Author: Carlos Garnacho <carlosg gnome org>
Date:   Wed May 6 13:44:36 2020 +0200

    backends: Use slot from cancel events
    
    As it does seem from a read to libinput code, TOUCH_CANCEL events
    actually do contain slot information, and are emitted per-slot.
    This means we can avoid iterating over the slots ourselves, they
    are still expected to be sent altogether.
    
    https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1403

 src/backends/native/meta-input-device-native.c | 21 ---------------------
 src/backends/native/meta-input-device-native.h |  3 ---
 src/backends/native/meta-seat-native.c         | 20 +++++++++++++++++++-
 3 files changed, 19 insertions(+), 25 deletions(-)
---
diff --git a/src/backends/native/meta-input-device-native.c b/src/backends/native/meta-input-device-native.c
index bedfc2b861..f0ad4f3d87 100644
--- a/src/backends/native/meta-input-device-native.c
+++ b/src/backends/native/meta-input-device-native.c
@@ -1517,24 +1517,3 @@ meta_input_device_native_translate_coordinates (ClutterInputDevice *device,
   *x = CLAMP (x_d, MIN (min_x, max_x), MAX (min_x, max_x)) * stage_width;
   *y = CLAMP (y_d, MIN (min_y, max_y), MAX (min_y, max_y)) * stage_height;
 }
-
-void
-meta_input_device_native_release_touch_slots (MetaInputDeviceNative *device_evdev,
-                                              uint64_t               time_us)
-{
-  GHashTableIter iter;
-  MetaTouchState *touch_state;
-
-  g_hash_table_iter_init (&iter, device_evdev->touches);
-  while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &touch_state))
-    {
-      meta_seat_native_notify_touch_event (touch_state->seat,
-                                           CLUTTER_INPUT_DEVICE (device_evdev),
-                                           CLUTTER_TOUCH_CANCEL,
-                                           time_us,
-                                           touch_state->seat_slot,
-                                           touch_state->coords.x,
-                                           touch_state->coords.y);
-      g_hash_table_iter_remove (&iter);
-    }
-}
diff --git a/src/backends/native/meta-input-device-native.h b/src/backends/native/meta-input-device-native.h
index 59cff51ef7..87449fe2a5 100644
--- a/src/backends/native/meta-input-device-native.h
+++ b/src/backends/native/meta-input-device-native.h
@@ -134,9 +134,6 @@ MetaTouchState *          meta_input_device_native_lookup_touch_state (MetaInput
 void                      meta_input_device_native_release_touch_state (MetaInputDeviceNative *device,
                                                                         MetaTouchState        *touch_state);
 
-void                      meta_input_device_native_release_touch_slots (MetaInputDeviceNative *device_evdev,
-                                                                        uint64_t               time_us);
-
 void                      meta_input_device_native_a11y_maybe_notify_toggle_keys  (MetaInputDeviceNative 
*device_evdev);
 
 struct libinput_device * meta_input_device_native_get_libinput_device (ClutterInputDevice *device);
diff --git a/src/backends/native/meta-seat-native.c b/src/backends/native/meta-seat-native.c
index 0c5388fdab..468fdfecae 100644
--- a/src/backends/native/meta-seat-native.c
+++ b/src/backends/native/meta-seat-native.c
@@ -2079,16 +2079,34 @@ process_device_event (MetaSeatNative        *seat,
       }
     case LIBINPUT_EVENT_TOUCH_CANCEL:
       {
+        int device_slot;
+        MetaTouchState *touch_state;
         uint64_t time_us;
+        MetaSeatNative *seat;
         struct libinput_event_touch *touch_event =
           libinput_event_get_touch_event (event);
 
         device = libinput_device_get_user_data (libinput_device);
         device_evdev = META_INPUT_DEVICE_NATIVE (device);
+        seat = meta_input_device_native_get_seat (device_evdev);
         time_us = libinput_event_touch_get_time_usec (touch_event);
 
-        meta_input_device_native_release_touch_slots (device_evdev, time_us);
+        device_slot = libinput_event_touch_get_slot (touch_event);
+        touch_state =
+          meta_input_device_native_lookup_touch_state (device_evdev,
+                                                       device_slot);
+        if (!touch_state)
+          break;
+
+        meta_seat_native_notify_touch_event (touch_state->seat,
+                                             CLUTTER_INPUT_DEVICE (device_evdev),
+                                             CLUTTER_TOUCH_CANCEL,
+                                             time_us,
+                                             touch_state->seat_slot,
+                                             touch_state->coords.x,
+                                             touch_state->coords.y);
 
+        meta_input_device_native_release_touch_state (device_evdev, touch_state);
         break;
       }
     case LIBINPUT_EVENT_GESTURE_PINCH_BEGIN:


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