Bug 531241 - ConsoleDropDownAction and OpenConsoleAction disposed on
perspective reset
Change-Id: I4c4d6f1741ee58e34977465226e127590dcc932c
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
diff --git a/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ConsoleDropDownAction.java b/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ConsoleDropDownAction.java
index 3d34f1a..f3b3d93 100644
--- a/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ConsoleDropDownAction.java
+++ b/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ConsoleDropDownAction.java
@@ -18,8 +18,13 @@
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.IMenuCreator;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.ToolItem;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.console.ConsolePlugin;
import org.eclipse.ui.console.IConsole;
@@ -44,12 +49,11 @@
}
public ConsoleDropDownAction(IConsoleView view) {
+ super(ConsoleMessages.ConsoleDropDownAction_0, AS_DROP_DOWN_MENU);
fView= view;
- setText(ConsoleMessages.ConsoleDropDownAction_0);
setToolTipText(ConsoleMessages.ConsoleDropDownAction_1);
setImageDescriptor(ConsolePluginImages.getImageDescriptor(IConsoleConstants.IMG_VIEW_CONSOLE));
PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IConsoleHelpContextIds.CONSOLE_DISPLAY_CONSOLE_ACTION);
- setMenuCreator(this);
ConsolePlugin.getDefault().getConsoleManager().addConsoleListener(this);
update();
}
@@ -132,6 +136,23 @@
}
@Override
+ public void runWithEvent(Event event) {
+ // Show menu on drop-down button, run action otherwise
+ if (event.detail == SWT.ARROW && event.widget instanceof ToolItem) {
+ ToolItem toolItem = (ToolItem) event.widget;
+ Control control = toolItem.getParent();
+ Menu menu = getMenu(control);
+
+ Rectangle bounds = toolItem.getBounds();
+ Point topLeft = new Point(bounds.x, bounds.y + bounds.height);
+ menu.setLocation(control.toDisplay(topLeft));
+ menu.setVisible(true);
+ } else {
+ run();
+ }
+ }
+
+ @Override
public void consolesAdded(IConsole[] consoles) {
UIJob job = new UIJob(ConsoleMessages.UpdatingConsoleState) {
@Override
diff --git a/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ConsoleView.java b/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ConsoleView.java
index 02fac97..ff7c5f1 100644
--- a/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ConsoleView.java
+++ b/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ConsoleView.java
@@ -359,6 +359,10 @@
fDisplayConsoleAction.dispose();
fDisplayConsoleAction = null;
}
+ if (fOpenConsoleAction != null) {
+ fOpenConsoleAction.dispose();
+ fOpenConsoleAction = null;
+ }
}
/**
diff --git a/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/OpenConsoleAction.java b/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/OpenConsoleAction.java
index 0927e14..ad9a8fb 100644
--- a/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/OpenConsoleAction.java
+++ b/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/OpenConsoleAction.java
@@ -39,12 +39,11 @@
private Menu fMenu;
public OpenConsoleAction() {
+ super(ConsoleMessages.OpenConsoleAction_0, AS_DROP_DOWN_MENU);
fFactoryExtensions = getSortedFactories();
- setText(ConsoleMessages.OpenConsoleAction_0);
setToolTipText(ConsoleMessages.OpenConsoleAction_1);
setImageDescriptor(ConsolePluginImages.getImageDescriptor(IInternalConsoleConstants.IMG_ELCL_NEW_CON));
setDisabledImageDescriptor(ConsolePluginImages.getImageDescriptor(IInternalConsoleConstants.IMG_DLCL_NEW_CON));
- setMenuCreator(this);
PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IConsoleHelpContextIds.CONSOLE_OPEN_CONSOLE_ACTION);
}
@@ -71,6 +70,10 @@
@Override
public void dispose() {
fFactoryExtensions = null;
+ if (fMenu != null) {
+ fMenu.dispose();
+ fMenu = null;
+ }
}
@Override