diff options
author | Anton Leherbauer | 2015-02-24 16:02:09 +0000 |
---|---|---|
committer | Anton Leherbauer | 2015-02-24 16:02:09 +0000 |
commit | 9c1200cf4173a604a6118a4a6bd4754347a56a88 (patch) | |
tree | 2cba74751068c5ec743250e9b4492b53f1556024 | |
parent | a6ebf61332729435fd1cf42bbdbdfce147a0ac34 (diff) | |
download | org.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.
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; } |