From 5374feb24bedaa89bd6b8a823a69724fc96c9166 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Sun, 7 Apr 2024 20:08:41 +0800 Subject: [PATCH] Cursor (Linux): support hyprcursor detection Fix: #776 --- CHANGELOG.md | 1 + src/detection/cursor/cursor_linux.c | 15 +++++++++++++++ src/detection/displayserver/displayserver.h | 1 + src/detection/displayserver/linux/wmde.c | 5 +++++ 4 files changed, 22 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d9f9800a0..01b49ee7d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ Features: * Support weston-terminal (TerminalFont, Linux) +* Support hyprcursor detection (Cursor, Linux) # 2.9.0 diff --git a/src/detection/cursor/cursor_linux.c b/src/detection/cursor/cursor_linux.c index 406e95ef0..ff2422249 100644 --- a/src/detection/cursor/cursor_linux.c +++ b/src/detection/cursor/cursor_linux.c @@ -68,6 +68,19 @@ static bool detectCursorFromEnv(FFCursorResult* result) return true; } +static bool detectCursorHyprcursor(FFCursorResult* result) +{ + const char* hyprcursor_theme = getenv("HYPRCURSOR_THEME"); + + if(!ffStrSet(hyprcursor_theme)) + return false; + + ffStrbufAppendS(&result->theme, hyprcursor_theme); + ffStrbufAppendS(&result->size, getenv("HYPRCURSOR_SIZE")); + + return true; +} + void ffDetectCursor(FFCursorResult* result) { const FFDisplayServerResult* wmde = ffConnectDisplayServer(); @@ -80,6 +93,8 @@ void ffDetectCursor(FFCursorResult* result) detectCursorFromConfigFile("kcminputrc", "cursorTheme =", "Breeze", "cursorSize =", "24", result); else if(ffStrbufStartsWithIgnCaseS(&wmde->dePrettyName, FF_DE_PRETTY_LXQT)) detectCursorFromConfigFile("lxqt/session.conf", "cursor_theme =", "Adwaita", "cursor_size =", "24", result); + else if(ffStrbufIgnCaseEqualS(&wmde->wmPrettyName, FF_WM_PRETTY_HYPRLAND) && detectCursorHyprcursor(result)) + return; else if( !detectCursorGTK(result) && !detectCursorFromEnv(result) && diff --git a/src/detection/displayserver/displayserver.h b/src/detection/displayserver/displayserver.h index b5655a84f..9c6c2d96e 100644 --- a/src/detection/displayserver/displayserver.h +++ b/src/detection/displayserver/displayserver.h @@ -21,6 +21,7 @@ #define FF_WM_PRETTY_XFWM4 "Xfwm4" #define FF_WM_PRETTY_OPENBOX "Openbox" #define FF_WM_PRETTY_I3 "i3" +#define FF_WM_PRETTY_HYPRLAND "Hyprland" #define FF_WM_PRETTY_WAYFIRE "Wayfire" #define FF_WM_PRETTY_SWAY "Sway" #define FF_WM_PRETTY_BSPWM "bspwm" diff --git a/src/detection/displayserver/linux/wmde.c b/src/detection/displayserver/linux/wmde.c index 625f04e47..5d21f1d6c 100644 --- a/src/detection/displayserver/linux/wmde.c +++ b/src/detection/displayserver/linux/wmde.c @@ -52,6 +52,9 @@ static const char* parseEnv(void) if(getenv("TDE_FULL_SESSION") != NULL) return "Trinity"; + if(getenv("HYPRLAND_CMD") != NULL) + return "Hyprland"; + #ifdef __linux__ if( getenv("WAYLAND_DISPLAY") != NULL && @@ -116,6 +119,8 @@ static void applyPrettyNameIfWM(FFDisplayServerResult* result, const char* name) ffStrbufSetS(&result->wmPrettyName, FF_WM_PRETTY_ICEWM); else if(ffStrEqualsIgnCase(name, "dtwm")) ffStrbufSetS(&result->wmPrettyName, FF_WM_PRETTY_DTWM); + else if(ffStrEqualsIgnCase(name, "hyprland")) + ffStrbufSetS(&result->wmPrettyName, FF_WM_PRETTY_HYPRLAND); } static void applyNameIfWM(FFDisplayServerResult* result, const char* processName)