diff options
Diffstat (limited to 'archived/projt-launcher/flatpak/patches/0001-Wayland-Partially-implement-glfwSetCursorPos.patch')
| -rw-r--r-- | archived/projt-launcher/flatpak/patches/0001-Wayland-Partially-implement-glfwSetCursorPos.patch | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/archived/projt-launcher/flatpak/patches/0001-Wayland-Partially-implement-glfwSetCursorPos.patch b/archived/projt-launcher/flatpak/patches/0001-Wayland-Partially-implement-glfwSetCursorPos.patch new file mode 100644 index 0000000000..a3d44e86f0 --- /dev/null +++ b/archived/projt-launcher/flatpak/patches/0001-Wayland-Partially-implement-glfwSetCursorPos.patch @@ -0,0 +1,88 @@ +From 2bcc4749b1ab6819d6dfdb07cd1832ab5d3339bd Mon Sep 17 00:00:00 2001 +From: Friz64 <friz64@protonmail.com> +Date: Sun, 25 Feb 2024 00:51:49 +0100 +Subject: [PATCH 1/3] Wayland: Partially implement `glfwSetCursorPos` + +--- + src/wl_platform.h | 2 ++ + src/wl_window.c | 37 +++++++++++++++++++++++++++++++++++-- + 2 files changed, 37 insertions(+), 2 deletions(-) + +diff --git a/src/wl_platform.h b/src/wl_platform.h +index 149cd241..53b09eef 100644 +--- a/src/wl_platform.h ++++ b/src/wl_platform.h +@@ -371,6 +371,7 @@ typedef struct _GLFWwindowWayland + GLFWbool iconified; + GLFWbool activated; + GLFWbool fullscreen; ++ double cursorPosX, cursorPosY; + } pending; + + struct { +@@ -386,6 +387,7 @@ typedef struct _GLFWwindowWayland + + _GLFWcursor* currentCursor; + double cursorPosX, cursorPosY; ++ GLFWbool pendingCursorPos; + + char* appId; + +diff --git a/src/wl_window.c b/src/wl_window.c +index 5b491ffb..4283f88f 100644 +--- a/src/wl_window.c ++++ b/src/wl_window.c +@@ -2667,8 +2667,34 @@ void _glfwGetCursorPosWayland(_GLFWwindow* window, double* xpos, double* ypos) + + void _glfwSetCursorPosWayland(_GLFWwindow* window, double x, double y) + { +- _glfwInputError(GLFW_FEATURE_UNAVAILABLE, +- "Wayland: The platform does not support setting the cursor position"); ++ if (!_glfw.wl.pointerConstraints) ++ { ++ _glfwInputError(GLFW_FEATURE_UNAVAILABLE, ++ "Wayland: The compositor does not support setting the cursor position"); ++ return; ++ } ++ ++ if (window->wl.lockedPointer) { ++ zwp_locked_pointer_v1_set_cursor_position_hint(window->wl.lockedPointer, ++ wl_fixed_from_double(x), ++ wl_fixed_from_double(y)); ++ } else { ++ if (window->cursorMode != GLFW_CURSOR_DISABLED) { ++ _glfwInputError(GLFW_PLATFORM_ERROR, ++ "Wayland: Delaying the cursor position update until " ++ "the cursor mode is set to GLFW_CURSOR_DISABLED"); ++ } ++ ++ // The cursor is not currently locked, but it may be locked later. Either ++ // - the application has already set the cursor mode to GLFW_CURSOR_DISABLED, ++ // but the cursor is currently outside of the window, or ++ // - the application has not yet set the cursor mode to GLFW_CURSOR_DISABLED, ++ // but will do so soon. ++ // Defer setting the cursor position to _glfwSetCursorWayland. ++ window->wl.pending.cursorPosX = x; ++ window->wl.pending.cursorPosY = y; ++ window->wl.pendingCursorPos = GLFW_TRUE; ++ } + } + + void _glfwSetCursorModeWayland(_GLFWwindow* window, int mode) +@@ -3009,6 +3035,13 @@ void _glfwSetCursorWayland(_GLFWwindow* window, _GLFWcursor* cursor) + unconfinePointer(window); + if (!window->wl.lockedPointer) + lockPointer(window); ++ ++ if (window->wl.pendingCursorPos == GLFW_TRUE) { ++ zwp_locked_pointer_v1_set_cursor_position_hint(window->wl.lockedPointer, ++ wl_fixed_from_double(window->wl.pending.cursorPosX), ++ wl_fixed_from_double(window->wl.pending.cursorPosY)); ++ window->wl.pendingCursorPos = GLFW_FALSE; ++ } + } + else if (window->cursorMode == GLFW_CURSOR_CAPTURED) + { +-- +2.52.0 + |
