From 566659d1795490ff97d543324a53abe85af66c16 Mon Sep 17 00:00:00 2001 From: Kirill Kalishev Date: Fri, 15 Jan 2010 15:54:35 +0300 Subject: [PATCH] popups: lost data context because of invaokeLater + made setFinalRunnable() public --- .../execution/actions/ChooseRunConfigurationAction.java | 8 ++++++-- .../src/com/intellij/openapi/ui/popup/JBPopup.java | 2 ++ .../src/com/intellij/openapi/ui/popup/PopupChooserBuilder.java | 8 +++----- .../platform-impl/src/com/intellij/ui/popup/AbstractPopup.java | 10 +++++++++- .../platform-impl/src/com/intellij/ui/popup/WizardPopup.java | 4 ++-- 5 files changed, 22 insertions(+), 10 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/execution/actions/ChooseRunConfigurationAction.java b/platform/lang-impl/src/com/intellij/execution/actions/ChooseRunConfigurationAction.java index 93db0c5722..4c9f462466 100644 --- a/platform/lang-impl/src/com/intellij/execution/actions/ChooseRunConfigurationAction.java +++ b/platform/lang-impl/src/com/intellij/execution/actions/ChooseRunConfigurationAction.java @@ -251,10 +251,14 @@ public class ChooseRunConfigurationAction extends AnAction { private static Action createNumberAction(final int number, final ListPopupImpl listPopup, final Executor executor) { return new AbstractAction() { public void actionPerformed(ActionEvent e) { - for (Object item : listPopup.getListStep().getValues()) { + for (final Object item : listPopup.getListStep().getValues()) { if (item instanceof ItemWrapper && ((ItemWrapper)item).getMnemonic() == number) { + listPopup.setFinalRunnable(new Runnable() { + public void run() { + execute((ItemWrapper)item, executor); + } + }); listPopup.cancel(); - execute((ItemWrapper)item, executor); } } } diff --git a/platform/platform-api/src/com/intellij/openapi/ui/popup/JBPopup.java b/platform/platform-api/src/com/intellij/openapi/ui/popup/JBPopup.java index 77ac8cecc3..b28b1006f7 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/popup/JBPopup.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/popup/JBPopup.java @@ -168,4 +168,6 @@ public interface JBPopup extends Disposable, LightweightWindow { Component getOwner(); void setMinimumSize(Dimension size); + + void setFinalRunnable(@Nullable Runnable runnable); } diff --git a/platform/platform-api/src/com/intellij/openapi/ui/popup/PopupChooserBuilder.java b/platform/platform-api/src/com/intellij/openapi/ui/popup/PopupChooserBuilder.java index 0e8c6767b7..e39dc903ed 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/popup/PopupChooserBuilder.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/popup/PopupChooserBuilder.java @@ -279,13 +279,11 @@ public class PopupChooserBuilder { } private void closePopup(boolean shouldPerformAction, MouseEvent e) { - myPopup.cancel(e); - if (shouldPerformAction) { - if (myItemChoosenRunnable != null) { - myItemChoosenRunnable.run(); - } + myPopup.setFinalRunnable(myItemChoosenRunnable); } + + myPopup.cancel(e); } @NotNull 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 d4e0994797..05a275f597 100644 --- a/platform/platform-impl/src/com/intellij/ui/popup/AbstractPopup.java +++ b/platform/platform-impl/src/com/intellij/ui/popup/AbstractPopup.java @@ -115,7 +115,7 @@ public class AbstractPopup implements JBPopup { protected InputEvent myDisposeEvent; - protected Runnable myFinalRunnable; + private Runnable myFinalRunnable; protected final SpeedSearch mySpeedSearch = new SpeedSearch() { boolean searchFieldShown = false; @@ -1222,4 +1222,12 @@ public class AbstractPopup implements JBPopup { public void setMinimumSize(Dimension size) { myMinSize = size; } + + public Runnable getFinalRunnable() { + return myFinalRunnable; + } + + public void setFinalRunnable(Runnable finalRunnable) { + myFinalRunnable = finalRunnable; + } } diff --git a/platform/platform-impl/src/com/intellij/ui/popup/WizardPopup.java b/platform/platform-impl/src/com/intellij/ui/popup/WizardPopup.java index b3647a9986..fdb9f6763b 100644 --- a/platform/platform-impl/src/com/intellij/ui/popup/WizardPopup.java +++ b/platform/platform-impl/src/com/intellij/ui/popup/WizardPopup.java @@ -409,9 +409,9 @@ public abstract class WizardPopup extends AbstractPopup implements ActionListene } } - protected final void setFinalRunnable(Runnable runnable) { + public final void setFinalRunnable(Runnable runnable) { if (getParent() == null) { - myFinalRunnable = runnable; + super.setFinalRunnable(runnable); } else { getParent().setFinalRunnable(runnable); } -- 2.11.4.GIT