Hi Martin, PS: could you tell me what lines to change to discard non sequenced events >> in your patch ? I will then try it >> > > Instead of "if (ev.getID() == ID) { ... } return FilterAction.ACCEPT;", do: > > "if (ev.getID() == ID) { ... } else if (ev.getID() == SentEvent.ID) { > return FilterAction.ACCEPT; } return FilterAction.REJECT;" > > SequencedEvent and SentEvent events accepted, others rejected. >
I modified your patch with: private static final class SequencedEventsFilter implements EventFilter { private final SequencedEvent currentSequencedEvent; private SequencedEventsFilter(SequencedEvent currentSequencedEvent) { this.currentSequencedEvent = currentSequencedEvent; } @Override public FilterAction acceptEvent(AWTEvent ev) { if (ev.getID() == ID) { // Move forward dispatching only if the event is previous // in SequencedEvent.list. Otherwise, hold it for reposting later. synchronized (SequencedEvent.class) { Iterator<SequencedEvent> it = list.iterator(); while (it.hasNext()) { SequencedEvent iev = it.next(); if (iev.equals(currentSequencedEvent)) { break; } else if (iev.equals(ev)) { return FilterAction.ACCEPT; } } } currentSequencedEvent.pendingEvents.add(ev); return FilterAction.REJECT; * } else if (ev.getID() == SentEvent.ID) { return FilterAction.ACCEPT; } return FilterAction.REJECT;* } } The new Test passed (400: OK) but I agree the GUI is not correctly repainted (button labels are more or less never refreshed). I will try diagnosing which events are discarded... Laurent