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/1486
This commit is contained in:
parent
3a65ee7c6a
commit
dd60fa2bc6
@ -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;
|
*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;
|
*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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -134,9 +134,6 @@ MetaTouchState * meta_input_device_native_lookup_touch_state (MetaInput
|
|||||||
void meta_input_device_native_release_touch_state (MetaInputDeviceNative *device,
|
void meta_input_device_native_release_touch_state (MetaInputDeviceNative *device,
|
||||||
MetaTouchState *touch_state);
|
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);
|
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);
|
struct libinput_device * meta_input_device_native_get_libinput_device (ClutterInputDevice *device);
|
||||||
|
@ -2112,16 +2112,34 @@ process_device_event (MetaSeatNative *seat,
|
|||||||
}
|
}
|
||||||
case LIBINPUT_EVENT_TOUCH_CANCEL:
|
case LIBINPUT_EVENT_TOUCH_CANCEL:
|
||||||
{
|
{
|
||||||
|
int device_slot;
|
||||||
|
MetaTouchState *touch_state;
|
||||||
uint64_t time_us;
|
uint64_t time_us;
|
||||||
|
MetaSeatNative *seat;
|
||||||
struct libinput_event_touch *touch_event =
|
struct libinput_event_touch *touch_event =
|
||||||
libinput_event_get_touch_event (event);
|
libinput_event_get_touch_event (event);
|
||||||
|
|
||||||
device = libinput_device_get_user_data (libinput_device);
|
device = libinput_device_get_user_data (libinput_device);
|
||||||
device_evdev = META_INPUT_DEVICE_NATIVE (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);
|
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,
|
||||||
|
device,
|
||||||
|
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;
|
break;
|
||||||
}
|
}
|
||||||
case LIBINPUT_EVENT_GESTURE_PINCH_BEGIN:
|
case LIBINPUT_EVENT_GESTURE_PINCH_BEGIN:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user