Esme Povirk (@madewokherd) commented about dlls/uiautomationcore/uia_event.c:
+ + LIST_FOR_EACH_ENTRY_SAFE(sink_event, sink_event2, &sink_events, struct event_sink_event, event_sink_list_entry) + { + list_remove(&sink_event->event_sink_list_entry); + + if (sink_event->args->simple_args.EventId == event->event_id) + { + struct uia_elprov_event_data event_data = { sink_event->elprov, sink_event->args, TRUE }; + + hr = uia_raise_elprov_event_callback(event, (void *)&event_data); + if (FAILED(hr)) + WARN("uia_raise_elprov_event_callback failed with hr %#lx\n", hr); + + UiaNodeRelease(event_data.node); + SafeArrayDestroy(event_data.rt_id); + } This doesn't make a lot of sense to me. Why does the IProxyProviderWinEventSink interface accept an event id if the "wrong" one is just going to be ignored?
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/3956#note_46846