wayland: reconfigure cursor on pointer enter event

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 <thomas@t-8ch.de>
This commit is contained in:
Thomas Weißschuh 2019-02-04 11:27:49 +01:00 committed by wm4
parent 1c43920fb8
commit 9e304ab974
2 changed files with 4 additions and 1 deletions

View File

@ -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);

View File

@ -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);