wayland: update pointer position on initial enter event
parent
68e1731e02
commit
a6ca61d732
|
@ -219,6 +219,21 @@ Wayland_PumpEvents(_THIS)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
pointer_handle_motion(void *data, struct wl_pointer *pointer,
|
||||||
|
uint32_t time, wl_fixed_t sx_w, wl_fixed_t sy_w)
|
||||||
|
{
|
||||||
|
struct SDL_WaylandInput *input = data;
|
||||||
|
SDL_WindowData *window = input->pointer_focus;
|
||||||
|
input->sx_w = sx_w;
|
||||||
|
input->sy_w = sy_w;
|
||||||
|
if (input->pointer_focus) {
|
||||||
|
const int sx = wl_fixed_to_int(sx_w);
|
||||||
|
const int sy = wl_fixed_to_int(sy_w);
|
||||||
|
SDL_SendMouseMotion(window->sdlwindow, 0, 0, sx, sy);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
pointer_handle_enter(void *data, struct wl_pointer *pointer,
|
pointer_handle_enter(void *data, struct wl_pointer *pointer,
|
||||||
uint32_t serial, struct wl_surface *surface,
|
uint32_t serial, struct wl_surface *surface,
|
||||||
|
@ -243,6 +258,10 @@ pointer_handle_enter(void *data, struct wl_pointer *pointer,
|
||||||
if (window) {
|
if (window) {
|
||||||
input->pointer_focus = window;
|
input->pointer_focus = window;
|
||||||
SDL_SetMouseFocus(window->sdlwindow);
|
SDL_SetMouseFocus(window->sdlwindow);
|
||||||
|
/* In the case of e.g. a pointer confine warp, we may receive an enter
|
||||||
|
* event with no following motion event, but with the new coordinates
|
||||||
|
* as part of the enter event. */
|
||||||
|
pointer_handle_motion(data, pointer, serial, sx_w, sy_w);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -258,21 +277,6 @@ pointer_handle_leave(void *data, struct wl_pointer *pointer,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
pointer_handle_motion(void *data, struct wl_pointer *pointer,
|
|
||||||
uint32_t time, wl_fixed_t sx_w, wl_fixed_t sy_w)
|
|
||||||
{
|
|
||||||
struct SDL_WaylandInput *input = data;
|
|
||||||
SDL_WindowData *window = input->pointer_focus;
|
|
||||||
input->sx_w = sx_w;
|
|
||||||
input->sy_w = sy_w;
|
|
||||||
if (input->pointer_focus) {
|
|
||||||
const int sx = wl_fixed_to_int(sx_w);
|
|
||||||
const int sy = wl_fixed_to_int(sy_w);
|
|
||||||
SDL_SendMouseMotion(window->sdlwindow, 0, 0, sx, sy);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static SDL_bool
|
static SDL_bool
|
||||||
ProcessHitTest(struct SDL_WaylandInput *input, uint32_t serial)
|
ProcessHitTest(struct SDL_WaylandInput *input, uint32_t serial)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue