diff options
author | José Expósito <jose.exposito89@gmail.com> | 2021-07-12 19:50:44 +0200 |
---|---|---|
committer | Simon Ser <contact@emersion.fr> | 2021-09-27 15:30:31 +0200 |
commit | 52d249193190c44d1f1d07c36ae57f1dfa16a9e0 (patch) | |
tree | c9c7db9f7d807dbcce33334bdf7fac17e2237f97 /backend | |
parent | 95970b361960e5b8786eaa608d66f18b15d86efb (diff) |
backend/libinput: send hold gesture events
Receive hold gesture events from libinput and emit the appropiate
wlr_pointer signal.
Diffstat (limited to 'backend')
-rw-r--r-- | backend/libinput/events.c | 8 | ||||
-rw-r--r-- | backend/libinput/pointer.c | 38 |
2 files changed, 46 insertions, 0 deletions
diff --git a/backend/libinput/events.c b/backend/libinput/events.c index f149b2f1..82883779 100644 --- a/backend/libinput/events.c +++ b/backend/libinput/events.c @@ -316,6 +316,14 @@ void handle_libinput_event(struct wlr_libinput_backend *backend, case LIBINPUT_EVENT_GESTURE_PINCH_END: handle_pointer_pinch_end(event, libinput_dev); break; +#if LIBINPUT_HAS_HOLD_GESTURES + case LIBINPUT_EVENT_GESTURE_HOLD_BEGIN: + handle_pointer_hold_begin(event, libinput_dev); + break; + case LIBINPUT_EVENT_GESTURE_HOLD_END: + handle_pointer_hold_end(event, libinput_dev); + break; +#endif default: wlr_log(WLR_DEBUG, "Unknown libinput event %d", event_type); break; diff --git a/backend/libinput/pointer.c b/backend/libinput/pointer.c index 2e799df6..520f98dc 100644 --- a/backend/libinput/pointer.c +++ b/backend/libinput/pointer.c @@ -260,3 +260,41 @@ void handle_pointer_pinch_end(struct libinput_event *event, }; wlr_signal_emit_safe(&wlr_dev->pointer->events.pinch_end, &wlr_event); } + +void handle_pointer_hold_begin(struct libinput_event *event, + struct libinput_device *libinput_dev) { + struct wlr_input_device *wlr_dev = + get_appropriate_device(WLR_INPUT_DEVICE_POINTER, libinput_dev); + if (!wlr_dev) { + wlr_log(WLR_DEBUG, "Got a pointer gesture event for a device with no pointers?"); + return; + } + struct libinput_event_gesture *gevent = + libinput_event_get_gesture_event(event); + struct wlr_event_pointer_hold_begin wlr_event = { + .device = wlr_dev, + .time_msec = + usec_to_msec(libinput_event_gesture_get_time_usec(gevent)), + .fingers = libinput_event_gesture_get_finger_count(gevent), + }; + wlr_signal_emit_safe(&wlr_dev->pointer->events.hold_begin, &wlr_event); +} + +void handle_pointer_hold_end(struct libinput_event *event, + struct libinput_device *libinput_dev) { + struct wlr_input_device *wlr_dev = + get_appropriate_device(WLR_INPUT_DEVICE_POINTER, libinput_dev); + if (!wlr_dev) { + wlr_log(WLR_DEBUG, "Got a pointer gesture event for a device with no pointers?"); + return; + } + struct libinput_event_gesture *gevent = + libinput_event_get_gesture_event(event); + struct wlr_event_pointer_hold_end wlr_event = { + .device = wlr_dev, + .time_msec = + usec_to_msec(libinput_event_gesture_get_time_usec(gevent)), + .cancelled = libinput_event_gesture_get_cancelled(gevent), + }; + wlr_signal_emit_safe(&wlr_dev->pointer->events.hold_end, &wlr_event); +} |