From 95adc45b71d6f5d35841de0a54f58624f8ad6ac8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Sat, 27 Jan 2018 00:18:49 +0800 Subject: clutter/evdev: Move touch notification to seat --- .../clutter/evdev/clutter-device-manager-evdev.c | 89 +++++++--------------- clutter/clutter/evdev/clutter-seat-evdev.c | 44 +++++++++++ clutter/clutter/evdev/clutter-seat-evdev.h | 8 ++ 3 files changed, 80 insertions(+), 61 deletions(-) diff --git a/clutter/clutter/evdev/clutter-device-manager-evdev.c b/clutter/clutter/evdev/clutter-device-manager-evdev.c index 2fd66b996..6a9a1fc11 100644 --- a/clutter/clutter/evdev/clutter-device-manager-evdev.c +++ b/clutter/clutter/evdev/clutter-device-manager-evdev.c @@ -397,54 +397,6 @@ notify_relative_tool_motion (ClutterInputDevice *input_device, queue_event (event); } -static void -notify_touch_event (ClutterInputDevice *input_device, - ClutterEventType evtype, - guint64 time_us, - gint32 slot, - gdouble x, - gdouble y) -{ - ClutterInputDeviceEvdev *device_evdev; - ClutterSeatEvdev *seat; - ClutterStage *stage; - ClutterEvent *event = NULL; - - /* We can drop the event on the floor if no stage has been - * associated with the device yet. */ - stage = _clutter_input_device_get_stage (input_device); - if (stage == NULL) - return; - - device_evdev = CLUTTER_INPUT_DEVICE_EVDEV (input_device); - seat = _clutter_input_device_evdev_get_seat (device_evdev); - - event = clutter_event_new (evtype); - - _clutter_evdev_event_set_time_usec (event, time_us); - event->touch.time = us2ms (time_us); - event->touch.stage = CLUTTER_STAGE (stage); - event->touch.device = seat->core_pointer; - event->touch.x = x; - event->touch.y = y; - clutter_input_device_evdev_translate_coordinates (input_device, stage, - &event->touch.x, - &event->touch.y); - - /* "NULL" sequences are special cased in clutter */ - event->touch.sequence = GINT_TO_POINTER (MAX (1, slot + 1)); - _clutter_xkb_translate_state (event, seat->xkb, seat->button_state); - - if (evtype == CLUTTER_TOUCH_BEGIN || - evtype == CLUTTER_TOUCH_UPDATE) - event->touch.modifier_state |= CLUTTER_BUTTON1_MASK; - - clutter_event_set_device (event, seat->core_pointer); - clutter_event_set_source_device (event, input_device); - - queue_event (event); -} - static void notify_pinch_gesture_event (ClutterInputDevice *input_device, ClutterTouchpadGesturePhase phase, @@ -1252,6 +1204,7 @@ process_device_event (ClutterDeviceManagerEvdev *manager_evdev, gboolean handled = TRUE; struct libinput_device *libinput_device = libinput_event_get_device(event); ClutterInputDevice *device; + ClutterInputDeviceEvdev *device_evdev; switch (libinput_event_get_type (event)) { @@ -1419,7 +1372,8 @@ process_device_event (ClutterDeviceManagerEvdev *manager_evdev, libinput_event_get_touch_event (event); device = libinput_device_get_user_data (libinput_device); - seat = _clutter_input_device_evdev_get_seat (CLUTTER_INPUT_DEVICE_EVDEV (device)); + device_evdev = CLUTTER_INPUT_DEVICE_EVDEV (device); + seat = _clutter_input_device_evdev_get_seat (device_evdev); stage = _clutter_input_device_get_stage (device); if (stage == NULL) @@ -1439,8 +1393,12 @@ process_device_event (ClutterDeviceManagerEvdev *manager_evdev, touch_state->coords.x = x; touch_state->coords.y = y; - notify_touch_event (device, CLUTTER_TOUCH_BEGIN, time_us, slot, - touch_state->coords.x, touch_state->coords.y); + clutter_seat_evdev_notify_touch_event (seat, device, + CLUTTER_TOUCH_BEGIN, + time_us, + slot, + touch_state->coords.x, + touch_state->coords.y); break; } @@ -1454,7 +1412,8 @@ process_device_event (ClutterDeviceManagerEvdev *manager_evdev, libinput_event_get_touch_event (event); device = libinput_device_get_user_data (libinput_device); - seat = _clutter_input_device_evdev_get_seat (CLUTTER_INPUT_DEVICE_EVDEV (device)); + device_evdev = CLUTTER_INPUT_DEVICE_EVDEV (device); + seat = _clutter_input_device_evdev_get_seat (device_evdev); slot = libinput_event_touch_get_slot (touch_event); time_us = libinput_event_touch_get_time_usec (touch_event); @@ -1462,10 +1421,12 @@ process_device_event (ClutterDeviceManagerEvdev *manager_evdev, if (!touch_state) break; - notify_touch_event (device, CLUTTER_TOUCH_END, time_us, slot, - touch_state->coords.x, touch_state->coords.y); + clutter_seat_evdev_notify_touch_event (seat, device, + CLUTTER_TOUCH_END, time_us, + slot, + touch_state->coords.x, + touch_state->coords.y); clutter_seat_evdev_remove_touch (seat, slot); - break; } @@ -1482,7 +1443,8 @@ process_device_event (ClutterDeviceManagerEvdev *manager_evdev, libinput_event_get_touch_event (event); device = libinput_device_get_user_data (libinput_device); - seat = _clutter_input_device_evdev_get_seat (CLUTTER_INPUT_DEVICE_EVDEV (device)); + device_evdev = CLUTTER_INPUT_DEVICE_EVDEV (device); + seat = _clutter_input_device_evdev_get_seat (device_evdev); stage = _clutter_input_device_get_stage (device); if (stage == NULL) @@ -1505,8 +1467,12 @@ process_device_event (ClutterDeviceManagerEvdev *manager_evdev, touch_state->coords.x = x; touch_state->coords.y = y; - notify_touch_event (device, CLUTTER_TOUCH_UPDATE, time_us, slot, - touch_state->coords.x, touch_state->coords.y); + clutter_seat_evdev_notify_touch_event (seat, device, + CLUTTER_TOUCH_UPDATE, + time_us, + slot, + touch_state->coords.x, + touch_state->coords.y); break; } case LIBINPUT_EVENT_TOUCH_CANCEL: @@ -1525,9 +1491,10 @@ process_device_event (ClutterDeviceManagerEvdev *manager_evdev, while (g_hash_table_iter_next (&iter, NULL, (gpointer*) &touch_state)) { - notify_touch_event (device, CLUTTER_TOUCH_CANCEL, - time_us, touch_state->id, - touch_state->coords.x, touch_state->coords.y); + clutter_seat_evdev_notify_touch_event (seat, device, CLUTTER_TOUCH_CANCEL, + time_us, touch_state->id, + touch_state->coords.x, + touch_state->coords.y); g_hash_table_iter_remove (&iter); } diff --git a/clutter/clutter/evdev/clutter-seat-evdev.c b/clutter/clutter/evdev/clutter-seat-evdev.c index f98f85ae0..97648667b 100644 --- a/clutter/clutter/evdev/clutter-seat-evdev.c +++ b/clutter/clutter/evdev/clutter-seat-evdev.c @@ -768,6 +768,50 @@ clutter_seat_evdev_notify_discrete_scroll (ClutterSeatEvdev *seat, } +void +clutter_seat_evdev_notify_touch_event (ClutterSeatEvdev *seat, + ClutterInputDevice *input_device, + ClutterEventType evtype, + uint64_t time_us, + int slot, + double x, + double y) +{ + ClutterStage *stage; + ClutterEvent *event = NULL; + + /* We can drop the event on the floor if no stage has been + * associated with the device yet. */ + stage = _clutter_input_device_get_stage (input_device); + if (stage == NULL) + return; + + event = clutter_event_new (evtype); + + _clutter_evdev_event_set_time_usec (event, time_us); + event->touch.time = us2ms (time_us); + event->touch.stage = CLUTTER_STAGE (stage); + event->touch.device = seat->core_pointer; + event->touch.x = x; + event->touch.y = y; + clutter_input_device_evdev_translate_coordinates (input_device, stage, + &event->touch.x, + &event->touch.y); + + /* "NULL" sequences are special cased in clutter */ + event->touch.sequence = GINT_TO_POINTER (MAX (1, slot + 1)); + _clutter_xkb_translate_state (event, seat->xkb, seat->button_state); + + if (evtype == CLUTTER_TOUCH_BEGIN || + evtype == CLUTTER_TOUCH_UPDATE) + event->touch.modifier_state |= CLUTTER_BUTTON1_MASK; + + clutter_event_set_device (event, seat->core_pointer); + clutter_event_set_source_device (event, input_device); + + queue_event (event); +} + void clutter_seat_evdev_free (ClutterSeatEvdev *seat) { diff --git a/clutter/clutter/evdev/clutter-seat-evdev.h b/clutter/clutter/evdev/clutter-seat-evdev.h index 61a2acd2f..3bced2da1 100644 --- a/clutter/clutter/evdev/clutter-seat-evdev.h +++ b/clutter/clutter/evdev/clutter-seat-evdev.h @@ -122,6 +122,14 @@ void clutter_seat_evdev_notify_discrete_scroll (ClutterSeatEvdev *seat, double discrete_dy, ClutterScrollSource source); +void clutter_seat_evdev_notify_touch_event (ClutterSeatEvdev *seat, + ClutterInputDevice *input_device, + ClutterEventType evtype, + uint64_t time_us, + int slot, + double x, + double y); + void clutter_seat_evdev_set_libinput_seat (ClutterSeatEvdev *seat, struct libinput_seat *libinput_seat); -- cgit v1.2.1