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)