Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton Leherbauer2015-02-24 16:02:09 +0000
committerAnton Leherbauer2015-02-24 16:02:09 +0000
commit9c1200cf4173a604a6118a4a6bd4754347a56a88 (patch)
tree2cba74751068c5ec743250e9b4492b53f1556024
parenta6ebf61332729435fd1cf42bbdbdfce147a0ac34 (diff)
downloadorg.eclipse.tcf-9c1200cf4173a604a6118a4a6bd4754347a56a88.tar.gz
org.eclipse.tcf-9c1200cf4173a604a6118a4a6bd4754347a56a88.tar.xz
org.eclipse.tcf-9c1200cf4173a604a6118a4a6bd4754347a56a88.zip
Terminals: Keep context menu from being disposed if terminal is disposed
Related to Bug 458625.
-rw-r--r--terminals/plugins/org.eclipse.tcf.te.ui.terminals/src/org/eclipse/tcf/te/ui/terminals/tabs/TabDisposeListener.java7
-rw-r--r--terminals/plugins/org.eclipse.tcf.te.ui.terminals/src/org/eclipse/tcf/te/ui/terminals/tabs/TabFolderManager.java3
-rw-r--r--terminals/plugins/org.eclipse.tcf.te.ui.terminals/src/org/eclipse/tcf/te/ui/terminals/tabs/TabFolderMenuHandler.java4
3 files changed, 13 insertions, 1 deletions
diff --git a/terminals/plugins/org.eclipse.tcf.te.ui.terminals/src/org/eclipse/tcf/te/ui/terminals/tabs/TabDisposeListener.java b/terminals/plugins/org.eclipse.tcf.te.ui.terminals/src/org/eclipse/tcf/te/ui/terminals/tabs/TabDisposeListener.java
index 6c65825d9..c4f08d92b 100644
--- a/terminals/plugins/org.eclipse.tcf.te.ui.terminals/src/org/eclipse/tcf/te/ui/terminals/tabs/TabDisposeListener.java
+++ b/terminals/plugins/org.eclipse.tcf.te.ui.terminals/src/org/eclipse/tcf/te/ui/terminals/tabs/TabDisposeListener.java
@@ -54,7 +54,12 @@ public class TabDisposeListener implements DisposeListener {
if (e.getSource() instanceof CTabItem) {
// Get the terminal control (if any) from the tab item
Object candidate = ((CTabItem)e.getSource()).getData();
- if (candidate instanceof ITerminalViewControl) ((ITerminalViewControl)candidate).disposeTerminal();
+ if (candidate instanceof ITerminalViewControl) {
+ ITerminalViewControl terminal = (ITerminalViewControl)candidate;
+ // Keep the context menu from being disposed
+ terminal.getControl().setMenu(null);
+ terminal.disposeTerminal();
+ }
// Dispose the command input field handler
parentTabFolderManager.disposeTabCommandFieldHandler((CTabItem)e.getSource());
// Dispose the tab item control
diff --git a/terminals/plugins/org.eclipse.tcf.te.ui.terminals/src/org/eclipse/tcf/te/ui/terminals/tabs/TabFolderManager.java b/terminals/plugins/org.eclipse.tcf.te.ui.terminals/src/org/eclipse/tcf/te/ui/terminals/tabs/TabFolderManager.java
index 24df7ee3e..42b05528b 100644
--- a/terminals/plugins/org.eclipse.tcf.te.ui.terminals/src/org/eclipse/tcf/te/ui/terminals/tabs/TabFolderManager.java
+++ b/terminals/plugins/org.eclipse.tcf.te.ui.terminals/src/org/eclipse/tcf/te/ui/terminals/tabs/TabFolderManager.java
@@ -378,6 +378,9 @@ public class TabFolderManager extends PlatformObject implements ISelectionProvid
// Remember terminal state
TerminalState oldState = terminal.getState();
+ // Keep the context menu from being disposed
+ terminal.getControl().setMenu(null);
+
// change the "parent".
Assert.isTrue(terminal instanceof ITerminalControl);
((ITerminalControl)terminal).setupTerminal(composite);
diff --git a/terminals/plugins/org.eclipse.tcf.te.ui.terminals/src/org/eclipse/tcf/te/ui/terminals/tabs/TabFolderMenuHandler.java b/terminals/plugins/org.eclipse.tcf.te.ui.terminals/src/org/eclipse/tcf/te/ui/terminals/tabs/TabFolderMenuHandler.java
index 3a3e745c0..f04d9a3d1 100644
--- a/terminals/plugins/org.eclipse.tcf.te.ui.terminals/src/org/eclipse/tcf/te/ui/terminals/tabs/TabFolderMenuHandler.java
+++ b/terminals/plugins/org.eclipse.tcf.te.ui.terminals/src/org/eclipse/tcf/te/ui/terminals/tabs/TabFolderMenuHandler.java
@@ -371,6 +371,10 @@ public class TabFolderMenuHandler extends PlatformObject {
if (MenuManager.class.isAssignableFrom(adapter)) {
return contextMenuManager;
} else if (Menu.class.isAssignableFrom(adapter)) {
+ if (contextMenu != null && contextMenu.isDisposed()) {
+ // menu got disposed (should not happen)
+ contextMenu = contextMenuManager.createContextMenu(getTabFolder());
+ }
return contextMenu;
}

Back to the top