diff --git a/platform/platform-impl/src/com/intellij/ui/popup/AbstractPopup.java b/platform/platform-impl/src/com/intellij/ui/popup/AbstractPopup.java index 6063d5d648c8..2bc0e2b5a3ca 100644 --- a/platform/platform-impl/src/com/intellij/ui/popup/AbstractPopup.java +++ b/platform/platform-impl/src/com/intellij/ui/popup/AbstractPopup.java @@ -144,6 +144,7 @@ public class AbstractPopup implements JBPopup { private boolean myNativePopup; private boolean myMayBeParent; private JLabel myAdCmp; + private AbstractPopup.SpeedSearchKeyListener mySearchKeyListener; AbstractPopup() { @@ -786,19 +787,8 @@ public class AbstractPopup implements JBPopup { }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_IN_FOCUSED_WINDOW); - myContent.addKeyListener(new KeyListener() { - public void keyTyped(final KeyEvent e) { - mySpeedSearch.process(e); - } - - public void keyPressed(final KeyEvent e) { - mySpeedSearch.process(e); - } - - public void keyReleased(final KeyEvent e) { - mySpeedSearch.process(e); - } - }); + mySearchKeyListener = new SpeedSearchKeyListener(); + myContent.addKeyListener(mySearchKeyListener); if (myCancelOnMouseOutCallback != null || myCancelOnWindow) { myMouseOutCanceller = new Canceller(); @@ -975,8 +965,10 @@ public class AbstractPopup implements JBPopup { if (myContent != null) { myContent.removeAll(); + myContent.removeKeyListener(mySearchKeyListener); } myContent = null; + myPreferredFocusedComponent = null; myComponent = null; myFocusTrackback = null; myCallBack = null; @@ -1349,4 +1341,18 @@ public class AbstractPopup implements JBPopup { public void setOk(boolean ok) { myOk = ok; } + + private class SpeedSearchKeyListener implements KeyListener { + public void keyTyped(final KeyEvent e) { + mySpeedSearch.process(e); + } + + public void keyPressed(final KeyEvent e) { + mySpeedSearch.process(e); + } + + public void keyReleased(final KeyEvent e) { + mySpeedSearch.process(e); + } + } }