In progress: [Issue 7] ELT does not work with Eclipse 4.2
Removed hard-coded accelerators for "copy" and "paste" actions.
diff --git a/com.google.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/EditActionAccelerators.java b/com.google.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/EditActionAccelerators.java
index 9d67214..6da42b1 100644
--- a/com.google.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/EditActionAccelerators.java
+++ b/com.google.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/EditActionAccelerators.java
@@ -12,32 +12,63 @@
import java.util.*;
-import org.eclipse.jface.bindings.keys.KeyStroke;
-import org.eclipse.swt.SWT;
+import org.eclipse.jface.bindings.TriggerSequence;
+import org.eclipse.jface.bindings.keys.*;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.keys.IBindingService;
/**
* @author alruiz@google.com (Alex Ruiz)
*/
class EditActionAccelerators {
- private static final Map<Integer, KeyStroke> ACCELERATORS = new HashMap<Integer, KeyStroke>();
+ private static final String COPY_COMMAND_ID = "com.google.eclipse.terminal.local.copy"; //$NON-NLS-1$
+ private static final String PASTE_COMMAND_ID = "com.google.eclipse.terminal.local.paste"; //$NON-NLS-1$
- static {
- addActionAccelerator('C');
- addActionAccelerator('V');
+ private final Map<Integer, String> commandIdsByAccelerator = new HashMap<Integer, String>();
+
+ private void load() {
+ addAccelerator(COPY_COMMAND_ID);
+ addAccelerator(PASTE_COMMAND_ID);
}
- private static void addActionAccelerator(int naturalKey) {
- int modifierKeys = (SWT.COMMAND == SWT.MOD1) ? SWT.COMMAND : SWT.CONTROL | SWT.SHIFT;
- KeyStroke keyStroke = KeyStroke.getInstance(modifierKeys, naturalKey);
- int accelerator = convertKeyStrokeToAccelerator(keyStroke);
- ACCELERATORS.put(accelerator, keyStroke);
+ private void addAccelerator(String commandId) {
+ KeySequence keySequence = bindingFor(commandId);
+ if (keySequence == null) {
+ return;
+ }
+ KeyStroke[] keyStrokes = keySequence.getKeyStrokes();
+ if (keyStrokes.length != 0) {
+ int accelerator = convertKeyStrokeToAccelerator(keyStrokes[0]);
+ commandIdsByAccelerator.put(new Integer(accelerator), commandId);
+ }
}
- static Integer naturalKey(int accelerator) {
- KeyStroke keyStroke = ACCELERATORS.get(accelerator);
- if (keyStroke != null) {
- return keyStroke.getNaturalKey();
+ private static KeySequence bindingFor(String commandId) {
+ IBindingService bindingService = bindingService();
+ TriggerSequence binding = bindingService.getBestActiveBindingFor(commandId);
+ if (binding instanceof KeySequence) {
+ KeySequence keySequence = (KeySequence) binding;
+ return keySequence;
}
return null;
}
+
+ private static IBindingService bindingService() {
+ return (IBindingService) PlatformUI.getWorkbench().getAdapter(IBindingService.class);
+ }
+
+ boolean isCopyAction(int accelerator) {
+ return isMatchingAction(accelerator, COPY_COMMAND_ID);
+ }
+
+ boolean isPasteAction(int accelerator) {
+ return isMatchingAction(accelerator, PASTE_COMMAND_ID);
+ }
+
+ private boolean isMatchingAction(int accelerator, String commandId) {
+ if (commandIdsByAccelerator.isEmpty()) {
+ load();
+ }
+ return commandId.equals(commandIdsByAccelerator.get(new Integer(accelerator)));
+ }
}
diff --git a/com.google.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java b/com.google.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java
index 0db064f..ed1039b 100644
--- a/com.google.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java
+++ b/com.google.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java
@@ -111,6 +111,8 @@
*/
volatile private Job fJob;
+ private final EditActionAccelerators editActionAccelerators = new EditActionAccelerators();
+
public VT100TerminalControl(ITerminalListener target, Composite wndParent, ITerminalConnector[] connectors) {
fConnectors=connectors;
fTerminalListener=target;
@@ -162,7 +164,11 @@
}
private void copy(int clipboardType) {
- Object[] data = new Object[] { getSelection() };
+ String selection = getSelection();
+ if (selection == null || selection.isEmpty()) {
+ return;
+ }
+ Object[] data = new Object[] { selection };
Transfer[] types = new Transfer[] { TextTransfer.getInstance() };
fClipboard.setContents(data, types, clipboardType);
}
@@ -780,16 +786,13 @@
}
int accelerator = convertEventToUnmodifiedAccelerator(event);
- Integer naturalKey = EditActionAccelerators.naturalKey(accelerator);
- if (naturalKey != null) {
- switch (naturalKey.intValue()) {
- case 'C':
- copy();
- return;
- case 'V':
- paste();
- return;
- }
+ if (editActionAccelerators.isCopyAction(accelerator)) {
+ copy();
+ return;
+ }
+ if (editActionAccelerators.isPasteAction(accelerator)) {
+ paste();
+ return;
}
// We set the event.doit to false to prevent any further processing of this