Mercurial > minori
diff 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 |
line wrap: on
line diff
--- a/dep/animone/src/a11y/win32.cc Wed Jun 19 23:21:19 2024 -0400 +++ b/dep/animone/src/a11y/win32.cc Thu Jun 20 03:03:05 2024 -0400 @@ -1,12 +1,14 @@ #include <functional> #include <string> #include <vector> +#include <memory> #include <windows.h> #include <uiautomation.h> #include "animone/a11y.h" #include "animone/a11y/win32.h" +#include "animone/util/win32.h" namespace animone::internal::win32 { @@ -25,9 +27,9 @@ template <typename T> struct ComInterfaceDeleter { - static_assert(std::is_base_of<IUnknown, T>::value, "Invalid COM interface"); - using pointer = T*; - void operator()(pointer p) const { if (p) p->Release(); } + static_assert(std::is_base_of<IUnknown, T>::value, "Invalid COM interface"); + using pointer = T*; + void operator()(pointer p) const { if (p) p->Release(); } }; template <typename T> @@ -234,7 +236,7 @@ if (!InitializeUIAutomation()) return false; - ComInterface<Element> parent(GetElementFromHandle(hwnd)); + ComInterface<Element> parent(GetElementFromHandle(reinterpret_cast<HWND>(window.id.win32))); if (!parent) return false;