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?