From 05b4619d88dc63d745309d23b86615b249ef2c73 Mon Sep 17 00:00:00 2001 From: Connor McAdams Date: Thu, 13 Jul 2023 12:39:18 -0400 Subject: [PATCH] uiautomationcore: Handle EVENT_SYSTEM_ALERT in IProxyProviderWinEventHandler::RespondToWinEvent() for MSAA providers. Signed-off-by: Connor McAdams --- dlls/uiautomationcore/tests/uiautomation.c | 10 ++++---- dlls/uiautomationcore/uia_provider.c | 30 ++++++++++++++++++++-- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/dlls/uiautomationcore/tests/uiautomation.c b/dlls/uiautomationcore/tests/uiautomation.c index 7df2c9bb792..842525b78fa 100644 --- a/dlls/uiautomationcore/tests/uiautomation.c +++ b/dlls/uiautomationcore/tests/uiautomation.c @@ -3543,16 +3543,16 @@ static void test_uia_prov_from_acc_winevent_handler(HWND hwnd) SET_EXPECT(ProxyEventSink_AddAutomationEvent); hr = IProxyProviderWinEventHandler_RespondToWinEvent(handler, EVENT_SYSTEM_ALERT, hwnd, OBJID_CLIENT, CHILDID_SELF, &ProxyEventSink.IProxyProviderWinEventSink_iface); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine CHECK_CALLED(ProxyEventSink_AddAutomationEvent); - todo_wine ok(ProxyEventSink.event_id == UIA_SystemAlertEventId, "Unexpected event_id %d\n", ProxyEventSink.event_id); - todo_wine ok(ProxyEventSink.event_elprov == elprov, "Unexpected event_elprov %p\n", ProxyEventSink.event_elprov); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + CHECK_CALLED(ProxyEventSink_AddAutomationEvent); + ok(ProxyEventSink.event_id == UIA_SystemAlertEventId, "Unexpected event_id %d\n", ProxyEventSink.event_id); + ok(ProxyEventSink.event_elprov == elprov, "Unexpected event_elprov %p\n", ProxyEventSink.event_elprov); proxy_event_sink_clear(); /* EVENT_OBJECT_FOCUS is not handled. */ hr = IProxyProviderWinEventHandler_RespondToWinEvent(handler, EVENT_OBJECT_FOCUS, hwnd, OBJID_CLIENT, CHILDID_SELF, &ProxyEventSink.IProxyProviderWinEventSink_iface); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); /* EVENT_OBJECT_NAMECHANGE. */ SET_EXPECT(ProxyEventSink_AddAutomationPropertyChangedEvent); diff --git a/dlls/uiautomationcore/uia_provider.c b/dlls/uiautomationcore/uia_provider.c index 6360430f403..269ce63a2fd 100644 --- a/dlls/uiautomationcore/uia_provider.c +++ b/dlls/uiautomationcore/uia_provider.c @@ -1403,8 +1403,34 @@ static ULONG WINAPI msaa_winevent_handler_Release(IProxyProviderWinEventHandler static HRESULT WINAPI msaa_winevent_handler_RespondToWinEvent(IProxyProviderWinEventHandler *iface, DWORD event_id, HWND hwnd, LONG objid, LONG cid, IProxyProviderWinEventSink *event_sink) { - FIXME("%p, %ld, %p, %ld, %ld, %p: stub\n", iface, event_id, hwnd, objid, cid, event_sink); - return E_NOTIMPL; + struct msaa_provider *msaa_prov = impl_from_msaa_winevent_handler(iface); + HRESULT hr; + + TRACE("%p, %ld, %p, %ld, %ld, %p\n", iface, event_id, hwnd, objid, cid, event_sink); + + switch (event_id) + { + case EVENT_SYSTEM_ALERT: + hr = IProxyProviderWinEventSink_AddAutomationEvent(event_sink, &msaa_prov->IRawElementProviderSimple_iface, + UIA_SystemAlertEventId); + if (FAILED(hr)) + WARN("AddAutomationEvent failed with hr %#lx\n", hr); + break; + + case EVENT_OBJECT_REORDER: + case EVENT_OBJECT_SELECTION: + case EVENT_OBJECT_NAMECHANGE: + case EVENT_OBJECT_VALUECHANGE: + case EVENT_OBJECT_HELPCHANGE: + case EVENT_OBJECT_INVOKED: + FIXME("WinEvent %ld currently unimplemented\n", event_id); + return E_NOTIMPL; + + default: + break; + } + + return S_OK; } static const IProxyProviderWinEventHandlerVtbl msaa_winevent_handler_vtbl = {