WMTheme (macOS): migrates impl to pure C using CoreFoundation

This commit is contained in:
李通洲
2026-08-09 10:25:13 +08:00
parent da42108732
commit 1d4b0236ac
3 changed files with 53 additions and 41 deletions
+1 -1
View File
@@ -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
+52
View File
@@ -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;
}
-40
View File
@@ -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;
}