internal virtual void PumpOneEventForFilters(int id) { AWTEvent @event = null; bool eventOK = false; try { EventQueue eq = null; EventQueueDelegate.Delegate @delegate = null; do { // EventQueue may change during the dispatching eq = EventQueue; @delegate = EventQueueDelegate.Delegate; if (@delegate != null && id == ANY_EVENT) { @event = @delegate.getNextEvent(eq); } else { @event = (id == ANY_EVENT) ? eq.NextEvent : eq.GetNextEvent(id); } eventOK = true; lock (EventFilters) { for (int i = EventFilters.Count - 1; i >= 0; i--) { EventFilter f = EventFilters[i]; EventFilter_FilterAction accept = f.AcceptEvent(@event); if (accept == EventFilter_FilterAction.REJECT) { eventOK = false; break; } else if (accept == EventFilter_FilterAction.ACCEPT_IMMEDIATELY) { break; } } } eventOK = eventOK && SunDragSourceContextPeer.checkEvent(@event); if (!eventOK) { @event.Consume(); } } while (eventOK == false); if (EventLog.isLoggable(PlatformLogger.Level.FINEST)) { EventLog.finest("Dispatching: " + @event); } Object handle = null; if (@delegate != null) { handle = @delegate.beforeDispatch(@event); } eq.DispatchEvent(@event); if (@delegate != null) { @delegate.afterDispatch(@event, handle); } } catch (ThreadDeath death) { DoDispatch = false; throw death; } catch (InterruptedException) { DoDispatch = false; // AppContext.dispose() interrupts all // Threads in the AppContext } catch (Throwable e) { ProcessException(e); } }