summaryrefslogtreecommitdiffstats
path: root/src/detection/wallpaper/wallpaper_apple.m
diff options
context:
space:
mode:
authorsumuel <samuel@yakubos.org>2026-08-17 20:44:55 +0000
committersumuel <samuel@yakubos.org>2026-08-17 20:44:55 +0000
commit76424950e373d3b04ac3dd13019151bfba3e8423 (patch)
tree4c3cfdbda039e592b9186be3e28f8d7cfd439e8a /src/detection/wallpaper/wallpaper_apple.m
Add the files
Diffstat (limited to 'src/detection/wallpaper/wallpaper_apple.m')
-rw-r--r--src/detection/wallpaper/wallpaper_apple.m72
1 files changed, 72 insertions, 0 deletions
diff --git a/src/detection/wallpaper/wallpaper_apple.m b/src/detection/wallpaper/wallpaper_apple.m
new file mode 100644
index 0000000..800aee9
--- /dev/null
+++ b/src/detection/wallpaper/wallpaper_apple.m
@@ -0,0 +1,72 @@
+#include "wallpaper.h"
+#include "common/settings.h"
+#include "common/apple/osascript.h"
+
+#import <Foundation/Foundation.h>
+
+const char* ffDetectWallpaper(FFstrbuf* result)
+{
+ {
+ // For Sonoma
+ // https://github.com/JohnCoates/Aerial/issues/1332
+ NSError* error;
+ NSString* fileName = [NSString stringWithFormat:@"file://%s/Library/Application Support/com.apple.wallpaper/Store/Index.plist", instance.state.platform.homeDir.chars];
+ NSDictionary* dict = [NSDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:fileName]
+ error:&error];
+ if (!error)
+ {
+ NSArray* choices = [dict valueForKeyPath:@"SystemDefault.Desktop.Content.Choices"];
+ if (choices.count > 0)
+ {
+ NSDictionary* choice = choices[0];
+ NSArray* files = choice[@"Files"];
+ if (files.count > 0)
+ {
+ NSString* file = files[0][@"relative"];
+ ffStrbufAppendS(result, [NSURL URLWithString:file].path.UTF8String);
+ }
+ else
+ {
+ NSString* provider = choice[@"Provider"];
+ NSString* builtinPrefix = @"com.apple.wallpaper.choice.";
+ if ([provider hasPrefix:builtinPrefix])
+ provider = [provider substringFromIndex:builtinPrefix.length];
+ if ([provider isEqualToString:@"sonoma"])
+ ffStrbufSetStatic(result, "macOS Sonoma");
+ else if ([provider isEqualToString:@"aerials"]) // Most builtin aerial wallpapers are private
+ ffStrbufSetStatic(result, "Built-in aerial photography");
+ else
+ ffStrbufAppendF(result, "Built-in %s wallpaper", provider.UTF8String);
+ }
+ }
+ if (result->length > 0)
+ return NULL;
+ }
+ }
+
+ #ifdef FF_HAVE_SQLITE3
+
+ {
+ // For Ventura
+ // https://stackoverflow.com/questions/301215/getting-desktop-background-on-mac
+ FF_STRBUF_AUTO_DESTROY path = ffStrbufCreateCopy(&instance.state.platform.homeDir);
+ ffStrbufAppendS(&path, "Library/Application Support/Dock/desktoppicture.db");
+ if (ffSettingsGetSQLite3String(path.chars,
+ "SELECT value\n"
+ "FROM preferences\n"
+ "JOIN data ON preferences.data_id=data.ROWID\n"
+ "JOIN pictures ON preferences.picture_id=pictures.ROWID\n"
+ "JOIN displays ON pictures.display_id=displays.ROWID\n"
+ "JOIN spaces ON pictures.space_id=spaces.ROWID\n"
+ "WHERE display_id=1 AND space_id=1 AND key=1", result)
+ )
+ return NULL;
+ }
+
+ #endif
+
+ if (ffOsascript("tell application \"Finder\" to get POSIX path of (get desktop picture as alias)", result))
+ return NULL;
+
+ return "All detection methods failed";
+}