diff --git a/platform/platform-impl/src/com/intellij/openapi/keymap/impl/IdeKeyEventDispatcher.java b/platform/platform-impl/src/com/intellij/openapi/keymap/impl/IdeKeyEventDispatcher.java index 1c9f1972473e..db85cb8683be 100644 --- a/platform/platform-impl/src/com/intellij/openapi/keymap/impl/IdeKeyEventDispatcher.java +++ b/platform/platform-impl/src/com/intellij/openapi/keymap/impl/IdeKeyEventDispatcher.java @@ -183,18 +183,28 @@ public final class IdeKeyEventDispatcher implements Disposable { myContext.setModalContext(isModalContext); myContext.setInputEvent(e); - if (getState() == KeyState.STATE_INIT) { - return inInitState(); - } else if (getState() == KeyState.STATE_PROCESSED) { - return inProcessedState(); - } else if (getState() == KeyState.STATE_WAIT_FOR_SECOND_KEYSTROKE) { - return inWaitForSecondStrokeState(); - } else if (getState() == KeyState.STATE_SECOND_STROKE_IN_PROGRESS) { - return inSecondStrokeInProgressState(); - } else if (getState() == KeyState.STATE_KEY_GESTURE_PROCESSOR) { - return myKeyGestureProcessor.process(); - } else { - throw new IllegalStateException("state = " + getState()); + try { + if (getState() == KeyState.STATE_INIT) { + return inInitState(); + } + else if (getState() == KeyState.STATE_PROCESSED) { + return inProcessedState(); + } + else if (getState() == KeyState.STATE_WAIT_FOR_SECOND_KEYSTROKE) { + return inWaitForSecondStrokeState(); + } + else if (getState() == KeyState.STATE_SECOND_STROKE_IN_PROGRESS) { + return inSecondStrokeInProgressState(); + } + else if (getState() == KeyState.STATE_KEY_GESTURE_PROCESSOR) { + return myKeyGestureProcessor.process(); + } + else { + throw new IllegalStateException("state = " + getState()); + } + } + finally { + myContext.clear(); } } diff --git a/platform/platform-impl/src/com/intellij/openapi/keymap/impl/KeyProcessorContext.java b/platform/platform-impl/src/com/intellij/openapi/keymap/impl/KeyProcessorContext.java index 956ed343e116..3c0fd028fd08 100644 --- a/platform/platform-impl/src/com/intellij/openapi/keymap/impl/KeyProcessorContext.java +++ b/platform/platform-impl/src/com/intellij/openapi/keymap/impl/KeyProcessorContext.java @@ -88,4 +88,12 @@ public class KeyProcessorContext { public KeyEvent getInputEvent() { return myInputEvent; } + + public void clear() { + myInputEvent = null; + myActions.clear(); + myFocusOwner = null; + myDataContext = null; + myFoundComponent = null; + } } \ No newline at end of file