diff options
| author | Paul Webster | 2012-05-22 19:42:58 +0000 |
|---|---|---|
| committer | Paul Webster | 2012-05-22 19:42:58 +0000 |
| commit | 4b2a72f8f1934f4c1e3dfd4ea24bc52cc5972933 (patch) | |
| tree | aec127eb4807f1a640489bdd65a07aa8e4289030 | |
| parent | 4e9dcd46a011d4bee52385174fed97325b2ff08d (diff) | |
| download | eclipse.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.
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); } /* |
