mirror of https://github.com/mpv-player/mpv
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:
parent
1c43920fb8
commit
9e304ab974
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue