Wayland: Use correct action on fallback decoration

We were previously storing the pointer position only when on the main
window, so when the user clicked on a fallback decoration it would use
the last position of the cursor on the main window, instead of the
position in the decoration surface.

Fixes part of #1991.
This commit is contained in:
Emmanuel Gil Peyrot 2021-12-30 19:04:10 +01:00
parent 8edbc4971d
commit 855d338a65

View File

@ -207,12 +207,12 @@ static void pointerHandleMotion(void* data,
return; return;
x = wl_fixed_to_double(sx); x = wl_fixed_to_double(sx);
y = wl_fixed_to_double(sy); y = wl_fixed_to_double(sy);
window->wl.cursorPosX = x;
window->wl.cursorPosY = y;
switch (window->wl.decorations.focus) switch (window->wl.decorations.focus)
{ {
case mainWindow: case mainWindow:
window->wl.cursorPosX = x;
window->wl.cursorPosY = y;
_glfwInputCursorPos(window, x, y); _glfwInputCursorPos(window, x, y);
_glfw.wl.cursorPreviousName = NULL; _glfw.wl.cursorPreviousName = NULL;
return; return;
@ -272,9 +272,7 @@ static void pointerHandleButton(void* data,
if (window->wl.cursorPosY < _GLFW_DECORATION_WIDTH) if (window->wl.cursorPosY < _GLFW_DECORATION_WIDTH)
edges = XDG_TOPLEVEL_RESIZE_EDGE_TOP; edges = XDG_TOPLEVEL_RESIZE_EDGE_TOP;
else else
{
xdg_toplevel_move(window->wl.xdg.toplevel, _glfw.wl.seat, serial); xdg_toplevel_move(window->wl.xdg.toplevel, _glfw.wl.seat, serial);
}
break; break;
case leftDecoration: case leftDecoration:
if (window->wl.cursorPosY < _GLFW_DECORATION_WIDTH) if (window->wl.cursorPosY < _GLFW_DECORATION_WIDTH)
@ -303,6 +301,7 @@ static void pointerHandleButton(void* data,
{ {
xdg_toplevel_resize(window->wl.xdg.toplevel, _glfw.wl.seat, xdg_toplevel_resize(window->wl.xdg.toplevel, _glfw.wl.seat,
serial, edges); serial, edges);
return;
} }
} }
else if (button == BTN_RIGHT) else if (button == BTN_RIGHT)