Sfoglia il codice sorgente

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.
Emmanuel Gil Peyrot 3 anni fa
parent
commit
855d338a65
1 ha cambiato i file con 3 aggiunte e 4 eliminazioni
  1. 3 4
      src/wl_init.c

+ 3 - 4
src/wl_init.c

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