diff options
author | Brian Ashworth <bosrsf04@gmail.com> | 2018-12-27 00:32:15 -0500 |
---|---|---|
committer | emersion <contact@emersion.fr> | 2018-12-30 14:17:24 +0100 |
commit | 4d88c957905e7f6b2c8188d218ca22b3e6986fe4 (patch) | |
tree | 5f34ad1667607315cfbcb786ce71845a36595d82 /sway/input | |
parent | 09bb71f6507d86d98b5b9825f28b91ddd4b9a09b (diff) |
hide_cursor: change to a seat subcommand
This makes hide_cursor a seat subcommand, which allows for seat specific
timeouts.
Diffstat (limited to 'sway/input')
-rw-r--r-- | sway/input/cursor.c | 22 | ||||
-rw-r--r-- | sway/input/seat.c | 14 |
2 files changed, 29 insertions, 7 deletions
diff --git a/sway/input/cursor.c b/sway/input/cursor.c index 22c5b075..f8302ddf 100644 --- a/sway/input/cursor.c +++ b/sway/input/cursor.c @@ -597,9 +597,17 @@ static int hide_notify(void *data) { return 1; } -static void handle_activity(struct sway_cursor *cursor) { - wl_event_source_timer_update(cursor->hide_source, - config->hide_cursor_timeout); +void cursor_handle_activity(struct sway_cursor *cursor) { + struct seat_config *sc = seat_get_config(cursor->seat); + if (!sc) { + sc = seat_get_config_by_name("*"); + } + int timeout = sc ? sc->hide_cursor_timeout : 0; + if (timeout < 0) { + timeout = 0; + } + wl_event_source_timer_update(cursor->hide_source, timeout); + wlr_idle_notify_activity(server.idle, cursor->seat->wlr_seat); if (cursor->hidden) { cursor->hidden = false; @@ -709,7 +717,7 @@ static void handle_cursor_motion(struct wl_listener *listener, void *data) { wlr_cursor_move(cursor->cursor, event->device, event->delta_x, event->delta_y); cursor_send_pointer_motion(cursor, event->time_msec); - handle_activity(cursor); + cursor_handle_activity(cursor); transaction_commit_dirty(); } @@ -720,7 +728,7 @@ static void handle_cursor_motion_absolute( struct wlr_event_pointer_motion_absolute *event = data; wlr_cursor_warp_absolute(cursor->cursor, event->device, event->x, event->y); cursor_send_pointer_motion(cursor, event->time_msec); - handle_activity(cursor); + cursor_handle_activity(cursor); transaction_commit_dirty(); } @@ -1009,7 +1017,7 @@ static void handle_cursor_button(struct wl_listener *listener, void *data) { struct wlr_event_pointer_button *event = data; dispatch_cursor_button(cursor, event->device, event->time_msec, event->button, event->state); - handle_activity(cursor); + cursor_handle_activity(cursor); transaction_commit_dirty(); } @@ -1119,7 +1127,7 @@ static void handle_cursor_axis(struct wl_listener *listener, void *data) { struct sway_cursor *cursor = wl_container_of(listener, cursor, axis); struct wlr_event_pointer_axis *event = data; dispatch_cursor_axis(cursor, event); - handle_activity(cursor); + cursor_handle_activity(cursor); transaction_commit_dirty(); } diff --git a/sway/input/seat.c b/sway/input/seat.c index e0f0db1d..fa82c9ce 100644 --- a/sway/input/seat.c +++ b/sway/input/seat.c @@ -995,6 +995,8 @@ void seat_apply_config(struct sway_seat *seat, wl_list_for_each(seat_device, &seat->devices, link) { seat_configure_device(seat, seat_device->input_device); } + + cursor_handle_activity(seat->cursor); } struct seat_config *seat_get_config(struct sway_seat *seat) { @@ -1009,6 +1011,18 @@ struct seat_config *seat_get_config(struct sway_seat *seat) { return NULL; } +struct seat_config *seat_get_config_by_name(const char *name) { + struct seat_config *seat_config = NULL; + for (int i = 0; i < config->seat_configs->length; ++i ) { + seat_config = config->seat_configs->items[i]; + if (strcmp(name, seat_config->name) == 0) { + return seat_config; + } + } + + return NULL; +} + void seat_begin_down(struct sway_seat *seat, struct sway_container *con, uint32_t button, double sx, double sy) { seat->operation = OP_DOWN; |