Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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

Original file line number Diff line number Diff line change
@@ -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";
Expand All @@ -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
Expand Down Expand Up @@ -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;
};
}
75 changes: 24 additions & 51 deletions pkgs/by-name/pr/prismlauncher/package.nix
Original file line number Diff line number Diff line change
@@ -1,30 +1,33 @@
{
lib,
stdenv,
symlinkJoin,
prismlauncher-unwrapped,
addDriverRunpath,
alsa-lib,
flite,
gamemode,
glfw,
glfw-wayland-minecraft,
mesa-demos,
jdk8,
glfw3-minecraft,
jdk17,
jdk21,
jdk8,
kdePackages,
lib,
libGL,
libX11,
libXcursor,
libXext,
libXrandr,
libXxf86vm,
libjack2,
libpulseaudio,
libusb1,
makeWrapper,
mesa-demos,
openal,
pciutils,
pipewire,
prismlauncher-unwrapped,
stdenv,
symlinkJoin,
udev,
vulkan-loader,
xorg,
xrandr,

additionalLibs ? [ ],
additionalPrograms ? [ ],
Expand All @@ -37,15 +40,6 @@
],
msaClientID ? null,
textToSpeechSupport ? stdenv.isLinux,

# Adds `glfw-wayland-minecraft` to `LD_LIBRARY_PATH`
# when launched on wayland, allowing for the game to be run natively.
# Make sure to enable "Use system installation of GLFW" in instance settings
# for this to take effect
#
# Warning: This build of glfw may be unstable, and the launcher
# itself can take slightly longer to start
withWaylandGLFW ? false,
}:

assert lib.assertMsg (
Expand All @@ -56,10 +50,6 @@ assert lib.assertMsg (
textToSpeechSupport -> stdenv.isLinux
) "textToSpeechSupport only has an effect on Linux.";

assert lib.assertMsg (
withWaylandGLFW -> stdenv.isLinux
) "withWaylandGLFW is only available on Linux.";

let
prismlauncher' = prismlauncher-unwrapped.override { inherit msaClientID gamemodeSupport; };
in
Expand All @@ -69,11 +59,7 @@ symlinkJoin {

paths = [ prismlauncher' ];

nativeBuildInputs =
[ kdePackages.wrapQtAppsHook ]
# purposefully using a shell wrapper here for variable expansion
# see https://github.com/NixOS/nixpkgs/issues/172583
++ lib.optional withWaylandGLFW makeWrapper;
nativeBuildInputs = [ kdePackages.wrapQtAppsHook ];

buildInputs =
[
Expand All @@ -84,30 +70,17 @@ symlinkJoin {
lib.versionAtLeast kdePackages.qtbase.version "6" && stdenv.isLinux
) kdePackages.qtwayland;

env = {
waylandPreExec = lib.optionalString withWaylandGLFW ''
if [ -n "$WAYLAND_DISPLAY" ]; then
export LD_LIBRARY_PATH=${lib.getLib glfw-wayland-minecraft}/lib:"$LD_LIBRARY_PATH"
fi
'';
};

postBuild =
lib.optionalString withWaylandGLFW ''
qtWrapperArgs+=(--run "$waylandPreExec")
''
+ ''
wrapQtAppsHook
'';
postBuild = ''
wrapQtAppsHook
'';

qtWrapperArgs =
let
runtimeLibs =
[
# lwjgl
stdenv.cc.cc.lib
## native versions
glfw
glfw3-minecraft
openal

## openal
Expand All @@ -118,11 +91,11 @@ symlinkJoin {

## glfw
libGL
xorg.libX11
xorg.libXext
xorg.libXcursor
xorg.libXrandr
xorg.libXxf86vm
libX11
libXcursor
libXext
libXrandr
libXxf86vm

udev # oshi

Expand All @@ -136,7 +109,7 @@ symlinkJoin {
runtimePrograms = [
mesa-demos
pciutils # need lspci
xorg.xrandr # needed for LWJGL [2.9.2, 3) https://github.com/LWJGL/lwjgl/issues/128
xrandr # needed for LWJGL [2.9.2, 3) https://github.com/LWJGL/lwjgl/issues/128
] ++ additionalPrograms;

in
Expand Down
64 changes: 0 additions & 64 deletions pkgs/development/libraries/glfw/3.x-wayland-minecraft.nix

This file was deleted.

25 changes: 0 additions & 25 deletions pkgs/development/libraries/glfw/wayland.patch

This file was deleted.

1 change: 1 addition & 0 deletions pkgs/top-level/aliases.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 3 additions & 3 deletions pkgs/top-level/all-packages.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down