提交 a92ddb56 编写于 作者: A Alex Dima

IKeybindingService.resolveKeybinding can return N (>=0) ResolvedKeybinding

上级 82a31e8e
......@@ -387,16 +387,23 @@ export class StandaloneKeybindingService extends AbstractKeybindingService {
const item = items[i];
const when = (item.when ? item.when.normalize() : null);
const keybinding = item.keybinding;
const resolvedKeybinding = (keybinding ? this.resolveKeybinding(keybinding) : null);
result[resultLen++] = new ResolvedKeybindingItem(resolvedKeybinding, item.command, item.commandArgs, when, isDefault);
if (!keybinding) {
// This might be a removal keybinding item in user settings => accept it
result[resultLen++] = new ResolvedKeybindingItem(null, item.command, item.commandArgs, when, isDefault);
} else {
const resolvedKeybindings = this.resolveKeybinding(keybinding);
for (let j = 0; j < resolvedKeybindings.length; j++) {
result[resultLen++] = new ResolvedKeybindingItem(resolvedKeybindings[j], item.command, item.commandArgs, when, isDefault);
}
}
}
return result;
}
public resolveKeybinding(kb: Keybinding): ResolvedKeybinding {
return new USLayoutResolvedKeybinding(kb, OS);
public resolveKeybinding(kb: Keybinding): ResolvedKeybinding[] {
return [new USLayoutResolvedKeybinding(kb, OS)];
}
public resolveKeyboardEvent(keyboardEvent: IKeyboardEvent): ResolvedKeybinding {
......@@ -407,7 +414,7 @@ export class StandaloneKeybindingService extends AbstractKeybindingService {
keyboardEvent.metaKey,
keyboardEvent.keyCode
);
return this.resolveKeybinding(keybinding);
return this.resolveKeybinding(keybinding)[0];
}
}
......
......@@ -62,7 +62,7 @@ export abstract class AbstractKeybindingService implements IKeybindingService {
}
protected abstract _getResolver(): KeybindingResolver;
public abstract resolveKeybinding(keybinding: Keybinding): ResolvedKeybinding;
public abstract resolveKeybinding(keybinding: Keybinding): ResolvedKeybinding[];
public abstract resolveKeyboardEvent(keyboardEvent: IKeyboardEvent): ResolvedKeybinding;
public getDefaultKeybindings(): string {
......
......@@ -44,7 +44,10 @@ export interface IKeybindingService {
onDidUpdateKeybindings: Event<IKeybindingEvent>;
resolveKeybinding(keybinding: Keybinding): ResolvedKeybinding;
/**
* Returns none, one or many (depending on keyboard layout)!
*/
resolveKeybinding(keybinding: Keybinding): ResolvedKeybinding[];
resolveKeyboardEvent(keyboardEvent: IKeyboardEvent): ResolvedKeybinding;
......
......@@ -42,8 +42,8 @@ suite('AbstractKeybindingService', () => {
return this._resolver;
}
public resolveKeybinding(kb: Keybinding): ResolvedKeybinding {
return new USLayoutResolvedKeybinding(kb, OS);
public resolveKeybinding(kb: Keybinding): ResolvedKeybinding[] {
return [new USLayoutResolvedKeybinding(kb, OS)];
}
public resolveKeyboardEvent(keyboardEvent: IKeyboardEvent): ResolvedKeybinding {
......@@ -54,7 +54,7 @@ suite('AbstractKeybindingService', () => {
keyboardEvent.metaKey,
keyboardEvent.keyCode
);
return this.resolveKeybinding(keybinding);
return this.resolveKeybinding(keybinding)[0];
}
public testDispatch(kb: number): boolean {
......
......@@ -77,8 +77,8 @@ export class MockKeybindingService implements IKeybindingService {
return [];
}
public resolveKeybinding(keybinding: Keybinding): ResolvedKeybinding {
return new USLayoutResolvedKeybinding(keybinding, OS);
public resolveKeybinding(keybinding: Keybinding): ResolvedKeybinding[] {
return [new USLayoutResolvedKeybinding(keybinding, OS)];
}
public resolveKeyboardEvent(keyboardEvent: IKeyboardEvent): ResolvedKeybinding {
......@@ -89,7 +89,7 @@ export class MockKeybindingService implements IKeybindingService {
keyboardEvent.metaKey,
keyboardEvent.keyCode
);
return this.resolveKeybinding(keybinding);
return this.resolveKeybinding(keybinding)[0];
}
public lookupKeybindings(commandId: string): ResolvedKeybinding[] {
......
......@@ -669,8 +669,11 @@ export class ExtensionEditor extends BaseEditor {
}
const keyBinding = createKeybinding(KeybindingIO.readKeybinding(key || rawKeyBinding.key, OS), OS);
const resolvedKeybinding = this.keybindingService.resolveKeybinding(keyBinding);
const result = resolvedKeybinding.getLabel();
const resolvedKeybindings = this.keybindingService.resolveKeybinding(keyBinding);
if (resolvedKeybindings.length === 0) {
return null;
}
const result = resolvedKeybindings[0].getLabel();
return result === 'unknown' ? null : result;
}
......
......@@ -160,20 +160,21 @@ export class DefineKeybindingController implements editorCommon.IEditorContribut
var m = model.findMatches(regex, false, true, false, false, false).map(m => m.range);
let data = m.map((range) => {
let text = model.getValueInRange(range);
let strKeybinding = text.substring(1, text.length - 1);
strKeybinding = strKeybinding.replace(/\\\\/g, '\\');
let numKeybinding = KeybindingIO.readKeybinding(strKeybinding, OS);
const text = model.getValueInRange(range);
const strKeybinding = text.substring(1, text.length - 1).replace(/\\\\/g, '\\');
const numKeybinding = KeybindingIO.readKeybinding(strKeybinding, OS);
const keybinding = createKeybinding(numKeybinding, OS);
const usResolvedKeybinding = new USLayoutResolvedKeybinding(keybinding, OS);
let keybinding = createKeybinding(numKeybinding, OS);
let resolvedKeybinding = this._keybindingService.resolveKeybinding(keybinding);
let label: string = null;
const resolvedKeybindings = this._keybindingService.resolveKeybinding(keybinding);
if (resolvedKeybindings.length > 0) {
label = resolvedKeybindings[0].getLabel();
}
const usResolvedKeybinding = new USLayoutResolvedKeybinding(keybinding, OS);
return {
usLabel: usResolvedKeybinding.getLabel(),
label: resolvedKeybinding.getLabel(),
label: label,
range: range
};
});
......
......@@ -39,13 +39,16 @@ export function isSearchViewletFocussed(viewletService: IViewletService): boolea
}
export function appendKeyBindingLabel(label: string, keyBinding: number | ResolvedKeybinding, keyBindingService2: IKeybindingService): string {
let resolvedKb: ResolvedKeybinding;
if (typeof keyBinding === 'number') {
resolvedKb = keyBindingService2.resolveKeybinding(createKeybinding(keyBinding, OS));
const resolvedKeybindings = keyBindingService2.resolveKeybinding(createKeybinding(keyBinding, OS));
return doAppendKeyBindingLabel(label, resolvedKeybindings.length > 0 ? resolvedKeybindings[0] : null);
} else {
resolvedKb = keyBinding;
return doAppendKeyBindingLabel(label, keyBinding);
}
return resolvedKb ? label + ' (' + resolvedKb.getLabel() + ')' : label;
}
function doAppendKeyBindingLabel(label: string, keyBinding: ResolvedKeybinding): string {
return keyBinding ? label + ' (' + keyBinding.getLabel() + ')' : label;
}
export class ToggleCaseSensitiveAction extends Action {
......
......@@ -30,7 +30,7 @@ suite('Search Actions', () => {
instantiationService = new TestInstantiationService();
instantiationService.stub(IModelService, stubModelService(instantiationService));
instantiationService.stub(IKeybindingService, {});
instantiationService.stub(IKeybindingService, 'resolveKeybinding', (keybinding: Keybinding) => new USLayoutResolvedKeybinding(keybinding, OS));
instantiationService.stub(IKeybindingService, 'resolveKeybinding', (keybinding: Keybinding) => [new USLayoutResolvedKeybinding(keybinding, OS)]);
counter = 0;
});
......
......@@ -86,9 +86,13 @@ export function loadReleaseNotes(accessor: ServicesAccessor, version: string): T
return unassigned;
}
const resolvedKeybinding = keybindingService.resolveKeybinding(keybinding);
const resolvedKeybindings = keybindingService.resolveKeybinding(keybinding);
return resolvedKeybinding.getLabel();
if (resolvedKeybindings.length === 0) {
return unassigned;
}
return resolvedKeybindings[0].getLabel();
};
return text
......
......@@ -391,9 +391,15 @@ export class WorkbenchKeybindingService extends AbstractKeybindingService {
const item = items[i];
const when = (item.when ? item.when.normalize() : null);
const keybinding = item.keybinding;
const resolvedKeybinding = (keybinding ? this.resolveKeybinding(keybinding) : null);
result[resultLen++] = new ResolvedKeybindingItem(resolvedKeybinding, item.command, item.commandArgs, when, isDefault);
if (!keybinding) {
// This might be a removal keybinding item in user settings => accept it
result[resultLen++] = new ResolvedKeybindingItem(null, item.command, item.commandArgs, when, isDefault);
} else {
const resolvedKeybindings = this.resolveKeybinding(keybinding);
for (let j = 0; j < resolvedKeybindings.length; j++) {
result[resultLen++] = new ResolvedKeybindingItem(resolvedKeybindings[j], item.command, item.commandArgs, when, isDefault);
}
}
}
return result;
......@@ -412,8 +418,8 @@ export class WorkbenchKeybindingService extends AbstractKeybindingService {
return extraUserKeybindings.map((k, i) => KeybindingIO.readKeybindingItem(k, i, OS));
}
public resolveKeybinding(kb: Keybinding): ResolvedKeybinding {
return new FancyResolvedKeybinding(kb);
public resolveKeybinding(kb: Keybinding): ResolvedKeybinding[] {
return [new FancyResolvedKeybinding(kb)];
}
public resolveKeyboardEvent(keyboardEvent: IKeyboardEvent): ResolvedKeybinding {
......@@ -424,7 +430,7 @@ export class WorkbenchKeybindingService extends AbstractKeybindingService {
keyboardEvent.metaKey,
keyboardEvent.keyCode
);
return this.resolveKeybinding(keybinding);
return this.resolveKeybinding(keybinding)[0];
}
private _handleKeybindingsExtensionPointUser(isBuiltin: boolean, keybindings: ContributedKeyBinding | ContributedKeyBinding[], collector: ExtensionMessageCollector): boolean {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册