From: Esme Povirk esme@codeweavers.com
--- dlls/comctl32/syslink.c | 21 +++++++++++++++++++-- dlls/comctl32/tests/syslink.c | 10 +++++----- 2 files changed, 24 insertions(+), 7 deletions(-)
diff --git a/dlls/comctl32/syslink.c b/dlls/comctl32/syslink.c index d0bfaf164fc..0880c0da527 100644 --- a/dlls/comctl32/syslink.c +++ b/dlls/comctl32/syslink.c @@ -529,10 +529,27 @@ static HRESULT WINAPI Accessible_accHitTest(IAccessible *iface, LONG left, LONG return E_NOTIMPL; }
+static LRESULT SYSLINK_SendParentNotify (const SYSLINK_INFO *infoPtr, UINT code, const DOC_ITEM *Link, int iLink); + static HRESULT WINAPI Accessible_accDoDefaultAction(IAccessible *iface, VARIANT childid) { - FIXME("%p\n", iface); - return E_NOTIMPL; + SYSLINK_ACC *This = impl_from_IAccessible(iface); + HRESULT hr; + DOC_ITEM* item; + + TRACE("%p, %s\n", iface, debugstr_variant(&childid)); + + hr = Accessible_FindChild(This, childid, &item); + if (FAILED(hr)) + return hr; + + if (!item) + /* Not supported for whole control. */ + return E_INVALIDARG; + + SYSLINK_SendParentNotify(This->infoPtr, NM_CLICK, item, V_I4(&childid) - 1); + + return S_OK; }
static HRESULT WINAPI Accessible_put_accName(IAccessible *iface, VARIANT childid, BSTR name) diff --git a/dlls/comctl32/tests/syslink.c b/dlls/comctl32/tests/syslink.c index fa906e9c100..cf9d47c87e7 100644 --- a/dlls/comctl32/tests/syslink.c +++ b/dlls/comctl32/tests/syslink.c @@ -351,7 +351,7 @@ static void test_msaa(void) ok(!name, "unexpected default action %s\n", debugstr_w(name));
hr = IAccessible_accDoDefaultAction(acc, varChild); - todo_wine ok(hr == E_INVALIDARG, "accDoDefaultAction should fail, hr=%lx\n", hr); + ok(hr == E_INVALIDARG, "accDoDefaultAction should fail, hr=%lx\n", hr);
hr = IAccessible_accLocation(acc, &left, &top, &width, &height, varChild); ok(hr == S_OK, "accLocation failed, hr=%lx\n", hr); @@ -403,9 +403,9 @@ static void test_msaa(void)
g_link_id = -1; hr = IAccessible_accDoDefaultAction(acc, varChild); - todo_wine ok(hr == S_OK, "accDoDefaultAction failed, hr=%lx\n", hr); + ok(hr == S_OK, "accDoDefaultAction failed, hr=%lx\n", hr); wait_link_click(500); - todo_wine ok(g_link_id == 0, "Got unexpected link id %d.\n", g_link_id); + ok(g_link_id == 0, "Got unexpected link id %d.\n", g_link_id);
hr = IAccessible_accLocation(acc, &left, &top, &width, &height, varChild); ok(hr == S_OK, "accLocation failed, hr=%lx\n", hr); @@ -453,9 +453,9 @@ static void test_msaa(void)
g_link_id = -1; hr = IAccessible_accDoDefaultAction(acc, varChild); - todo_wine ok(hr == S_OK, "accDoDefaultAction failed, hr=%lx\n", hr); + ok(hr == S_OK, "accDoDefaultAction failed, hr=%lx\n", hr); wait_link_click(500); - todo_wine ok(g_link_id == 1, "Got unexpected link id %d.\n", g_link_id); + ok(g_link_id == 1, "Got unexpected link id %d.\n", g_link_id);
hr = IAccessible_accLocation(acc, &left, &top, &width, &height, varChild); ok(hr == S_OK, "accLocation failed, hr=%lx\n", hr);