Files
fastfetch/src/detection/wmtheme/wmtheme_apple.c
T

53 lines
1.9 KiB
C

#include "fastfetch.h"
#include "wmtheme.h"
#include "common/apple/cf_helpers.h"
bool ffDetectWmTheme(FFstrbuf* themeOrError) {
// Read via cfprefsd instead of the raw plist file to keep cache consistency with the system
FF_CFTYPE_AUTO_RELEASE CFTypeRef wmThemeColor = CFPreferencesCopyAppValue(CFSTR("AppleAccentColor"), kCFPreferencesAnyApplication);
int32_t accentColor = -2; // -2: not set; -1 is Graphite
if (wmThemeColor && ffCfNumGetInt(wmThemeColor, &accentColor) == nullptr) {
switch (accentColor) {
case -1:
ffStrbufAppendS(themeOrError, "Graphite");
break;
case 0:
ffStrbufAppendS(themeOrError, "Red");
break;
case 1:
ffStrbufAppendS(themeOrError, "Orange");
break;
case 2:
ffStrbufAppendS(themeOrError, "Yellow");
break;
case 3:
ffStrbufAppendS(themeOrError, "Green");
break;
case 4:
ffStrbufAppendS(themeOrError, "Blue");
break;
case 5:
ffStrbufAppendS(themeOrError, "Purple");
break;
case 6:
ffStrbufAppendS(themeOrError, "Pink");
break;
default:
ffStrbufAppendS(themeOrError, "Unknown");
break;
}
} else {
ffStrbufAppendS(themeOrError, "Multicolor");
}
FF_STRBUF_AUTO_DESTROY style = ffStrbufCreate();
FF_CFTYPE_AUTO_RELEASE CFTypeRef wmTheme = CFPreferencesCopyAppValue(CFSTR("AppleInterfaceStyle"), kCFPreferencesAnyApplication);
if (wmTheme && ffCfStrGetString(wmTheme, &style) == nullptr) {
ffStrbufAppendF(themeOrError, " (%s)", style.chars);
} else {
ffStrbufAppendS(themeOrError, " (Light)");
}
return true;
}