diff options
author | nanahi <130121847+na-na-hi@users.noreply.github.com> | 2024-03-28 08:55:21 -0400 |
---|---|---|
committer | Dudemanguy <random342@airmail.cc> | 2024-04-01 01:17:22 +0000 |
commit | a140d2788c33e729c4a0867c69cfe596458653dc (patch) | |
tree | 21ee1743e45003c71075f0a30cfc2e9fd023d873 | |
parent | 0a083eadb5f9242b045d4a90566a394284284d91 (diff) | |
download | mpv-a140d2788c33e729c4a0867c69cfe596458653dc.tar.bz2 mpv-a140d2788c33e729c4a0867c69cfe596458653dc.tar.xz |
wayland_common: set mouse position on pointer enter
At least on some compositors, when the pointer enters a surface,
only a wl_pointer_enter event is generated, but not wl_pointer_motion.
This results in the initial mouse position being lost, which is
especially problematic when input simulation is used.
Fix this by setting the mouse position on pointer enter event.
-rw-r--r-- | video/out/wayland_common.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/video/out/wayland_common.c b/video/out/wayland_common.c index 1185678d18..d48af35917 100644 --- a/video/out/wayland_common.c +++ b/video/out/wayland_common.c @@ -246,6 +246,13 @@ static void pointer_handle_enter(void *data, struct wl_pointer *pointer, s->pointer_enter_serial = serial; set_cursor_visibility(s, wl->cursor_visible); mp_input_put_key(wl->vo->input_ctx, MP_KEY_MOUSE_ENTER); + + wl->mouse_x = wl_fixed_to_int(sx) * wl->scaling; + wl->mouse_y = wl_fixed_to_int(sy) * wl->scaling; + + if (!wl->toplevel_configured) + mp_input_set_mouse_pos(wl->vo->input_ctx, wl->mouse_x, wl->mouse_y); + wl->toplevel_configured = false; } static void pointer_handle_leave(void *data, struct wl_pointer *pointer, |