mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-09-13 02:42:09 +02:00
WMTheme (macOS): migrates impl to pure C using CoreFoundation
This commit is contained in:
+1
-1
@@ -1064,7 +1064,7 @@ elseif(APPLE)
|
||||
src/detection/wifi/wifi_apple.m
|
||||
src/detection/wm/wm_apple.m
|
||||
src/detection/de/de_nosupport.c
|
||||
src/detection/wmtheme/wmtheme_apple.m
|
||||
src/detection/wmtheme/wmtheme_apple.c
|
||||
src/detection/camera/camera_apple.m
|
||||
)
|
||||
# CMAKE_SYSTEM_PROCESSOR has been normalized before
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
#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;
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
#include "fastfetch.h"
|
||||
#include "wmtheme.h"
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
bool ffDetectWmTheme(FFstrbuf* 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]
|
||||
error:&error];
|
||||
if(error)
|
||||
{
|
||||
ffStrbufAppendS(themeOrError, error.localizedDescription.UTF8String);
|
||||
return false;
|
||||
}
|
||||
|
||||
NSNumber* wmThemeColor = dict[@"AppleAccentColor"];
|
||||
if(!wmThemeColor)
|
||||
ffStrbufAppendS(themeOrError, "Multicolor");
|
||||
else
|
||||
{
|
||||
switch(wmThemeColor.intValue)
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
NSString* wmTheme = dict[@"AppleInterfaceStyle"];
|
||||
ffStrbufAppendF(themeOrError, " (%s)", wmTheme ? wmTheme.UTF8String : "Light");
|
||||
return true;
|
||||
}
|
||||
Reference in New Issue
Block a user