From 9e304ab974559907790829421a11e26eb2b630e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Wei=C3=9Fschuh?= Date: Mon, 4 Feb 2019 11:27:49 +0100 Subject: wayland: reconfigure cursor on pointer enter event MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On wayland the cursor has to be configured each time the pointer enters. Currently if the window (re)gains the focus, the pointer is not hidden, even when configured. After the mouse has been moved the pointer hides correctly. https://wayland.freedesktop.org/docs/html/apa.html#protocol-spec-wl_pointer: wl_pointer::enter - enter event ... When a seat's focus enters a surface, the pointer image is undefined and a client should respond to this event by setting an appropriate pointer image with the set_cursor request. Fixes #6185. Signed-off-by: Thomas Weißschuh --- video/out/wayland_common.c | 4 +++- video/out/wayland_common.h | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/video/out/wayland_common.c b/video/out/wayland_common.c index df64578e5c..4a9895520b 100644 --- a/video/out/wayland_common.c +++ b/video/out/wayland_common.c @@ -72,6 +72,7 @@ static int set_cursor_visibility(struct vo_wayland_state *wl, bool on) { if (!wl->pointer) return VO_NOTAVAIL; + wl->cursor_visible = on; if (on) { if (spawn_cursor(wl)) return VO_FALSE; @@ -100,7 +101,7 @@ static void pointer_handle_enter(void *data, struct wl_pointer *pointer, wl->pointer = pointer; wl->pointer_id = serial; - set_cursor_visibility(wl, true); + set_cursor_visibility(wl, wl->cursor_visible); mp_input_put_key(wl->vo->input_ctx, MP_KEY_MOUSE_ENTER); } @@ -1017,6 +1018,7 @@ int vo_wayland_init(struct vo *vo) .scaling = 1, .wakeup_pipe = {-1, -1}, .dnd_fd = -1, + .cursor_visible = true, }; wl_list_init(&wl->output_list); diff --git a/video/out/wayland_common.h b/video/out/wayland_common.h index 0648efa09a..735b312e97 100644 --- a/video/out/wayland_common.h +++ b/video/out/wayland_common.h @@ -101,6 +101,7 @@ struct vo_wayland_state { struct wl_cursor *default_cursor; struct wl_surface *cursor_surface; int allocated_cursor_scale; + bool cursor_visible; }; int vo_wayland_init(struct vo *vo); -- cgit v1.2.3