Skip to content

Commit 28f0b4b

Browse files
committed
stopgap: addressed TODO, focus on UI labels next.
1 parent cf4bb37 commit 28f0b4b

18 files changed

Lines changed: 220 additions & 251 deletions

File tree

src/vs/base/common/keyCodes.ts

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -416,13 +416,11 @@ export function createKeybinding(keybinding: number, OS: OperatingSystem): Keybi
416416
}
417417
const firstPart = (keybinding & 0x0000FFFF) >>> 0;
418418
const chordPart = (keybinding & 0xFFFF0000) >>> 16;
419+
let parts = [createSimpleKeybinding(firstPart, OS)];
419420
if (chordPart !== 0) {
420-
return new ChordKeybinding([
421-
createSimpleKeybinding(firstPart, OS),
422-
createSimpleKeybinding(chordPart, OS),
423-
]);
421+
parts.push(createSimpleKeybinding(chordPart, OS));
424422
}
425-
return createSimpleKeybinding(firstPart, OS);
423+
return new ChordKeybinding(parts);
426424
}
427425

428426
export function createSimpleKeybinding(keybinding: number, OS: OperatingSystem): SimpleKeybinding {
@@ -461,10 +459,7 @@ export class SimpleKeybinding {
461459
this.keyCode = keyCode;
462460
}
463461

464-
public equals(other: Keybinding): boolean {
465-
if (other.type !== KeybindingType.Simple) {
466-
return false;
467-
}
462+
public equals(other: SimpleKeybinding): boolean {
468463
return (
469464
this.ctrlKey === other.ctrlKey
470465
&& this.shiftKey === other.shiftKey
@@ -492,6 +487,10 @@ export class SimpleKeybinding {
492487
);
493488
}
494489

490+
public toChord(): ChordKeybinding {
491+
return new ChordKeybinding([this]);
492+
}
493+
495494
/**
496495
* Does this keybinding refer to the key code of a modifier and it also has the modifier flag?
497496
*/
@@ -517,9 +516,21 @@ export class ChordKeybinding {
517516
let hashCodes = this.parts.map((p) => p.getHashCode().toString());
518517
return hashCodes.join(';');
519518
}
519+
520+
public equals(other: ChordKeybinding): boolean {
521+
if (this.parts.length !== other.parts.length) {
522+
return false;
523+
}
524+
for (let i = 0; i < this.parts.length; i++) {
525+
if (!this.parts[i].equals(other.parts[i])) {
526+
return false;
527+
}
528+
}
529+
return true;
530+
}
520531
}
521532

522-
export type Keybinding = SimpleKeybinding | ChordKeybinding;
533+
export type Keybinding = ChordKeybinding;
523534

524535
export class ResolvedKeybindingPart {
525536
readonly ctrlKey: boolean;
@@ -574,10 +585,10 @@ export abstract class ResolvedKeybinding {
574585
/**
575586
* Returns the firstPart, chordPart that should be used for dispatching.
576587
*/
577-
public abstract getDispatchParts(): [string | null, string | null];
588+
public abstract getDispatchParts(): string[];
578589
/**
579590
* Returns the firstPart, chordPart of the keybinding.
580591
* For simple keybindings, the second element will be null.
581592
*/
582-
public abstract getParts(): [ResolvedKeybindingPart, ResolvedKeybindingPart | null];
593+
public abstract getParts(): ResolvedKeybindingPart[];
583594
}

src/vs/base/common/keybindingParser.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,6 @@ export class KeybindingParser {
9292
[part, input] = this.parseSimpleKeybinding(input);
9393
parts.push(part);
9494
} while (input.length > 0);
95-
96-
if (parts.length === 1) {
97-
// This is a simple keybinding
98-
return parts[0];
99-
}
10095
return new ChordKeybinding(parts);
10196
}
10297

src/vs/base/parts/tree/browser/treeDefaults.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import * as dom from 'vs/base/browser/dom';
1212
import * as mouse from 'vs/base/browser/mouseEvent';
1313
import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';
1414
import * as _ from 'vs/base/parts/tree/browser/tree';
15-
import { KeyCode, KeyMod, Keybinding, SimpleKeybinding, createSimpleKeybinding } from 'vs/base/common/keyCodes';
15+
import { KeyCode, KeyMod, Keybinding, SimpleKeybinding, createKeybinding } from 'vs/base/common/keyCodes';
1616

1717
export interface IKeyBindingCallback {
1818
(tree: _.ITree, event: IKeyboardEvent): void;
@@ -61,7 +61,7 @@ export class KeybindingDispatcher {
6161
}
6262

6363
public has(keybinding: KeyCode): boolean {
64-
let target = createSimpleKeybinding(keybinding, platform.OS);
64+
let target = createKeybinding(keybinding, platform.OS);
6565
for (const a of this._arr) {
6666
if (target.equals(a.keybinding)) {
6767
return true;
@@ -72,7 +72,7 @@ export class KeybindingDispatcher {
7272

7373
public set(keybinding: number, callback: IKeyBindingCallback) {
7474
this._arr.push({
75-
keybinding: createSimpleKeybinding(keybinding, platform.OS),
75+
keybinding: createKeybinding(keybinding, platform.OS),
7676
callback: callback
7777
});
7878
}
@@ -81,7 +81,7 @@ export class KeybindingDispatcher {
8181
// Loop from the last to the first to handle overwrites
8282
for (let i = this._arr.length - 1; i >= 0; i--) {
8383
let item = this._arr[i];
84-
if (keybinding.equals(item.keybinding)) {
84+
if (keybinding.toChord().equals(item.keybinding)) {
8585
return item.callback;
8686
}
8787
}

src/vs/base/test/common/keyCodes.test.ts

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,22 @@ suite('keyCodes', () => {
2020
}
2121

2222
test(null, 0);
23-
test(new SimpleKeybinding(false, false, false, false, KeyCode.Enter), KeyCode.Enter);
24-
test(new SimpleKeybinding(true, false, false, false, KeyCode.Enter), KeyMod.WinCtrl | KeyCode.Enter);
25-
test(new SimpleKeybinding(false, false, true, false, KeyCode.Enter), KeyMod.Alt | KeyCode.Enter);
26-
test(new SimpleKeybinding(true, false, true, false, KeyCode.Enter), KeyMod.Alt | KeyMod.WinCtrl | KeyCode.Enter);
27-
test(new SimpleKeybinding(false, true, false, false, KeyCode.Enter), KeyMod.Shift | KeyCode.Enter);
28-
test(new SimpleKeybinding(true, true, false, false, KeyCode.Enter), KeyMod.Shift | KeyMod.WinCtrl | KeyCode.Enter);
29-
test(new SimpleKeybinding(false, true, true, false, KeyCode.Enter), KeyMod.Shift | KeyMod.Alt | KeyCode.Enter);
30-
test(new SimpleKeybinding(true, true, true, false, KeyCode.Enter), KeyMod.Shift | KeyMod.Alt | KeyMod.WinCtrl | KeyCode.Enter);
31-
test(new SimpleKeybinding(false, false, false, true, KeyCode.Enter), KeyMod.CtrlCmd | KeyCode.Enter);
32-
test(new SimpleKeybinding(true, false, false, true, KeyCode.Enter), KeyMod.CtrlCmd | KeyMod.WinCtrl | KeyCode.Enter);
33-
test(new SimpleKeybinding(false, false, true, true, KeyCode.Enter), KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.Enter);
34-
test(new SimpleKeybinding(true, false, true, true, KeyCode.Enter), KeyMod.CtrlCmd | KeyMod.Alt | KeyMod.WinCtrl | KeyCode.Enter);
35-
test(new SimpleKeybinding(false, true, false, true, KeyCode.Enter), KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.Enter);
36-
test(new SimpleKeybinding(true, true, false, true, KeyCode.Enter), KeyMod.CtrlCmd | KeyMod.Shift | KeyMod.WinCtrl | KeyCode.Enter);
37-
test(new SimpleKeybinding(false, true, true, true, KeyCode.Enter), KeyMod.CtrlCmd | KeyMod.Shift | KeyMod.Alt | KeyCode.Enter);
38-
test(new SimpleKeybinding(true, true, true, true, KeyCode.Enter), KeyMod.CtrlCmd | KeyMod.Shift | KeyMod.Alt | KeyMod.WinCtrl | KeyCode.Enter);
23+
test(new SimpleKeybinding(false, false, false, false, KeyCode.Enter).toChord(), KeyCode.Enter);
24+
test(new SimpleKeybinding(true, false, false, false, KeyCode.Enter).toChord(), KeyMod.WinCtrl | KeyCode.Enter);
25+
test(new SimpleKeybinding(false, false, true, false, KeyCode.Enter).toChord(), KeyMod.Alt | KeyCode.Enter);
26+
test(new SimpleKeybinding(true, false, true, false, KeyCode.Enter).toChord(), KeyMod.Alt | KeyMod.WinCtrl | KeyCode.Enter);
27+
test(new SimpleKeybinding(false, true, false, false, KeyCode.Enter).toChord(), KeyMod.Shift | KeyCode.Enter);
28+
test(new SimpleKeybinding(true, true, false, false, KeyCode.Enter).toChord(), KeyMod.Shift | KeyMod.WinCtrl | KeyCode.Enter);
29+
test(new SimpleKeybinding(false, true, true, false, KeyCode.Enter).toChord(), KeyMod.Shift | KeyMod.Alt | KeyCode.Enter);
30+
test(new SimpleKeybinding(true, true, true, false, KeyCode.Enter).toChord(), KeyMod.Shift | KeyMod.Alt | KeyMod.WinCtrl | KeyCode.Enter);
31+
test(new SimpleKeybinding(false, false, false, true, KeyCode.Enter).toChord(), KeyMod.CtrlCmd | KeyCode.Enter);
32+
test(new SimpleKeybinding(true, false, false, true, KeyCode.Enter).toChord(), KeyMod.CtrlCmd | KeyMod.WinCtrl | KeyCode.Enter);
33+
test(new SimpleKeybinding(false, false, true, true, KeyCode.Enter).toChord(), KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.Enter);
34+
test(new SimpleKeybinding(true, false, true, true, KeyCode.Enter).toChord(), KeyMod.CtrlCmd | KeyMod.Alt | KeyMod.WinCtrl | KeyCode.Enter);
35+
test(new SimpleKeybinding(false, true, false, true, KeyCode.Enter).toChord(), KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.Enter);
36+
test(new SimpleKeybinding(true, true, false, true, KeyCode.Enter).toChord(), KeyMod.CtrlCmd | KeyMod.Shift | KeyMod.WinCtrl | KeyCode.Enter);
37+
test(new SimpleKeybinding(false, true, true, true, KeyCode.Enter).toChord(), KeyMod.CtrlCmd | KeyMod.Shift | KeyMod.Alt | KeyCode.Enter);
38+
test(new SimpleKeybinding(true, true, true, true, KeyCode.Enter).toChord(), KeyMod.CtrlCmd | KeyMod.Shift | KeyMod.Alt | KeyMod.WinCtrl | KeyCode.Enter);
3939

4040
test(
4141
new ChordKeybinding([
@@ -62,22 +62,22 @@ suite('keyCodes', () => {
6262
}
6363

6464
test(null, 0);
65-
test(new SimpleKeybinding(false, false, false, false, KeyCode.Enter), KeyCode.Enter);
66-
test(new SimpleKeybinding(false, false, false, true, KeyCode.Enter), KeyMod.WinCtrl | KeyCode.Enter);
67-
test(new SimpleKeybinding(false, false, true, false, KeyCode.Enter), KeyMod.Alt | KeyCode.Enter);
68-
test(new SimpleKeybinding(false, false, true, true, KeyCode.Enter), KeyMod.Alt | KeyMod.WinCtrl | KeyCode.Enter);
69-
test(new SimpleKeybinding(false, true, false, false, KeyCode.Enter), KeyMod.Shift | KeyCode.Enter);
70-
test(new SimpleKeybinding(false, true, false, true, KeyCode.Enter), KeyMod.Shift | KeyMod.WinCtrl | KeyCode.Enter);
71-
test(new SimpleKeybinding(false, true, true, false, KeyCode.Enter), KeyMod.Shift | KeyMod.Alt | KeyCode.Enter);
72-
test(new SimpleKeybinding(false, true, true, true, KeyCode.Enter), KeyMod.Shift | KeyMod.Alt | KeyMod.WinCtrl | KeyCode.Enter);
73-
test(new SimpleKeybinding(true, false, false, false, KeyCode.Enter), KeyMod.CtrlCmd | KeyCode.Enter);
74-
test(new SimpleKeybinding(true, false, false, true, KeyCode.Enter), KeyMod.CtrlCmd | KeyMod.WinCtrl | KeyCode.Enter);
75-
test(new SimpleKeybinding(true, false, true, false, KeyCode.Enter), KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.Enter);
76-
test(new SimpleKeybinding(true, false, true, true, KeyCode.Enter), KeyMod.CtrlCmd | KeyMod.Alt | KeyMod.WinCtrl | KeyCode.Enter);
77-
test(new SimpleKeybinding(true, true, false, false, KeyCode.Enter), KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.Enter);
78-
test(new SimpleKeybinding(true, true, false, true, KeyCode.Enter), KeyMod.CtrlCmd | KeyMod.Shift | KeyMod.WinCtrl | KeyCode.Enter);
79-
test(new SimpleKeybinding(true, true, true, false, KeyCode.Enter), KeyMod.CtrlCmd | KeyMod.Shift | KeyMod.Alt | KeyCode.Enter);
80-
test(new SimpleKeybinding(true, true, true, true, KeyCode.Enter), KeyMod.CtrlCmd | KeyMod.Shift | KeyMod.Alt | KeyMod.WinCtrl | KeyCode.Enter);
65+
test(new SimpleKeybinding(false, false, false, false, KeyCode.Enter).toChord(), KeyCode.Enter);
66+
test(new SimpleKeybinding(false, false, false, true, KeyCode.Enter).toChord(), KeyMod.WinCtrl | KeyCode.Enter);
67+
test(new SimpleKeybinding(false, false, true, false, KeyCode.Enter).toChord(), KeyMod.Alt | KeyCode.Enter);
68+
test(new SimpleKeybinding(false, false, true, true, KeyCode.Enter).toChord(), KeyMod.Alt | KeyMod.WinCtrl | KeyCode.Enter);
69+
test(new SimpleKeybinding(false, true, false, false, KeyCode.Enter).toChord(), KeyMod.Shift | KeyCode.Enter);
70+
test(new SimpleKeybinding(false, true, false, true, KeyCode.Enter).toChord(), KeyMod.Shift | KeyMod.WinCtrl | KeyCode.Enter);
71+
test(new SimpleKeybinding(false, true, true, false, KeyCode.Enter).toChord(), KeyMod.Shift | KeyMod.Alt | KeyCode.Enter);
72+
test(new SimpleKeybinding(false, true, true, true, KeyCode.Enter).toChord(), KeyMod.Shift | KeyMod.Alt | KeyMod.WinCtrl | KeyCode.Enter);
73+
test(new SimpleKeybinding(true, false, false, false, KeyCode.Enter).toChord(), KeyMod.CtrlCmd | KeyCode.Enter);
74+
test(new SimpleKeybinding(true, false, false, true, KeyCode.Enter).toChord(), KeyMod.CtrlCmd | KeyMod.WinCtrl | KeyCode.Enter);
75+
test(new SimpleKeybinding(true, false, true, false, KeyCode.Enter).toChord(), KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.Enter);
76+
test(new SimpleKeybinding(true, false, true, true, KeyCode.Enter).toChord(), KeyMod.CtrlCmd | KeyMod.Alt | KeyMod.WinCtrl | KeyCode.Enter);
77+
test(new SimpleKeybinding(true, true, false, false, KeyCode.Enter).toChord(), KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.Enter);
78+
test(new SimpleKeybinding(true, true, false, true, KeyCode.Enter).toChord(), KeyMod.CtrlCmd | KeyMod.Shift | KeyMod.WinCtrl | KeyCode.Enter);
79+
test(new SimpleKeybinding(true, true, true, false, KeyCode.Enter).toChord(), KeyMod.CtrlCmd | KeyMod.Shift | KeyMod.Alt | KeyCode.Enter);
80+
test(new SimpleKeybinding(true, true, true, true, KeyCode.Enter).toChord(), KeyMod.CtrlCmd | KeyMod.Shift | KeyMod.Alt | KeyMod.WinCtrl | KeyCode.Enter);
8181

8282
test(
8383
new ChordKeybinding([

src/vs/editor/standalone/browser/simpleServices.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,7 @@ export class StandaloneKeybindingService extends AbstractKeybindingService {
370370
keyboardEvent.altKey,
371371
keyboardEvent.metaKey,
372372
keyboardEvent.keyCode
373-
);
373+
).toChord();
374374
return new USLayoutResolvedKeybinding(keybinding, OS);
375375
}
376376

src/vs/platform/driver/electron-main/driver.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ export class Driver implements IDriver, IWindowDriverRegistry {
9999
const window = this.windowsService.getWindowById(windowId);
100100
const webContents = window.win.webContents;
101101
const noModifiedKeybinding = new SimpleKeybinding(false, false, false, false, keybinding.keyCode);
102-
const resolvedKeybinding = new USLayoutResolvedKeybinding(noModifiedKeybinding, OS);
102+
const resolvedKeybinding = new USLayoutResolvedKeybinding(noModifiedKeybinding.toChord(), OS);
103103
const keyCode = resolvedKeybinding.getElectronAccelerator();
104104

105105
const modifiers: string[] = [];

src/vs/platform/keybinding/common/keybindingsRegistry.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22
* Copyright (c) Microsoft Corporation. All rights reserved.
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
5-
6-
import { KeyCode, Keybinding, KeybindingType, SimpleKeybinding, createKeybinding } from 'vs/base/common/keyCodes';
5+
import { KeyCode, Keybinding, SimpleKeybinding, createKeybinding } from 'vs/base/common/keyCodes';
76
import { OS, OperatingSystem } from 'vs/base/common/platform';
87
import { CommandsRegistry, ICommandHandler, ICommandHandlerDescription } from 'vs/platform/commands/common/commands';
98
import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';
@@ -199,11 +198,7 @@ class KeybindingsRegistryImpl implements IKeybindingsRegistry {
199198

200199
private _registerDefaultKeybinding(keybinding: Keybinding, commandId: string, commandArgs: any, weight1: number, weight2: number, when: ContextKeyExpr | null | undefined, source: KeybindingRuleSource): void {
201200
if (source === KeybindingRuleSource.Core && OS === OperatingSystem.Windows) {
202-
if (keybinding.type === KeybindingType.Chord) {
203-
this._assertNoCtrlAlt(keybinding.parts[0], commandId);
204-
} else {
205-
this._assertNoCtrlAlt(keybinding, commandId);
206-
}
201+
this._assertNoCtrlAlt(keybinding.parts[0], commandId);
207202
}
208203
this._keybindings.push({
209204
keybinding: keybinding,

src/vs/platform/keybinding/common/usLayoutResolvedKeybinding.ts

Lines changed: 20 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import { KeyCode, KeyCodeUtils, Keybinding, KeybindingType, ResolvedKeybinding, ResolvedKeybindingPart, SimpleKeybinding } from 'vs/base/common/keyCodes';
6+
import { KeyCode, KeyCodeUtils, Keybinding, ResolvedKeybinding, ResolvedKeybindingPart, SimpleKeybinding } from 'vs/base/common/keyCodes';
77
import { AriaLabelProvider, ElectronAcceleratorLabelProvider, UILabelProvider, UserSettingsLabelProvider } from 'vs/base/common/keybindingLabels';
88
import { OperatingSystem } from 'vs/base/common/platform';
99

@@ -13,21 +13,15 @@ import { OperatingSystem } from 'vs/base/common/platform';
1313
export class USLayoutResolvedKeybinding extends ResolvedKeybinding {
1414

1515
private readonly _os: OperatingSystem;
16-
private readonly _firstPart: SimpleKeybinding;
17-
private readonly _chordPart: SimpleKeybinding | null;
16+
private readonly _chords: SimpleKeybinding[];
1817

1918
constructor(actual: Keybinding, OS: OperatingSystem) {
2019
super();
2120
this._os = OS;
2221
if (!actual) {
2322
throw new Error(`Invalid USLayoutResolvedKeybinding`);
24-
} else if (actual.type === KeybindingType.Chord) {
25-
// TODO@chords
26-
this._firstPart = actual.parts[0];
27-
this._chordPart = actual.parts[1];
2823
} else {
29-
this._firstPart = actual;
30-
this._chordPart = null;
24+
this._chords = actual.parts;
3125
}
3226
}
3327

@@ -58,9 +52,9 @@ export class USLayoutResolvedKeybinding extends ResolvedKeybinding {
5852
}
5953

6054
public getLabel(): string | null {
61-
let firstPart = this._getUILabelForKeybinding(this._firstPart);
62-
let chordPart = this._getUILabelForKeybinding(this._chordPart);
63-
return UILabelProvider.toLabel(this._firstPart, firstPart, this._chordPart, chordPart, this._os);
55+
let firstPart = this._getUILabelForKeybinding(this._chords[0]);
56+
let chordPart = this._getUILabelForKeybinding(this._chords[1]);
57+
return UILabelProvider.toLabel(this._chords[0], firstPart, this._chords[1], chordPart, this._os);
6458
}
6559

6660
private _getAriaLabelForKeybinding(keybinding: SimpleKeybinding | null): string | null {
@@ -74,9 +68,9 @@ export class USLayoutResolvedKeybinding extends ResolvedKeybinding {
7468
}
7569

7670
public getAriaLabel(): string | null {
77-
let firstPart = this._getAriaLabelForKeybinding(this._firstPart);
78-
let chordPart = this._getAriaLabelForKeybinding(this._chordPart);
79-
return AriaLabelProvider.toLabel(this._firstPart, firstPart, this._chordPart, chordPart, this._os);
71+
let firstPart = this._getAriaLabelForKeybinding(this._chords[0]);
72+
let chordPart = this._getAriaLabelForKeybinding(this._chords[1]);
73+
return AriaLabelProvider.toLabel(this._chords[0], firstPart, this._chords[1], chordPart, this._os);
8074
}
8175

8276
private _keyCodeToElectronAccelerator(keyCode: KeyCode): string | null {
@@ -110,13 +104,13 @@ export class USLayoutResolvedKeybinding extends ResolvedKeybinding {
110104
}
111105

112106
public getElectronAccelerator(): string | null {
113-
if (this._chordPart !== null) {
107+
if (this._chords.length > 1) {
114108
// Electron cannot handle chords
115109
return null;
116110
}
117111

118-
let firstPart = this._getElectronAcceleratorLabelForKeybinding(this._firstPart);
119-
return ElectronAcceleratorLabelProvider.toLabel(this._firstPart, firstPart, null, null, this._os);
112+
let firstPart = this._getElectronAcceleratorLabelForKeybinding(this._chords[0]);
113+
return ElectronAcceleratorLabelProvider.toLabel(this._chords[0], firstPart, null, null, this._os);
120114
}
121115

122116
private _getUserSettingsLabelForKeybinding(keybinding: SimpleKeybinding | null): string | null {
@@ -130,9 +124,9 @@ export class USLayoutResolvedKeybinding extends ResolvedKeybinding {
130124
}
131125

132126
public getUserSettingsLabel(): string | null {
133-
let firstPart = this._getUserSettingsLabelForKeybinding(this._firstPart);
134-
let chordPart = this._getUserSettingsLabelForKeybinding(this._chordPart);
135-
let result = UserSettingsLabelProvider.toLabel(this._firstPart, firstPart, this._chordPart, chordPart, this._os);
127+
let firstPart = this._getUserSettingsLabelForKeybinding(this._chords[0]);
128+
let chordPart = this._getUserSettingsLabelForKeybinding(this._chords[1]);
129+
let result = UserSettingsLabelProvider.toLabel(this._chords[0], firstPart, this._chords[1], chordPart, this._os);
136130
return (result ? result.toLowerCase() : result);
137131
}
138132

@@ -141,14 +135,11 @@ export class USLayoutResolvedKeybinding extends ResolvedKeybinding {
141135
}
142136

143137
public isChord(): boolean {
144-
return (this._chordPart ? true : false);
138+
return this._chords.length > 1;
145139
}
146140

147-
public getParts(): [ResolvedKeybindingPart, ResolvedKeybindingPart | null] {
148-
return [
149-
this._toResolvedKeybindingPart(this._firstPart),
150-
this._chordPart ? this._toResolvedKeybindingPart(this._chordPart) : null
151-
];
141+
public getParts(): ResolvedKeybindingPart[] {
142+
return this._chords.map(this._toResolvedKeybindingPart);
152143
}
153144

154145
private _toResolvedKeybindingPart(keybinding: SimpleKeybinding): ResolvedKeybindingPart {
@@ -162,10 +153,8 @@ export class USLayoutResolvedKeybinding extends ResolvedKeybinding {
162153
);
163154
}
164155

165-
public getDispatchParts(): [string | null, string | null] {
166-
let firstPart = this._firstPart ? USLayoutResolvedKeybinding.getDispatchStr(this._firstPart) : null;
167-
let chordPart = this._chordPart ? USLayoutResolvedKeybinding.getDispatchStr(this._chordPart) : null;
168-
return [firstPart, chordPart];
156+
public getDispatchParts(): string[] {
157+
return this._chords.map((chord) => USLayoutResolvedKeybinding.getDispatchStr(chord));
169158
}
170159

171160
public static getDispatchStr(keybinding: SimpleKeybinding): string | null {

0 commit comments

Comments
 (0)