Module: wine Branch: master Commit: b704a6f336ebf8ae28d4b4424f718a5d87ebe00a URL: https://source.winehq.org/git/wine.git/?a=commit;h=b704a6f336ebf8ae28d4b4424...
Author: Piotr Caban piotr@codeweavers.com Date: Thu Nov 25 18:54:58 2021 +0100
oleacc: Add partial Window_accHitTest implementation.
Signed-off-by: Piotr Caban piotr@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/oleacc/window.c | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-)
diff --git a/dlls/oleacc/window.c b/dlls/oleacc/window.c index aa433d624cf..87f9956b49e 100644 --- a/dlls/oleacc/window.c +++ b/dlls/oleacc/window.c @@ -247,11 +247,38 @@ static HRESULT WINAPI Window_accNavigate(IAccessible *iface, return E_NOTIMPL; }
-static HRESULT WINAPI Window_accHitTest(IAccessible *iface, - LONG xLeft, LONG yTop, VARIANT *pvarID) +static HRESULT WINAPI Window_accHitTest(IAccessible *iface, LONG x, LONG y, VARIANT *v) { Window *This = impl_from_Window(iface); - FIXME("(%p)->(%d %d %p)\n", This, xLeft, yTop, pvarID); + IDispatch *disp; + POINT pt; + HRESULT hr; + RECT rect; + + TRACE("(%p)->(%d %d %p)\n", This, x, y, v); + + V_VT(v) = VT_EMPTY; + if (!GetClientRect(This->hwnd, &rect)) + return E_FAIL; + if (!ClientToScreen(This->hwnd, (POINT*)&rect) || + !ClientToScreen(This->hwnd, &((POINT*)&rect)[1])) + return E_FAIL; + pt.x = x; + pt.y = y; + if (PtInRect(&rect, pt)) + { + hr = AccessibleObjectFromWindow(This->hwnd, OBJID_CLIENT, &IID_IDispatch, (void**)&disp); + if (FAILED(hr)) + return hr; + if (!disp) + return E_FAIL; + + V_VT(v) = VT_DISPATCH; + V_DISPATCH(v) = disp; + return S_OK; + } + + FIXME("non-client area not handled yet\n"); return E_NOTIMPL; }