diff options
author | emersion <contact@emersion.fr> | 2019-01-26 11:04:05 +0100 |
---|---|---|
committer | emersion <contact@emersion.fr> | 2019-01-26 11:04:05 +0100 |
commit | 5de26ad8ed962bc7cc753a623f247f7dc4c76a39 (patch) | |
tree | be7c5198f68e28f071ab93bd7aea6610db9c1c5e /rootston | |
parent | 209210d30780ec64995594b77fde3d718b655542 (diff) |
pointer: add a frame event
Frame events group logically connected pointer events. It makes sense to make
the backend responsible for sending frame events, since once the events are
split (ie. once the frame events are stripped) it's not easy to figure out
which events belongs to which frame again.
This is also how Weston handles frame events.
Fixes https://github.com/swaywm/wlroots/issues/1468
Diffstat (limited to 'rootston')
-rw-r--r-- | rootston/cursor.c | 4 | ||||
-rw-r--r-- | rootston/seat.c | 11 |
2 files changed, 15 insertions, 0 deletions
diff --git a/rootston/cursor.c b/rootston/cursor.c index b7ecc813..8ae098de 100644 --- a/rootston/cursor.c +++ b/rootston/cursor.c @@ -386,6 +386,10 @@ void roots_cursor_handle_axis(struct roots_cursor *cursor, event->orientation, event->delta, event->delta_discrete, event->source); } +void roots_cursor_handle_frame(struct roots_cursor *cursor) { + wlr_seat_pointer_notify_frame(cursor->seat->seat); +} + void roots_cursor_handle_touch_down(struct roots_cursor *cursor, struct wlr_event_touch_down *event) { struct roots_desktop *desktop = cursor->seat->input->server->desktop; diff --git a/rootston/seat.c b/rootston/seat.c index 43760a5e..c69be8ab 100644 --- a/rootston/seat.c +++ b/rootston/seat.c @@ -77,6 +77,14 @@ static void handle_cursor_axis(struct wl_listener *listener, void *data) { roots_cursor_handle_axis(cursor, event); } +static void handle_cursor_frame(struct wl_listener *listener, void *data) { + struct roots_cursor *cursor = + wl_container_of(listener, cursor, frame); + struct roots_desktop *desktop = cursor->seat->input->server->desktop; + wlr_idle_notify_activity(desktop->idle, cursor->seat->seat); + roots_cursor_handle_frame(cursor); +} + static void handle_switch_toggle(struct wl_listener *listener, void *data) { struct roots_switch *lid_switch = wl_container_of(listener, lid_switch, toggle); @@ -443,6 +451,9 @@ static void roots_seat_init_cursor(struct roots_seat *seat) { wl_signal_add(&wlr_cursor->events.axis, &seat->cursor->axis); seat->cursor->axis.notify = handle_cursor_axis; + wl_signal_add(&wlr_cursor->events.frame, &seat->cursor->frame); + seat->cursor->frame.notify = handle_cursor_frame; + wl_signal_add(&wlr_cursor->events.touch_down, &seat->cursor->touch_down); seat->cursor->touch_down.notify = handle_touch_down; |