From 07d7af593d89e56cad664fe03673ccb79da21380 Mon Sep 17 00:00:00 2001 From: xdavidwu Date: Sat, 31 Aug 2019 20:25:58 +0800 Subject: [PATCH] seat: set cursor image only if no pointer cap previously This make seat_update_capabilities set cursor image only if there was no pointer cap before update. This avoid resetting cursor to left_ptr if an input device is removed. --- sway/input/seat.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sway/input/seat.c b/sway/input/seat.c index 6a899124..4da8e937 100644 --- a/sway/input/seat.c +++ b/sway/input/seat.c @@ -516,6 +516,7 @@ struct sway_seat *seat_create(const char *seat_name) { static void seat_update_capabilities(struct sway_seat *seat) { uint32_t caps = 0; + uint32_t previous_caps = seat->wlr_seat->capabilities; struct sway_seat_device *seat_device; wl_list_for_each(seat_device, &seat->devices, link) { switch (seat_device->input_device->wlr_device->type) { @@ -545,7 +546,9 @@ static void seat_update_capabilities(struct sway_seat *seat) { wlr_seat_set_capabilities(seat->wlr_seat, caps); } else { wlr_seat_set_capabilities(seat->wlr_seat, caps); - cursor_set_image(seat->cursor, "left_ptr", NULL); + if ((previous_caps & WL_SEAT_CAPABILITY_POINTER) == 0) { + cursor_set_image(seat->cursor, "left_ptr", NULL); + } } }