aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosé Expósito <jose.exposito89@gmail.com>2021-07-12 19:50:09 +0200
committerSimon Ser <contact@emersion.fr>2021-09-27 15:30:31 +0200
commitd069a783bcafe65c240f2369b68f5e8d45d0b9a2 (patch)
tree2d0d1874ecb1703c560ec24bfcddf8a8bebd0b60
parentfb15538247ea7f4b91ef987650542ae3f5acc89e (diff)
pointer: add hold pointer event definition
As touchpad touches are generally fully abstracted, a client cannot currently know when a user is interacting with the touchpad without moving. This is solved by hold gestures. Hold gestures are notifications about one or more fingers being held down on the touchpad without significant movement. Hold gestures are primarily designed for two interactions: - Hold to interact: where a hold gesture is active for some time a menu could pop up, some object could be selected, etc. - Hold to cancel: where e.g. kinetic scrolling is currently active, the start of a hold gesture can be used to stop the scroll. Unlike swipe and pinch, hold gestures, by definition, do not have movement, so there is no need for an "update" stage in the gesture. Create two structs, wlr_event_pointer_hold_begin and wlr_event_pointer_hold_end, to represent hold gesture events and the signals to emit them: wlr_pointer->pointer.hold_begin/hold_end.
-rw-r--r--include/wlr/types/wlr_pointer.h15
-rw-r--r--types/wlr_pointer.c2
2 files changed, 17 insertions, 0 deletions
diff --git a/include/wlr/types/wlr_pointer.h b/include/wlr/types/wlr_pointer.h
index 1380fa76..bcfb2ad3 100644
--- a/include/wlr/types/wlr_pointer.h
+++ b/include/wlr/types/wlr_pointer.h
@@ -33,6 +33,9 @@ struct wlr_pointer {
struct wl_signal pinch_begin; // struct wlr_event_pointer_pinch_begin
struct wl_signal pinch_update; // struct wlr_event_pointer_pinch_update
struct wl_signal pinch_end; // struct wlr_event_pointer_pinch_end
+
+ struct wl_signal hold_begin; // struct wlr_event_pointer_hold_begin
+ struct wl_signal hold_end; // struct wlr_event_pointer_hold_end
} events;
void *data;
@@ -126,4 +129,16 @@ struct wlr_event_pointer_pinch_end {
bool cancelled;
};
+struct wlr_event_pointer_hold_begin {
+ struct wlr_input_device *device;
+ uint32_t time_msec;
+ uint32_t fingers;
+};
+
+struct wlr_event_pointer_hold_end {
+ struct wlr_input_device *device;
+ uint32_t time_msec;
+ bool cancelled;
+};
+
#endif
diff --git a/types/wlr_pointer.c b/types/wlr_pointer.c
index d18fe754..a6590e73 100644
--- a/types/wlr_pointer.c
+++ b/types/wlr_pointer.c
@@ -18,6 +18,8 @@ void wlr_pointer_init(struct wlr_pointer *pointer,
wl_signal_init(&pointer->events.pinch_begin);
wl_signal_init(&pointer->events.pinch_update);
wl_signal_init(&pointer->events.pinch_end);
+ wl_signal_init(&pointer->events.hold_begin);
+ wl_signal_init(&pointer->events.hold_end);
}
void wlr_pointer_destroy(struct wlr_pointer *pointer) {