glfw-minecraft: merge glfw-wayland-minecraft into glfw
The set-cursor patch is taken from: <https://github.com/Admicos/minecraft-wayland/pull/56> And other changes including fractional scaling is already upstreamed in 3.4 thus not needed anymore. Co-authored-by: oxalica <oxalicc@pm.me> Signed-off-by: Sefa Eyeoglu <contact@scrumplex.net>
This commit is contained in:
parent
6774af1d20
commit
8dce7dafcf
@ -0,0 +1,59 @@
|
||||
From 9997ae55a47de469ea26f8437c30b51483abda5f Mon Sep 17 00:00:00 2001
|
||||
From: Dan Klishch <danilklishch@gmail.com>
|
||||
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
|
||||
|
@ -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;
|
||||
};
|
||||
}
|
@ -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;
|
||||
};
|
||||
}
|
@ -1,25 +0,0 @@
|
||||
From 46fb81c69e8acdb70907409f98dd01e387408414 Mon Sep 17 00:00:00 2001
|
||||
From: Stone Tickle <lattis@mochiro.moe>
|
||||
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
|
||||
|
@ -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
|
||||
|
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user