From 0ffaa2e36f9635d8fa1874b5c5a21155b75e6507 Mon Sep 17 00:00:00 2001 From: Sergey Savenko Date: Tue, 10 Feb 2015 13:55:07 +0300 Subject: [PATCH] AbstractPopup: defer final runnable execution myFinalRunnable can contain logic which removes focus listeners (e.g. the runnable can invoke change color scheme action). In case we're called from a focus listener, which is called from java.awt.AWTEventMulticaster, removal of focus listeners will not have effect as the focus listeners list is copied on each modification. So focus listeners which have already been removed, will get invoked. Hence, we defer the final runnable execution. --- .../platform-impl/src/com/intellij/ui/popup/AbstractPopup.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 c5e94cbf32d3..99a8739a63ba 100644 --- a/platform/platform-impl/src/com/intellij/ui/popup/AbstractPopup.java +++ b/platform/platform-impl/src/com/intellij/ui/popup/AbstractPopup.java @@ -1348,9 +1348,10 @@ public class AbstractPopup implements JBPopup { Runnable runFinal = new Runnable() { @Override public void run() { + //noinspection SSBasedInspection + SwingUtilities.invokeLater(myFinalRunnable); //noinspection SSBasedInspection SwingUtilities.invokeLater(typeAheadDone.createSetDoneRunnable()); - myFinalRunnable.run(); myFinalRunnable = null; } };