diff --git a/pkgs/by-name/gl/glfw3/0009-Defer-setting-cursor-position-until-the-cursor-is-lo.patch b/pkgs/by-name/gl/glfw3/0009-Defer-setting-cursor-position-until-the-cursor-is-lo.patch new file mode 100644 index 000000000000..70cec99815e9 --- /dev/null +++ b/pkgs/by-name/gl/glfw3/0009-Defer-setting-cursor-position-until-the-cursor-is-lo.patch @@ -0,0 +1,59 @@ +From 9997ae55a47de469ea26f8437c30b51483abda5f Mon Sep 17 00:00:00 2001 +From: Dan Klishch +Date: Sat, 30 Sep 2023 23:38:05 -0400 +Subject: Defer setting cursor position until the cursor is locked + +--- + src/wl_platform.h | 3 +++ + src/wl_window.c | 14 ++++++++++++-- + 2 files changed, 15 insertions(+), 2 deletions(-) + +diff --git a/src/wl_platform.h b/src/wl_platform.h +index ca34f66e..cd1f227f 100644 +--- a/src/wl_platform.h ++++ b/src/wl_platform.h +@@ -403,6 +403,9 @@ typedef struct _GLFWwindowWayland + int scaleSize; + int compositorPreferredScale; + ++ double askedCursorPosX, askedCursorPosY; ++ GLFWbool didAskForSetCursorPos; ++ + struct zwp_relative_pointer_v1* relativePointer; + struct zwp_locked_pointer_v1* lockedPointer; + struct zwp_confined_pointer_v1* confinedPointer; +diff --git a/src/wl_window.c b/src/wl_window.c +index 1de26558..0df16747 100644 +--- a/src/wl_window.c ++++ b/src/wl_window.c +@@ -2586,8 +2586,9 @@ 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"); ++ window->wl.didAskForSetCursorPos = true; ++ window->wl.askedCursorPosX = x; ++ window->wl.askedCursorPosY = y; + } + + void _glfwSetCursorModeWayland(_GLFWwindow* window, int mode) +@@ -2819,6 +2820,15 @@ static const struct zwp_relative_pointer_v1_listener relativePointerListener = + static void lockedPointerHandleLocked(void* userData, + struct zwp_locked_pointer_v1* lockedPointer) + { ++ _GLFWwindow* window = userData; ++ ++ if (window->wl.didAskForSetCursorPos) ++ { ++ window->wl.didAskForSetCursorPos = false; ++ zwp_locked_pointer_v1_set_cursor_position_hint(window->wl.lockedPointer, ++ wl_fixed_from_double(window->wl.askedCursorPosX), ++ wl_fixed_from_double(window->wl.askedCursorPosY)); ++ } + } + + static void lockedPointerHandleUnlocked(void* userData, +-- +2.42.0 + diff --git a/pkgs/development/libraries/glfw/3.x.nix b/pkgs/by-name/gl/glfw3/package.nix similarity index 79% rename from pkgs/development/libraries/glfw/3.x.nix rename to pkgs/by-name/gl/glfw3/package.nix index 2ec1f42d2840..33b22890387a 100644 --- a/pkgs/development/libraries/glfw/3.x.nix +++ b/pkgs/by-name/gl/glfw3/package.nix @@ -1,13 +1,16 @@ { stdenv, lib, fetchFromGitHub, cmake , libGL, libXrandr, libXinerama, libXcursor, libX11, libXi, libXext -, Carbon, Cocoa, Kernel, fixDarwinDylibNames +, darwin, fixDarwinDylibNames , extra-cmake-modules, wayland , wayland-scanner, wayland-protocols, libxkbcommon, libdecor +, withMinecraftPatch ? false }: - -stdenv.mkDerivation rec { +let version = "3.4"; - pname = "glfw"; +in +stdenv.mkDerivation { + pname = "glfw${lib.optionalString withMinecraftPatch "-minecraft"}"; + inherit version; src = fetchFromGitHub { owner = "glfw"; @@ -17,16 +20,20 @@ stdenv.mkDerivation rec { }; # Fix linkage issues on X11 (https://github.com/NixOS/nixpkgs/issues/142583) - patches = ./x11.patch; + patches = [ + ./x11.patch + ] ++ lib.optionals withMinecraftPatch [ + ./0009-Defer-setting-cursor-position-until-the-cursor-is-lo.patch + ]; propagatedBuildInputs = [ libGL ]; nativeBuildInputs = [ cmake extra-cmake-modules ] - ++ lib.optional stdenv.isDarwin fixDarwinDylibNames + ++ lib.optionals stdenv.isDarwin [ fixDarwinDylibNames ] ++ lib.optionals stdenv.isLinux [ wayland-scanner ]; buildInputs = - lib.optionals stdenv.isDarwin [ Carbon Cocoa Kernel ] + lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [ Carbon Cocoa Kernel ]) ++ lib.optionals stdenv.isLinux [ wayland wayland-protocols @@ -64,7 +71,7 @@ stdenv.mkDerivation rec { description = "Multi-platform library for creating OpenGL contexts and managing input, including keyboard, mouse, joystick and time"; homepage = "https://www.glfw.org/"; license = licenses.zlib; - maintainers = with maintainers; [ marcweber twey ]; + maintainers = with maintainers; [ marcweber Scrumplex twey ]; platforms = platforms.unix ++ platforms.windows; }; } diff --git a/pkgs/development/libraries/glfw/x11.patch b/pkgs/by-name/gl/glfw3/x11.patch similarity index 100% rename from pkgs/development/libraries/glfw/x11.patch rename to pkgs/by-name/gl/glfw3/x11.patch diff --git a/pkgs/development/libraries/glfw/3.x-wayland-minecraft.nix b/pkgs/development/libraries/glfw/3.x-wayland-minecraft.nix deleted file mode 100644 index 03baa891b3b4..000000000000 --- a/pkgs/development/libraries/glfw/3.x-wayland-minecraft.nix +++ /dev/null @@ -1,64 +0,0 @@ -{ stdenv, lib, fetchFromGitHub, fetchpatch2, cmake, extra-cmake-modules -, libGL, wayland, wayland-protocols, libxkbcommon, libdecor -}: - -stdenv.mkDerivation { - version = "unstable-2023-06-01"; - pname = "glfw-wayland-minecraft"; - - src = fetchFromGitHub { - owner = "glfw"; - repo = "GLFW"; - rev = "3eaf1255b29fdf5c2895856c7be7d7185ef2b241"; - sha256 = "sha256-UnwuE/3q6I4dS5syagpnqrDEVDK9XSVdyOg7KNkdUUA="; - }; - - patches = [ - (fetchpatch2 { - url = "https://raw.githubusercontent.com/Admicos/minecraft-wayland/15f88a515c63a9716cfdf4090fab8e16543f4ebd/0003-Don-t-crash-on-calls-to-focus-or-icon.patch"; - hash = "sha256-NZbKh16h+tWXXnz13QcFBFaeGXMNxZKGQb9xJEahFnE="; - }) - (fetchpatch2 { - url = "https://raw.githubusercontent.com/Admicos/minecraft-wayland/15f88a515c63a9716cfdf4090fab8e16543f4ebd/0005-Add-warning-about-being-an-unofficial-patch.patch"; - hash = "sha256-QMUNlnlCeFz5gIVdbM+YXPsrmiOl9cMwuVRSOvlw+T0="; - }) - ]; - - propagatedBuildInputs = [ libGL ]; - - nativeBuildInputs = [ cmake extra-cmake-modules ]; - - buildInputs = [ wayland wayland-protocols libxkbcommon ]; - - cmakeFlags = [ - "-DBUILD_SHARED_LIBS=ON" - "-DGLFW_BUILD_WAYLAND=ON" - "-DGLFW_BUILD_X11=OFF" - "-DCMAKE_C_FLAGS=-D_GLFW_EGL_LIBRARY='\"${lib.getLib libGL}/lib/libEGL.so.1\"'" - ]; - - postPatch = '' - substituteInPlace src/wl_init.c \ - --replace "libxkbcommon.so.0" "${lib.getLib libxkbcommon}/lib/libxkbcommon.so.0" - - substituteInPlace src/wl_init.c \ - --replace "libdecor-0.so.0" "${lib.getLib libdecor}/lib/libdecor-0.so.0" - - substituteInPlace src/wl_init.c \ - --replace "libwayland-client.so.0" "${lib.getLib wayland}/lib/libwayland-client.so.0" - - substituteInPlace src/wl_init.c \ - --replace "libwayland-cursor.so.0" "${lib.getLib wayland}/lib/libwayland-cursor.so.0" - - substituteInPlace src/wl_init.c \ - --replace "libwayland-egl.so.1" "${lib.getLib wayland}/lib/libwayland-egl.so.1" - ''; - - meta = with lib; { - description = "Multi-platform library for creating OpenGL contexts and managing input, including keyboard, mouse, joystick and time - with patches to support Minecraft on Wayland"; - homepage = "https://www.glfw.org/"; - license = licenses.zlib; - maintainers = with maintainers; [ Scrumplex ]; - platforms = platforms.linux; - }; -} diff --git a/pkgs/development/libraries/glfw/wayland.patch b/pkgs/development/libraries/glfw/wayland.patch deleted file mode 100644 index c0c338f845b3..000000000000 --- a/pkgs/development/libraries/glfw/wayland.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 46fb81c69e8acdb70907409f98dd01e387408414 Mon Sep 17 00:00:00 2001 -From: Stone Tickle -Date: Fri, 5 Jun 2020 12:51:25 +0900 -Subject: [PATCH] set O_NONBLOCK on repeat timerfd - ---- - src/wl_init.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/wl_init.c b/src/wl_init.c -index 49e7cc52..43569bef 100644 ---- a/src/wl_init.c -+++ b/src/wl_init.c -@@ -1166,7 +1166,7 @@ int _glfwPlatformInit(void) - - _glfw.wl.timerfd = -1; - if (_glfw.wl.seatVersion >= 4) -- _glfw.wl.timerfd = timerfd_create(CLOCK_MONOTONIC, TFD_CLOEXEC); -+ _glfw.wl.timerfd = timerfd_create(CLOCK_MONOTONIC, TFD_CLOEXEC | TFD_NONBLOCK); - - if (_glfw.wl.pointer && _glfw.wl.shm) - { --- -2.31.1 - diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix index 65ac0671b249..c4ebe58129b3 100644 --- a/pkgs/top-level/aliases.nix +++ b/pkgs/top-level/aliases.nix @@ -525,6 +525,7 @@ mapAliases ({ glew-egl = lib.warn "'glew-egl' is now provided by 'glew' directly" glew; # Added 2024-08-11 glide = throw "'glide' has been removed as it is unmaintained, please use Go modules instead"; # Added 2023-12-26 glfw-wayland = glfw; # Added 2024-04-19 + glfw-wayland-minecraft = glfw3-minecraft; # Added 2024-05-08 glxinfo = mesa-demos; # Added 2024-07-04 gmailieer = lieer; # Added 2020-04-19 gmic-qt-krita = throw "gmic-qt-krita was removed as it's no longer supported upstream."; # Converted to throw 2023-02-02 diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 6cf3a6269a89..ba6349fd39ac 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -20262,10 +20262,10 @@ with pkgs; inherit (darwin.apple_sdk.frameworks) AGL OpenGL; }; glfw = glfw3; - glfw-wayland-minecraft = callPackage ../development/libraries/glfw/3.x-wayland-minecraft.nix {}; glfw2 = callPackage ../development/libraries/glfw/2.x.nix { }; - glfw3 = callPackage ../development/libraries/glfw/3.x.nix { - inherit (darwin.apple_sdk.frameworks) Carbon Cocoa Kernel; + + glfw3-minecraft = callPackage ../by-name/gl/glfw3/package.nix { + withMinecraftPatch = true; }; glibc = callPackage ../development/libraries/glibc {