Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Webster2012-05-22 19:42:58 +0000
committerPaul Webster2012-05-22 19:42:58 +0000
commit4b2a72f8f1934f4c1e3dfd4ea24bc52cc5972933 (patch)
treeaec127eb4807f1a640489bdd65a07aa8e4289030
parent4e9dcd46a011d4bee52385174fed97325b2ff08d (diff)
downloadeclipse.platform.ui-4b2a72f8f1934f4c1e3dfd4ea24bc52cc5972933.tar.gz
eclipse.platform.ui-4b2a72f8f1934f4c1e3dfd4ea24bc52cc5972933.tar.xz
eclipse.platform.ui-4b2a72f8f1934f4c1e3dfd4ea24bc52cc5972933.zip
Bug 380322 - Scheme is ignored while selecting the best shortcut to
display We must take the schemes into account when sorting.
-rw-r--r--bundles/org.eclipse.e4.ui.bindings/src/org/eclipse/e4/ui/bindings/internal/BindingTable.java35
-rw-r--r--bundles/org.eclipse.e4.ui.bindings/src/org/eclipse/e4/ui/bindings/internal/BindingTableManager.java1
2 files changed, 34 insertions, 2 deletions
diff --git a/bundles/org.eclipse.e4.ui.bindings/src/org/eclipse/e4/ui/bindings/internal/BindingTable.java b/bundles/org.eclipse.e4.ui.bindings/src/org/eclipse/e4/ui/bindings/internal/BindingTable.java
index a71b9bd44d8..a349f1858d6 100644
--- a/bundles/org.eclipse.e4.ui.bindings/src/org/eclipse/e4/ui/bindings/internal/BindingTable.java
+++ b/bundles/org.eclipse.e4.ui.bindings/src/org/eclipse/e4/ui/bindings/internal/BindingTable.java
@@ -30,8 +30,36 @@ import org.eclipse.jface.bindings.keys.KeyStroke;
* manage tables of bindings that can be used to look up commands from keys.
*/
public class BindingTable {
- public static final Comparator<Binding> BEST_SEQUENCE = new Comparator<Binding>() {
+ static class BindingComparator implements Comparator<Binding> {
+ private String[] activeSchemeIds;
+
+ private final int compareSchemes(final String schemeId1, final String schemeId2) {
+ if (activeSchemeIds == null || activeSchemeIds.length == 0) {
+ return 0;
+ }
+ if (!schemeId2.equals(schemeId1)) {
+ for (int i = 0; i < activeSchemeIds.length; i++) {
+ final String schemePointer = activeSchemeIds[i];
+ if (schemeId2.equals(schemePointer)) {
+ return 1;
+ } else if (schemeId1.equals(schemePointer)) {
+ return -1;
+ }
+ }
+ }
+ return 0;
+ }
+
+ public void setActiveSchemes(String[] activeSchemeIds) {
+ this.activeSchemeIds = activeSchemeIds;
+ }
+
public int compare(Binding o1, Binding o2) {
+ int rc = compareSchemes(o1.getSchemeId(), o2.getSchemeId());
+ if (rc != 0) {
+ return rc;
+ }
+
/*
* Check to see which has the least number of triggers in the trigger sequence.
*/
@@ -83,7 +111,10 @@ public class BindingTable {
return strokeCount;
}
- };
+ }
+
+ public static final BindingComparator BEST_SEQUENCE = new BindingComparator();
+
private Context tableId;
private ArrayList<Binding> bindings = new ArrayList<Binding>();
private Map<TriggerSequence, Binding> bindingsByTrigger = new HashMap<TriggerSequence, Binding>();
diff --git a/bundles/org.eclipse.e4.ui.bindings/src/org/eclipse/e4/ui/bindings/internal/BindingTableManager.java b/bundles/org.eclipse.e4.ui.bindings/src/org/eclipse/e4/ui/bindings/internal/BindingTableManager.java
index 49f8fb4acd5..ea8a7329cc9 100644
--- a/bundles/org.eclipse.e4.ui.bindings/src/org/eclipse/e4/ui/bindings/internal/BindingTableManager.java
+++ b/bundles/org.eclipse.e4.ui.bindings/src/org/eclipse/e4/ui/bindings/internal/BindingTableManager.java
@@ -239,6 +239,7 @@ public class BindingTableManager {
*/
public void setActiveSchemes(String[] activeSchemeIds) {
this.activeSchemeIds = activeSchemeIds;
+ BindingTable.BEST_SEQUENCE.setActiveSchemes(activeSchemeIds);
}
/*

Back to the top