Mercurial > minori
view src/sys/osx/filesystem.cc @ 229:adc20fa321c1
theme: force Fusion style on platforms other than Win32 or OS X
I was reluctant to do this, but most of the other styles just
look like pure shite regardless of whether I force a stylesheet
on them or not. KDE's style is actually hilariously bad paired
with my stylesheet, so I've decided to also make the stylesheet
Windows-specific as well, because that's really the only platform
where it makes sense in the first place.
author | Paper <paper@paper.us.eu.org> |
---|---|
date | Wed, 10 Jan 2024 21:23:57 -0500 |
parents | c4ca035c565d |
children |
line wrap: on
line source
#include "sys/osx/filesystem.h" #include <CoreFoundation/CoreFoundation.h> #include <objc/runtime.h> #include <string> /* These constants are defined in Foundation but not * exposed to CoreFoundation users. */ static constexpr unsigned long NSApplicationSupportDirectory = 14; static constexpr unsigned long NSUserDomainMask = 1; extern "C" { CFArrayRef NSSearchPathForDirectoriesInDomains(unsigned long directory, unsigned long domainMask, BOOL expandTilde); } namespace osx { bool GetApplicationSupportDirectory(std::string& result) { // NSArray* strings = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, ON); const CFArrayRef strings = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, true); if (!strings) return false; // NSIndex index = [strings count]; const CFIndex count = CFArrayGetCount(strings); if (count < 1) { CFRelease(strings); return false; } // NSString* string = [strings objectAtIndex: 0]; const CFStringRef string = reinterpret_cast<CFStringRef>(CFArrayGetValueAtIndex(strings, 0)); if (!string) { CFRelease(strings); return false; } // result = [string UTF8String]; result.resize(CFStringGetMaximumSizeForEncoding(CFStringGetLength(string), kCFStringEncodingUTF8) + 1); if (!CFStringGetCString(string, &result.front(), result.length(), kCFStringEncodingUTF8)) { CFRelease(strings); return false; } result.resize(result.find_first_of('\0')); return true; } } // namespace osx