Mercurial > libanimone
comparison include/animone/util/osx.h @ 4:cce3a81b03bf
dep/animone: make osx code a bit less hacky
it would be nice if macos actually provided a real API for getting
window titles (outside of the accessibility api). the accessibility
API is a real mess to work with; the user has to give permission to
access it under newer versions.
author | Paper <paper@paper.us.eu.org> |
---|---|
date | Fri, 12 Apr 2024 05:21:45 -0400 |
parents | a76fa32bdc92 |
children |
comparison
equal
deleted
inserted
replaced
2:97ea6a3e1954 | 4:cce3a81b03bf |
---|---|
2 #define ANIMONE_ANIMONE_UTIL_OSX_H_ | 2 #define ANIMONE_ANIMONE_UTIL_OSX_H_ |
3 | 3 |
4 #include "animone/types.h" | 4 #include "animone/types.h" |
5 #include <cstdint> | 5 #include <cstdint> |
6 #include <string> | 6 #include <string> |
7 #include <memory> | |
7 | 8 |
8 #include <CoreFoundation/CoreFoundation.h> | 9 #include <CoreFoundation/CoreFoundation.h> |
9 | 10 |
10 namespace animone::internal::osx::util { | 11 namespace animone::internal::osx::util { |
11 | |
12 template<typename T> | |
13 bool GetCFNumber(CFNumberRef num, T& result) { | |
14 if (!num) | |
15 return false; | |
16 | |
17 int64_t res; | |
18 if (!CFNumberGetValue(num, static_cast<CFNumberType>(4), &res)) | |
19 return false; | |
20 | |
21 result = static_cast<T>(res); | |
22 return true; | |
23 } | |
24 | |
25 template<typename T> | |
26 struct CFDeconstructor { | |
27 using pointer = T; | |
28 void operator()(pointer t) const { ::CFRelease(t); }; | |
29 }; | |
30 | |
31 template<typename T> | |
32 using CFPtr = vector<T, CFDecontructor<T>>; // type-id is vector<T, Alloc<T>> | |
33 | |
34 bool StringFromCFString(CFStringRef string, std::string& result); | |
35 | 12 |
36 bool GetProcessName(pid_t pid, std::string& result); | 13 bool GetProcessName(pid_t pid, std::string& result); |
37 | 14 |
38 } // namespace animone::internal::osx::util | 15 } // namespace animone::internal::osx::util |
39 | 16 |