From b01e346e17f140e22c243b8d2fa306ecc2891695 Mon Sep 17 00:00:00 2001 From: Robert Kirkman Date: Sat, 14 Feb 2026 14:54:13 -0600 Subject: [PATCH] Global (macOS): enable X11 related stuff - https://github.com/fastfetch-cli/fastfetch/commit/7d92da88294cc3f71dbe1e5dc9203f331a42836e but for macOS --- CMakeLists.txt | 31 ++++++++++++++----- src/detection/cursor/cursor_apple.m | 10 ++++++ src/detection/cursor/cursor_linux.c | 10 +++++- src/detection/displayserver/displayserver.h | 1 + .../displayserver/displayserver_apple.c | 11 +++++++ src/detection/displayserver/linux/wmde.c | 12 +++++-- src/detection/font/font_apple.m | 5 +++ src/detection/font/font_linux.c | 13 +++++++- src/detection/icons/icons_linux.c | 5 +++ src/detection/sound/sound_apple.c | 3 ++ src/detection/sound/sound_linux.c | 8 ++++- .../terminalfont/terminalfont_apple.m | 7 +++-- .../terminalfont/terminalfont_linux.c | 2 +- src/detection/theme/theme_apple.c | 8 +++++ src/detection/theme/theme_linux.c | 8 ++++- src/detection/wallpaper/wallpaper_apple.m | 8 +++++ src/detection/wallpaper/wallpaper_linux.c | 8 ++++- src/detection/wm/wm_apple.m | 8 +++++ src/detection/wm/wm_linux.c | 16 +++++++--- src/detection/wmtheme/wmtheme_apple.m | 8 +++++ src/detection/wmtheme/wmtheme_linux.c | 8 ++++- 21 files changed, 167 insertions(+), 23 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 725b2b668d..4e65df4aeb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -71,13 +71,13 @@ include(CMakeDependentOption) cmake_dependent_option(ENABLE_VULKAN "Enable vulkan" ON "LINUX OR APPLE OR FreeBSD OR OpenBSD OR NetBSD OR WIN32 OR ANDROID OR SunOS OR Haiku OR GNU" OFF) cmake_dependent_option(ENABLE_WAYLAND "Enable wayland-client" ON "LINUX OR FreeBSD OR OpenBSD OR NetBSD OR GNU" OFF) -cmake_dependent_option(ENABLE_XCB_RANDR "Enable xcb-randr" ON "LINUX OR FreeBSD OR OpenBSD OR NetBSD OR ANDROID OR SunOS OR GNU" OFF) -cmake_dependent_option(ENABLE_XRANDR "Enable xrandr" ON "LINUX OR FreeBSD OR OpenBSD OR NetBSD OR ANDROID OR SunOS OR GNU" OFF) +cmake_dependent_option(ENABLE_XCB_RANDR "Enable xcb-randr" ON "LINUX OR FreeBSD OR OpenBSD OR NetBSD OR APPLE OR ANDROID OR SunOS OR GNU" OFF) +cmake_dependent_option(ENABLE_XRANDR "Enable xrandr" ON "LINUX OR FreeBSD OR OpenBSD OR NetBSD OR APPLE OR ANDROID OR SunOS OR GNU" OFF) cmake_dependent_option(ENABLE_DRM "Enable libdrm" ON "LINUX OR FreeBSD OR OpenBSD OR NetBSD OR SunOS OR GNU" OFF) cmake_dependent_option(ENABLE_DRM_AMDGPU "Enable libdrm_amdgpu" ON "LINUX OR FreeBSD OR GNU" OFF) -cmake_dependent_option(ENABLE_GIO "Enable gio-2.0" ON "LINUX OR FreeBSD OR OpenBSD OR NetBSD OR ANDROID OR SunOS OR GNU" OFF) -cmake_dependent_option(ENABLE_DCONF "Enable dconf" ON "LINUX OR FreeBSD OR OpenBSD OR NetBSD OR ANDROID OR SunOS OR GNU" OFF) -cmake_dependent_option(ENABLE_DBUS "Enable dbus-1" ON "LINUX OR FreeBSD OR OpenBSD OR NetBSD OR ANDROID OR SunOS OR Haiku OR GNU" OFF) +cmake_dependent_option(ENABLE_GIO "Enable gio-2.0" ON "LINUX OR FreeBSD OR OpenBSD OR NetBSD OR APPLE OR ANDROID OR SunOS OR GNU" OFF) +cmake_dependent_option(ENABLE_DCONF "Enable dconf" ON "LINUX OR FreeBSD OR OpenBSD OR NetBSD OR APPLE OR ANDROID OR SunOS OR GNU" OFF) +cmake_dependent_option(ENABLE_DBUS "Enable dbus-1" ON "LINUX OR FreeBSD OR OpenBSD OR NetBSD OR APPLE OR ANDROID OR SunOS OR Haiku OR GNU" OFF) cmake_dependent_option(ENABLE_SQLITE3 "Enable sqlite3" ON "LINUX OR FreeBSD OR APPLE OR OpenBSD OR NetBSD OR SunOS OR GNU" OFF) cmake_dependent_option(ENABLE_RPM "Enable rpm" ON "LINUX OR GNU" OFF) cmake_dependent_option(ENABLE_IMAGEMAGICK7 "Enable imagemagick 7" ON "LINUX OR FreeBSD OR OpenBSD OR NetBSD OR APPLE OR ANDROID OR WIN32 OR SunOS OR Haiku OR GNU" OFF) @@ -87,7 +87,7 @@ cmake_dependent_option(ENABLE_EGL "Enable egl" ON "LINUX OR FreeBSD OR OpenBSD O cmake_dependent_option(ENABLE_GLX "Enable glx" ON "LINUX OR FreeBSD OR OpenBSD OR NetBSD OR ANDROID OR SunOS OR GNU" OFF) cmake_dependent_option(ENABLE_OPENCL "Enable opencl" ON "LINUX OR FreeBSD OR OpenBSD OR NetBSD OR WIN32 OR ANDROID OR SunOS OR Haiku OR GNU" OFF) cmake_dependent_option(ENABLE_FREETYPE "Enable freetype" ON "ANDROID" OFF) -cmake_dependent_option(ENABLE_PULSE "Enable pulse" ON "LINUX OR ANDROID OR GNU" OFF) +cmake_dependent_option(ENABLE_PULSE "Enable pulse" ON "LINUX OR APPLE OR ANDROID OR GNU" OFF) cmake_dependent_option(ENABLE_DDCUTIL "Enable ddcutil" ON "LINUX" OFF) cmake_dependent_option(ENABLE_DIRECTX_HEADERS "Enable DirectX headers for WSL" ON "LINUX" OFF) cmake_dependent_option(ENABLE_ELF "Enable libelf" ON "LINUX OR ANDROID OR DragonFly OR Haiku OR GNU" OFF) @@ -931,6 +931,7 @@ elseif(OpenBSD) ) elseif(APPLE) list(APPEND LIBFASTFETCH_SRC + src/common/impl/dbus.c src/common/impl/io_unix.c src/common/impl/netif_apple.c src/common/impl/networking_linux.c @@ -954,18 +955,26 @@ elseif(APPLE) src/detection/cpucache/cpucache_apple.c src/detection/cpuusage/cpuusage_apple.c src/detection/cursor/cursor_apple.m + src/detection/cursor/cursor_linux.c src/detection/disk/disk_bsd.c src/detection/dns/dns_apple.c src/detection/physicaldisk/physicaldisk_apple.c src/detection/physicalmemory/physicalmemory_apple.m src/detection/diskio/diskio_apple.c src/detection/displayserver/displayserver_apple.c + src/detection/displayserver/linux/common.c + src/detection/displayserver/linux/wmde.c + src/detection/displayserver/linux/xcb.c + src/detection/displayserver/linux/xlib.c + src/detection/gtk_qt/gtk.c + src/detection/gtk_qt/qt.c src/detection/font/font_apple.m + src/detection/font/font_linux.c src/detection/gpu/gpu_apple.c src/detection/gpu/gpu_apple.m src/detection/host/host_apple.c src/detection/host/host_mac.c - src/detection/icons/icons_nosupport.c + src/detection/icons/icons_linux.c src/detection/initsystem/initsystem_linux.c src/detection/keyboard/keyboard_apple.c src/detection/lm/lm_nosupport.c @@ -985,19 +994,25 @@ elseif(APPLE) src/detection/poweradapter/poweradapter_apple.c src/detection/processes/processes_bsd.c src/detection/sound/sound_apple.c + src/detection/sound/sound_linux.c src/detection/swap/swap_apple.c src/detection/terminalfont/terminalfont_apple.m + src/detection/terminalfont/terminalfont_linux.c src/detection/terminalshell/terminalshell_linux.c src/detection/terminalsize/terminalsize_linux.c src/detection/theme/theme_apple.c + src/detection/theme/theme_linux.c src/detection/tpm/tpm_apple.c src/detection/uptime/uptime_bsd.c src/detection/users/users_linux.c src/detection/wallpaper/wallpaper_apple.m + src/detection/wallpaper/wallpaper_linux.c src/detection/wifi/wifi_apple.m src/detection/wm/wm_apple.m - src/detection/de/de_nosupport.c + src/detection/wm/wm_linux.c + src/detection/de/de_linux.c src/detection/wmtheme/wmtheme_apple.m + src/detection/wmtheme/wmtheme_linux.c src/detection/camera/camera_apple.m ) elseif(WIN32) diff --git a/src/detection/cursor/cursor_apple.m b/src/detection/cursor/cursor_apple.m index 610bd1ed8a..7c6c94b7cb 100644 --- a/src/detection/cursor/cursor_apple.m +++ b/src/detection/cursor/cursor_apple.m @@ -1,5 +1,7 @@ #include "cursor.h" +#include "detection/displayserver/displayserver.h" + #import static void appendColor(FFstrbuf* str, NSDictionary* dict) @@ -30,6 +32,14 @@ static void appendColor(FFstrbuf* str, NSDictionary* dict) void ffDetectCursor(FFCursorResult* result) { + const FFDisplayServerResult* wmde = ffConnectDisplayServer(); + + if(ffStrbufIgnCaseEqualS(&wmde->wmProtocolName, FF_WM_PROTOCOL_X11)) { + void ffDetectCursorLinux(FFCursorResult* result); + ffDetectCursorLinux(result); + return; + } + NSError* error; NSString* fileName = [NSString stringWithFormat:@"file://%s/Library/Preferences/com.apple.universalaccess.plist", instance.state.platform.homeDir.chars]; NSDictionary* dict = [NSDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:fileName] diff --git a/src/detection/cursor/cursor_linux.c b/src/detection/cursor/cursor_linux.c index 4cccd721d0..611ca9c0ff 100644 --- a/src/detection/cursor/cursor_linux.c +++ b/src/detection/cursor/cursor_linux.c @@ -81,12 +81,20 @@ static bool detectCursorHyprcursor(FFCursorResult* result) return true; } -void ffDetectCursor(FFCursorResult* result) +void +#ifdef __APPLE__ +ffDetectCursorLinux +#else +ffDetectCursor +#endif +(FFCursorResult* result) { const FFDisplayServerResult* wmde = ffConnectDisplayServer(); if(ffStrbufEqualS(&wmde->wmPrettyName, FF_WM_PRETTY_WSLG)) ffStrbufAppendS(&result->error, "WSLg uses native windows cursor"); + else if(ffStrbufIgnCaseEqualS(&wmde->wmProtocolName, FF_WM_PROTOCOL_COREGRAPHICS)) + ffStrbufAppendS(&result->error, "Linux cursor isn't supported in macOS unless running X11"); else if(ffStrbufIgnCaseEqualS(&wmde->wmProtocolName, FF_WM_PROTOCOL_TTY)) ffStrbufAppendS(&result->error, "Cursor isn't supported in TTY"); else if(ffStrbufIgnCaseEqualS(&wmde->dePrettyName, FF_DE_PRETTY_PLASMA)) diff --git a/src/detection/displayserver/displayserver.h b/src/detection/displayserver/displayserver.h index 54788cfaa2..fba98d11f9 100644 --- a/src/detection/displayserver/displayserver.h +++ b/src/detection/displayserver/displayserver.h @@ -45,6 +45,7 @@ #define FF_WM_PROTOCOL_X11 "X11" #define FF_WM_PROTOCOL_WAYLAND "Wayland" #define FF_WM_PROTOCOL_SURFACEFLINGER "SurfaceFlinger" +#define FF_WM_PROTOCOL_COREGRAPHICS "CoreGraphics" typedef enum __attribute__((__packed__)) FFDisplayType { FF_DISPLAY_TYPE_UNKNOWN, diff --git a/src/detection/displayserver/displayserver_apple.c b/src/detection/displayserver/displayserver_apple.c index 7f34bfb73d..c31cc53a65 100644 --- a/src/detection/displayserver/displayserver_apple.c +++ b/src/detection/displayserver/displayserver_apple.c @@ -3,6 +3,7 @@ #include "common/stringUtils.h" #include "common/edidHelper.h" #include "detection/os/os.h" +#include "linux/displayserver_linux.h" #include #include @@ -187,12 +188,22 @@ static void detectDisplays(FFDisplayServerResult* ds) void ffConnectDisplayServerImpl(FFDisplayServerResult* ds) { + const char* error = ffdsConnectXcbRandr(ds); + if (error) + error = ffdsConnectXrandr(ds); + if (!error) + { + ffdsDetectWMDE(ds); + return; + } + { FF_CFTYPE_AUTO_RELEASE CFMachPortRef port = CGWindowServerCreateServerPort(); if (port) { ffStrbufSetStatic(&ds->wmProcessName, "WindowServer"); ffStrbufSetStatic(&ds->wmPrettyName, "Quartz Compositor"); + ffStrbufSetStatic(&ds->wmProtocolName, FF_WM_PROTOCOL_COREGRAPHICS); } } diff --git a/src/detection/displayserver/linux/wmde.c b/src/detection/displayserver/linux/wmde.c index 5037215894..8eaf7108ea 100644 --- a/src/detection/displayserver/linux/wmde.c +++ b/src/detection/displayserver/linux/wmde.c @@ -8,7 +8,7 @@ #include #include -#if __FreeBSD__ +#if __FreeBSD__ || __APPLE__ #include #include #include @@ -268,10 +268,13 @@ static const char* getFromProcesses(FFDisplayServerResult* result) { uint32_t userId = instance.state.platform.uid; -#if __FreeBSD__ +#if __FreeBSD__ || __APPLE__ #ifdef __DragonFly__ #define ki_comm kp_comm #endif + #ifdef __APPLE__ + #define ki_comm kp_proc.p_comm + #endif int request[] = {CTL_KERN, KERN_PROC, KERN_PROC_UID, (int) userId}; size_t length = 0; @@ -438,6 +441,11 @@ void ffdsDetectWMDE(FFDisplayServerResult* result) return; // Only supported when connected to X11 #endif + #if __APPLE__ + if(ffStrbufIgnCaseEqualS(&result->wmProtocolName, FF_WM_PROTOCOL_COREGRAPHICS)) + return; // Only supported when connected to X11 + #endif + const char* env = parseEnv(); if(result->wmProcessName.length > 0) diff --git a/src/detection/font/font_apple.m b/src/detection/font/font_apple.m index e8aff3c5f0..cf2912e54e 100644 --- a/src/detection/font/font_apple.m +++ b/src/detection/font/font_apple.m @@ -23,6 +23,11 @@ static void generateString(FFFontResult* font) const char* ffDetectFontImpl(FFFontResult* result) { + const char* ffDetectFontImplLinux(FFFontResult* result); + const char* error = ffDetectFontImplLinux(result); + + if(!error) return NULL; + ffStrbufAppendS(&result->fonts[0], [NSFont systemFontOfSize:12].familyName.UTF8String); ffStrbufAppendS(&result->fonts[1], [NSFont userFontOfSize:12].familyName.UTF8String); #ifdef MAC_OS_X_VERSION_10_15 diff --git a/src/detection/font/font_linux.c b/src/detection/font/font_linux.c index e3253379cf..a8fe9a842e 100644 --- a/src/detection/font/font_linux.c +++ b/src/detection/font/font_linux.c @@ -24,13 +24,24 @@ static void generateString(FFFontResult* font) ffParseGTK(&font->display, &font->fonts[1], &font->fonts[2], &font->fonts[3]); } -const char* ffDetectFontImpl(FFFontResult* result) +const char* +#if __APPLE__ +ffDetectFontImplLinux +#else +ffDetectFontImpl +#endif +(FFFontResult* result) { const FFDisplayServerResult* wmde = ffConnectDisplayServer(); if(ffStrbufIgnCaseEqualS(&wmde->wmProtocolName, FF_WM_PROTOCOL_TTY)) return "Font isn't supported in TTY"; + #if __APPLE__ + if(ffStrbufIgnCaseEqualS(&wmde->wmProtocolName, FF_WM_PROTOCOL_COREGRAPHICS)) + return "Linux font isn't supported in macOS unless running X11"; + #endif + FFfont qt; ffFontInitQt(&qt, ffDetectQt()->font.chars); ffStrbufAppend(&result->fonts[0], &qt.pretty); diff --git a/src/detection/icons/icons_linux.c b/src/detection/icons/icons_linux.c index e5727b1955..e365227adb 100644 --- a/src/detection/icons/icons_linux.c +++ b/src/detection/icons/icons_linux.c @@ -10,6 +10,11 @@ const char* ffDetectIcons(FFIconsResult* result) if(ffStrbufIgnCaseEqualS(&wmde->wmProtocolName, FF_WM_PROTOCOL_TTY)) return "Icons aren't supported in TTY"; + #if __APPLE__ + if(ffStrbufIgnCaseEqualS(&wmde->wmProtocolName, FF_WM_PROTOCOL_COREGRAPHICS)) + return "Linux icons aren't supported in macOS unless running X11"; + #endif + const FFstrbuf* plasma = &ffDetectQt()->icons; const FFstrbuf* gtk2 = &ffDetectGTK2()->icons; const FFstrbuf* gtk3 = &ffDetectGTK3()->icons; diff --git a/src/detection/sound/sound_apple.c b/src/detection/sound/sound_apple.c index 7f800b3727..f48ca1a486 100644 --- a/src/detection/sound/sound_apple.c +++ b/src/detection/sound/sound_apple.c @@ -10,6 +10,9 @@ const char* ffDetectSound(FFlist* devices /* List of FFSoundDevice */) { + const char* ffDetectSoundLinux(FFlist* devices); + ffDetectSoundLinux(devices); + AudioDeviceID mainDeviceId; UInt32 dataSize = sizeof(mainDeviceId); if(AudioObjectGetPropertyData(kAudioObjectSystemObject, &(AudioObjectPropertyAddress){ diff --git a/src/detection/sound/sound_linux.c b/src/detection/sound/sound_linux.c index ace1d0b08e..07e0a54f11 100644 --- a/src/detection/sound/sound_linux.c +++ b/src/detection/sound/sound_linux.c @@ -127,7 +127,13 @@ static const char* detectSound(FFlist* devices) #endif // FF_HAVE_PULSE -const char* ffDetectSound(FFlist* devices) +const char* +#ifdef __APPLE__ +ffDetectSoundLinux +#else +ffDetectSound +#endif +(FFlist* devices) { #ifdef FF_HAVE_PULSE return detectSound(devices); diff --git a/src/detection/terminalfont/terminalfont_apple.m b/src/detection/terminalfont/terminalfont_apple.m index 126235f411..94ee007617 100644 --- a/src/detection/terminalfont/terminalfont_apple.m +++ b/src/detection/terminalfont/terminalfont_apple.m @@ -100,7 +100,10 @@ bool ffDetectTerminalFontPlatform(const FFTerminalResult* terminal, FFTerminalFo detectAppleTerminal(terminalFont); else if(ffStrbufIgnCaseEqualS(&terminal->processName, "WarpTerminal")) detectWarpTerminal(terminalFont); - else - return false; + else { + bool ffDetectTerminalFontPlatformLinux(const FFTerminalResult* terminal, FFTerminalFontResult* terminalFont); + return ffDetectTerminalFontPlatformLinux(terminal, terminalFont); + } + return true; } diff --git a/src/detection/terminalfont/terminalfont_linux.c b/src/detection/terminalfont/terminalfont_linux.c index a8c0ddac98..f9a6ff1d9c 100644 --- a/src/detection/terminalfont/terminalfont_linux.c +++ b/src/detection/terminalfont/terminalfont_linux.c @@ -504,7 +504,7 @@ static void detectHaikuTerminal(FFTerminalFontResult* terminalFont) #endif bool -#ifdef __ANDROID__ +#if __ANDROID__ || __APPLE__ ffDetectTerminalFontPlatformLinux #else ffDetectTerminalFontPlatform diff --git a/src/detection/theme/theme_apple.c b/src/detection/theme/theme_apple.c index b46d5afbf2..420e2a3cc1 100644 --- a/src/detection/theme/theme_apple.c +++ b/src/detection/theme/theme_apple.c @@ -1,9 +1,17 @@ #include "theme.h" #include "detection/os/os.h" +#include "detection/displayserver/displayserver.h" const char* ffDetectTheme(FFThemeResult* result) { + const FFDisplayServerResult* wmde = ffConnectDisplayServer(); + + if(ffStrbufIgnCaseEqualS(&wmde->wmProtocolName, FF_WM_PROTOCOL_X11)) { + const char* ffDetectThemeLinux(FFThemeResult* result); + return ffDetectThemeLinux(result); + } + const FFOSResult* os = ffDetectOS(); char* str_end; diff --git a/src/detection/theme/theme_linux.c b/src/detection/theme/theme_linux.c index 650130775f..e039b27799 100644 --- a/src/detection/theme/theme_linux.c +++ b/src/detection/theme/theme_linux.c @@ -3,7 +3,13 @@ #include "detection/gtk_qt/gtk_qt.h" #include "detection/displayserver/displayserver.h" -const char* ffDetectTheme(FFThemeResult* result) +const char* +#if __APPLE__ +ffDetectThemeLinux +#else +ffDetectTheme +#endif +(FFThemeResult* result) { const FFDisplayServerResult* wmde = ffConnectDisplayServer(); diff --git a/src/detection/wallpaper/wallpaper_apple.m b/src/detection/wallpaper/wallpaper_apple.m index 800aee9ce6..f091323b29 100644 --- a/src/detection/wallpaper/wallpaper_apple.m +++ b/src/detection/wallpaper/wallpaper_apple.m @@ -1,11 +1,19 @@ #include "wallpaper.h" #include "common/settings.h" #include "common/apple/osascript.h" +#include "detection/displayserver/displayserver.h" #import const char* ffDetectWallpaper(FFstrbuf* result) { + const FFDisplayServerResult* wmde = ffConnectDisplayServer(); + + if(ffStrbufIgnCaseEqualS(&wmde->wmProtocolName, FF_WM_PROTOCOL_X11)) { + const char* ffDetectWallpaperLinux(FFstrbuf* result); + return ffDetectWallpaperLinux(result); + } + { // For Sonoma // https://github.com/JohnCoates/Aerial/issues/1332 diff --git a/src/detection/wallpaper/wallpaper_linux.c b/src/detection/wallpaper/wallpaper_linux.c index d2aa65b6c3..6845f112b2 100644 --- a/src/detection/wallpaper/wallpaper_linux.c +++ b/src/detection/wallpaper/wallpaper_linux.c @@ -2,7 +2,13 @@ #include "common/settings.h" #include "detection/gtk_qt/gtk_qt.h" -const char* ffDetectWallpaper(FFstrbuf* result) +const char* +#if __APPLE__ +ffDetectWallpaperLinux +#else +ffDetectWallpaper +#endif +(FFstrbuf* result) { const FFstrbuf* wallpaper = NULL; const FFGTKResult* gtk = ffDetectGTK4(); diff --git a/src/detection/wm/wm_apple.m b/src/detection/wm/wm_apple.m index 2036cfd12c..5138d09339 100644 --- a/src/detection/wm/wm_apple.m +++ b/src/detection/wm/wm_apple.m @@ -3,6 +3,7 @@ #include "common/sysctl.h" #include "common/mallocHelper.h" #include "common/stringUtils.h" +#include "detection/displayserver/displayserver.h" #include #import @@ -47,6 +48,13 @@ if (!wmName) return "No WM detected"; + const FFDisplayServerResult* wmde = ffConnectDisplayServer(); + + if(ffStrbufIgnCaseEqualS(&wmde->wmProtocolName, FF_WM_PROTOCOL_X11)) { + const char* ffDetectWMVersionLinux(const FFstrbuf* wmName, FFstrbuf* result, FF_MAYBE_UNUSED FFWMOptions* options); + return ffDetectWMVersionLinux(wmName, result, options); + } + if (ffStrbufEqualS(wmName, "WindowServer")) { NSError* error; diff --git a/src/detection/wm/wm_linux.c b/src/detection/wm/wm_linux.c index 56d8926e8d..1e2bfe63f2 100644 --- a/src/detection/wm/wm_linux.c +++ b/src/detection/wm/wm_linux.c @@ -8,10 +8,12 @@ #include "common/debug.h" #include "detection/displayserver/displayserver.h" +#ifndef __APPLE__ const char* ffDetectWMPlugin(FF_MAYBE_UNUSED FFstrbuf* pluginName) { return "Not supported on this platform"; } +#endif static bool extractCommonWmVersion(const char* line, FF_MAYBE_UNUSED uint32_t len, void *userdata) { @@ -23,7 +25,7 @@ static bool extractCommonWmVersion(const char* line, FF_MAYBE_UNUSED uint32_t le return false; } -#if !__ANDROID__ +#if !__ANDROID__ && !__APPLE__ static bool extractHyprlandVersion(const char* line, uint32_t len, void *userdata) { if (line[0] != 'v') return true; @@ -195,7 +197,7 @@ static const char* getWslg(FFstrbuf* result) } #endif -#endif // !__ANDROID__ +#endif // !__ANDROID__ && !__APPLE__ static bool extractI3Version(const char* line, FF_MAYBE_UNUSED uint32_t len, void *userdata) { @@ -299,12 +301,18 @@ static const char* getOpenbox(FFstrbuf* result) return "Failed to run command `openbox --version`"; } -const char* ffDetectWMVersion(const FFstrbuf* wmName, FFstrbuf* result, FF_MAYBE_UNUSED FFWMOptions* options) +const char* +#ifdef __APPLE__ +ffDetectWMVersionLinux +#else +ffDetectWMVersion +#endif +(const FFstrbuf* wmName, FFstrbuf* result, FF_MAYBE_UNUSED FFWMOptions* options) { if (!wmName) return "No WM detected"; - #if !__ANDROID__ + #if !__ANDROID__ && !__APPLE__ // Wayland compositors if (ffStrbufIgnCaseEqualS(wmName, "Hyprland")) return getHyprland(result); diff --git a/src/detection/wmtheme/wmtheme_apple.m b/src/detection/wmtheme/wmtheme_apple.m index 8c43877b12..f371782d95 100644 --- a/src/detection/wmtheme/wmtheme_apple.m +++ b/src/detection/wmtheme/wmtheme_apple.m @@ -1,10 +1,18 @@ #include "fastfetch.h" #include "wmtheme.h" +#include "detection/displayserver/displayserver.h" #import bool ffDetectWmTheme(FFstrbuf* themeOrError) { + const FFDisplayServerResult* wmde = ffConnectDisplayServer(); + + if(ffStrbufIgnCaseEqualS(&wmde->wmProtocolName, FF_WM_PROTOCOL_X11)) { + bool ffDetectWmThemeLinux(FFstrbuf* themeOrError); + return ffDetectWmThemeLinux(themeOrError); + } + NSError* error; NSString* fileName = [NSString stringWithFormat:@"file://%s/Library/Preferences/.GlobalPreferences.plist", instance.state.platform.homeDir.chars]; NSDictionary* dict = [NSDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:fileName] diff --git a/src/detection/wmtheme/wmtheme_linux.c b/src/detection/wmtheme/wmtheme_linux.c index d36bfbaca2..20d50f44c1 100644 --- a/src/detection/wmtheme/wmtheme_linux.c +++ b/src/detection/wmtheme/wmtheme_linux.c @@ -187,7 +187,13 @@ static bool detectOpenbox(const FFstrbuf* dePrettyName, FFstrbuf* themeOrError) return false; } -bool ffDetectWmTheme(FFstrbuf* themeOrError) +bool +#if __APPLE__ +ffDetectWmThemeLinux +#else +ffDetectWmTheme +#endif +(FFstrbuf* themeOrError) { const FFDisplayServerResult* wm = ffConnectDisplayServer();