Mercurial > minori
comparison dep/animone/src/a11y/win32.cc @ 342:adb79bdde329
dep/animone: fix tons of issues
for example, the window ID stuff was just... completely wrong. since we're
supporting multiple different window systems, it *has* to be a union rather
than just a single integer type. HWND is also not a DWORD, it's a pointer(!),
so now it's stored as a std::uintptr_t.
(this probably breaks things)
| author | Paper <paper@paper.us.eu.org> |
|---|---|
| date | Thu, 20 Jun 2024 03:03:05 -0400 |
| parents | 052ec053ee37 |
| children | 1faa72660932 |
comparison
equal
deleted
inserted
replaced
| 341:052ec053ee37 | 342:adb79bdde329 |
|---|---|
| 1 #include <functional> | 1 #include <functional> |
| 2 #include <string> | 2 #include <string> |
| 3 #include <vector> | 3 #include <vector> |
| 4 #include <memory> | |
| 4 | 5 |
| 5 #include <windows.h> | 6 #include <windows.h> |
| 6 #include <uiautomation.h> | 7 #include <uiautomation.h> |
| 7 | 8 |
| 8 #include "animone/a11y.h" | 9 #include "animone/a11y.h" |
| 9 #include "animone/a11y/win32.h" | 10 #include "animone/a11y/win32.h" |
| 11 #include "animone/util/win32.h" | |
| 10 | 12 |
| 11 namespace animone::internal::win32 { | 13 namespace animone::internal::win32 { |
| 12 | 14 |
| 13 // Windows Accessibility API reference: | 15 // Windows Accessibility API reference: |
| 14 // https://msdn.microsoft.com/en-us/library/windows/desktop/ff486375.aspx | 16 // https://msdn.microsoft.com/en-us/library/windows/desktop/ff486375.aspx |
| 23 | 25 |
| 24 /* ------------------------------------------------------------------- */ | 26 /* ------------------------------------------------------------------- */ |
| 25 | 27 |
| 26 template <typename T> | 28 template <typename T> |
| 27 struct ComInterfaceDeleter { | 29 struct ComInterfaceDeleter { |
| 28 static_assert(std::is_base_of<IUnknown, T>::value, "Invalid COM interface"); | 30 static_assert(std::is_base_of<IUnknown, T>::value, "Invalid COM interface"); |
| 29 using pointer = T*; | 31 using pointer = T*; |
| 30 void operator()(pointer p) const { if (p) p->Release(); } | 32 void operator()(pointer p) const { if (p) p->Release(); } |
| 31 }; | 33 }; |
| 32 | 34 |
| 33 template <typename T> | 35 template <typename T> |
| 34 using ComInterface = std::unique_ptr<T, ComInterfaceDeleter<T>>; | 36 using ComInterface = std::unique_ptr<T, ComInterfaceDeleter<T>>; |
| 35 | 37 |
| 232 return false; | 234 return false; |
| 233 | 235 |
| 234 if (!InitializeUIAutomation()) | 236 if (!InitializeUIAutomation()) |
| 235 return false; | 237 return false; |
| 236 | 238 |
| 237 ComInterface<Element> parent(GetElementFromHandle(hwnd)); | 239 ComInterface<Element> parent(GetElementFromHandle(reinterpret_cast<HWND>(window.id.win32))); |
| 238 if (!parent) | 240 if (!parent) |
| 239 return false; | 241 return false; |
| 240 | 242 |
| 241 const std::string title = ToUtf8String(GetElementName(*parent)); | 243 const std::string title = ToUtf8String(GetElementName(*parent)); |
| 242 web_browser_proc({WebBrowserInformationType::Title, title}); | 244 web_browser_proc({WebBrowserInformationType::Title, title}); |
