From 7c218d95fb07cd2d9ac8100e58d6ae306d1d541e Mon Sep 17 00:00:00 2001 From: Max Weninger Date: Wed, 5 Aug 2015 16:33:44 +0200 Subject: [PATCH] The "copy" menu item of the "Terminal" view isn't available if the text is selected via "Select All" from the context menu Signed-off-by: Max Weninger --- .../META-INF/MANIFEST.MF | 2 +- .../terminal/control/ITerminalListener.java | 9 +++++++++ .../terminal/emulator/VT100TerminalControl.java | 4 +++- .../internal/terminal/textcanvas/TextCanvas.java | 5 +++++ .../terminal/view/ui/tabs/TabFolderManager.java | 16 ++++++++++++++++ .../view/ui/tabs/TabTerminalListener.java | 5 +++++ 6 files changed, 39 insertions(+), 2 deletions(-) diff --git a/plugins/org.eclipse.tm.terminal.control/META-INF/MANIFEST.MF b/plugins/org.eclipse.tm.terminal.control/META-INF/MANIFEST.MF index 5cadce5e1f4..c365978ebfd 100644 --- a/plugins/org.eclipse.tm.terminal.control/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.tm.terminal.control/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.tm.terminal.control; singleton:=true -Bundle-Version: 4.0.0.qualifier +Bundle-Version: 4.1.0.qualifier Bundle-Activator: org.eclipse.tm.internal.terminal.control.impl.TerminalPlugin Bundle-Vendor: %providerName Bundle-Localization: plugin diff --git a/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/ITerminalListener.java b/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/ITerminalListener.java index 9bbfcd73af9..00b55f357d4 100644 --- a/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/ITerminalListener.java +++ b/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/control/ITerminalListener.java @@ -30,4 +30,13 @@ public interface ITerminalListener { * @param title */ void setTerminalTitle(String title); + + /** + * selection has been changed internally e.g. select all + * clients might want to react on that + * NOTE: this does not include mouse selections + * those are handled in separate MouseListeners + * TODO should be unified + */ + void setTerminalSelectionChanged(); } diff --git a/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java b/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java index 74fefb04c14..eee84a4438d 100644 --- a/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java +++ b/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java @@ -305,6 +305,7 @@ public class VT100TerminalControl implements ITerminalControlForText, ITerminalC */ public void selectAll() { getCtlText().selectAll(); + fTerminalListener.setTerminalSelectionChanged(); } /* (non-Javadoc) @@ -330,8 +331,9 @@ public class VT100TerminalControl implements ITerminalControlForText, ITerminalC */ public void clearTerminal() { // The TerminalText object does all text manipulation. - getTerminalText().clearTerminal(); + getCtlText().clearSelection(); + fTerminalListener.setTerminalSelectionChanged(); } /* (non-Javadoc) diff --git a/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/TextCanvas.java b/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/TextCanvas.java index 6bd51f2bd25..ad36911627e 100644 --- a/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/TextCanvas.java +++ b/plugins/org.eclipse.tm.terminal.control/src/org/eclipse/tm/internal/terminal/textcanvas/TextCanvas.java @@ -343,6 +343,11 @@ public class TextCanvas extends GridCanvas { fCellCanvasModel.setSelection(0, fCellCanvasModel.getTerminalText().getHeight(), 0, fCellCanvasModel.getTerminalText().getWidth()); fCellCanvasModel.setSelectionAnchor(new Point(0,0)); } + + public void clearSelection() { + fCellCanvasModel.setSelection(-1,-1,-1,-1); + } + public boolean isEmpty() { return false; } diff --git a/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/tabs/TabFolderManager.java b/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/tabs/TabFolderManager.java index 110bc26fd00..c489a9b9cc2 100644 --- a/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/tabs/TabFolderManager.java +++ b/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/tabs/TabFolderManager.java @@ -769,6 +769,22 @@ public class TabFolderManager extends PlatformObject implements ISelectionProvid fireSelectionChanged(getSelection()); } + /** + * Fire the selection changed event with the terminal text! + * to the registered listeners. + * see also TerminalControlSelectionListener- mouseUp + */ + protected void fireTerminalSelectionChanged() { + updateStatusLine(); + CTabItem item = getActiveTabItem(); + if (item != null && !item.isDisposed()) { + ITerminalViewControl terminal = (ITerminalViewControl)item.getData(); + if (terminal != null && !terminal.isDisposed()) { + fireSelectionChanged(new StructuredSelection(terminal.getSelection())); + } + } + } + /** * Fire the selection changed event to the registered listeners. */ diff --git a/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/tabs/TabTerminalListener.java b/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/tabs/TabTerminalListener.java index 7c67100fb77..96d93834c9d 100644 --- a/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/tabs/TabTerminalListener.java +++ b/plugins/org.eclipse.tm.terminal.view.ui/src/org/eclipse/tm/terminal/view/ui/tabs/TabTerminalListener.java @@ -149,4 +149,9 @@ public class TabTerminalListener implements ITerminalListener { @Override public void setTerminalTitle(String title) { } + + @Override + public void setTerminalSelectionChanged() { + tabFolderManager.fireTerminalSelectionChanged(); + } }