提交 603d8771 编写于 作者: S Sandeep Somavarapu

Fix #23285

上级 51e58cc5
......@@ -66,10 +66,14 @@ export abstract class AbstractKeybindingService implements IKeybindingService {
public abstract resolveKeyboardEvent(keyboardEvent: IKeyboardEvent): ResolvedKeybinding;
public abstract resolveUserBinding(userBinding: string): ResolvedKeybinding[];
public getDefaultKeybindings(): string {
public getDefaultKeybindingsContent(): string {
return '';
}
public getDefaultKeybindings(): ResolvedKeybindingItem[] {
return this._getResolver().getDefaultKeybindings();
}
public getKeybindings(): ResolvedKeybindingItem[] {
return this._getResolver().getKeybindings();
}
......
......@@ -70,7 +70,9 @@ export interface IKeybindingService {
*/
lookupKeybinding(commandId: string): ResolvedKeybinding;
getDefaultKeybindings(): string;
getDefaultKeybindingsContent(): string;
getDefaultKeybindings(): ResolvedKeybindingItem[];
getKeybindings(): ResolvedKeybindingItem[];
......
......@@ -69,10 +69,14 @@ export class MockKeybindingService implements IKeybindingService {
return Event.None;
}
public getDefaultKeybindings(): string {
public getDefaultKeybindingsContent(): string {
return null;
}
public getDefaultKeybindings(): ResolvedKeybindingItem[] {
return [];
}
public getKeybindings(): ResolvedKeybindingItem[] {
return [];
}
......
......@@ -66,6 +66,9 @@ export class KeybindingsEditorInput extends EditorInput {
export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor {
public static ID: string = 'workbench.editor.keybindings';
private keybindingsEditorModel: KeybindingsEditorModel;
private headerContainer: HTMLElement;
private searchWidget: SearchWidget;
......@@ -199,15 +202,17 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor
resetKeybinding(keybindingEntry: IKeybindingItemEntry): TPromise<any> {
this.selectEntry(keybindingEntry);
if (keybindingEntry.keybindingItem.keybinding) { // This should be a pre-condition
return this.keybindingEditingService.resetKeybinding(keybindingEntry.keybindingItem.keybindingItem)
.then(() => this.focus(),
error => {
this.onKeybindingEditingError(error);
this.selectEntry(keybindingEntry);
});
}
return TPromise.as(null);
return this.keybindingEditingService.resetKeybinding(keybindingEntry.keybindingItem.keybindingItem)
.then(() => {
if (!keybindingEntry.keybindingItem.keybinding) { // reveal only if keybinding was added to unassinged. Because the entry will be placed in different position after rendering
this.unAssignedKeybindingItemToRevealAndFocus = keybindingEntry;
}
this.selectEntry(keybindingEntry);
},
error => {
this.onKeybindingEditingError(error);
this.selectEntry(keybindingEntry);
});
}
copyKeybinding(keybinding: IKeybindingItemEntry): TPromise<any> {
......@@ -250,7 +255,7 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor
placeholder: localize('SearchKeybindings.Placeholder', "Search keybindings"),
navigateByArrows: true
}));
this._register(this.searchWidget.onDidChange(searchValue => this.delayedFiltering.trigger(() => this.render())));
this._register(this.searchWidget.onDidChange(searchValue => this.delayedFiltering.trigger(() => this.renderKeybindingsEntries())));
this._register(this.searchWidget.onNavigate(back => this._onNavigate(back)));
this.createOpenKeybindingsElement(this.headerContainer);
......@@ -295,27 +300,31 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor
private render(): TPromise<any> {
if (this.input) {
return this.input.resolve()
.then((keybindingsModel: KeybindingsEditorModel) => keybindingsModel.resolve()
.then(() => this.renderKeybindingsEntries(keybindingsModel.fetch(this.searchWidget.value()))));
.then((keybindingsModel: KeybindingsEditorModel) => this.keybindingsEditorModel = keybindingsModel)
.then(() => this.keybindingsEditorModel.resolve())
.then(() => this.renderKeybindingsEntries());
}
return TPromise.as(null);
}
private renderKeybindingsEntries(keybindingsEntries: IKeybindingItemEntry[]): void {
const currentSelectedIndex = this.keybindingsList.getSelection()[0];
this.listEntries = [{ id: 'keybinding-header-entry', templateId: KEYBINDING_HEADER_TEMPLATE_ID }, ...keybindingsEntries];
this.keybindingsList.splice(0, this.keybindingsList.length, this.listEntries);
this.layoutKebindingsList();
private renderKeybindingsEntries(): void {
if (this.keybindingsEditorModel) {
const keybindingsEntries: IKeybindingItemEntry[] = this.keybindingsEditorModel.fetch(this.searchWidget.value());
const currentSelectedIndex = this.keybindingsList.getSelection()[0];
this.listEntries = [{ id: 'keybinding-header-entry', templateId: KEYBINDING_HEADER_TEMPLATE_ID }, ...keybindingsEntries];
this.keybindingsList.splice(0, this.keybindingsList.length, this.listEntries);
this.layoutKebindingsList();
if (this.unAssignedKeybindingItemToRevealAndFocus) {
const index = this.getNewIndexOfUnassignedKeybinding(this.unAssignedKeybindingItemToRevealAndFocus);
if (index !== -1) {
this.keybindingsList.reveal(index, 0.2);
this.selectEntry(index);
if (this.unAssignedKeybindingItemToRevealAndFocus) {
const index = this.getNewIndexOfUnassignedKeybinding(this.unAssignedKeybindingItemToRevealAndFocus);
if (index !== -1) {
this.keybindingsList.reveal(index, 0.2);
this.selectEntry(index);
}
this.unAssignedKeybindingItemToRevealAndFocus = null;
} else if (currentSelectedIndex !== -1 && currentSelectedIndex < this.listEntries.length) {
this.selectEntry(currentSelectedIndex);
}
this.unAssignedKeybindingItemToRevealAndFocus = null;
} else if (currentSelectedIndex !== -1 && currentSelectedIndex < this.listEntries.length) {
this.selectEntry(currentSelectedIndex);
}
}
......@@ -405,7 +414,7 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor
private createResetAction(keybindingItem: IKeybindingItemEntry): IAction {
return <IAction>{
label: localize('resetLabel', "Reset Keybinding"),
enabled: !!keybindingItem.keybindingItem.keybinding && !keybindingItem.keybindingItem.keybindingItem.isDefault,
enabled: !keybindingItem.keybindingItem.keybindingItem.isDefault,
id: KEYBINDINGS_EDITOR_COMMAND_RESET,
run: () => this.resetKeybinding(keybindingItem)
};
......
......@@ -67,7 +67,8 @@
}
.keybindings-editor > .keybindings-body > .keybindings-list-container .monaco-list-row.keybindings-list-header,
.keybindings-editor > .keybindings-body > .keybindings-list-container .monaco-list-row.even:not(.focused):not(.selected):not(:hover) {
.keybindings-editor > .keybindings-body > .keybindings-list-container .monaco-list-row.even:not(.focused):not(.selected):not(:hover),
.keybindings-editor > .keybindings-body > .keybindings-list-container .monaco-list:not(:focus) .monaco-list-row.focused.even:not(.selected):not(:hover) {
background-color: rgba(130, 130, 130, 0.04);
}
......
......@@ -110,8 +110,10 @@ export class KeybindingsEditorModel extends EditorModel {
}
}
const commandsWithDefaultKeybindings = this.keybindingsService.getDefaultKeybindings().map(keybinding => keybinding.command);
for (const command of KeybindingResolver.getAllUnboundCommands(boundCommands)) {
this._keybindingItems.push(KeybindingsEditorModel.toKeybindingEntry(command, null, workbenchActionsRegistry, editorActions));
const keybindingItem = new ResolvedKeybindingItem(null, command, null, null, commandsWithDefaultKeybindings.indexOf(command) === -1);
this._keybindingItems.push(KeybindingsEditorModel.toKeybindingEntry(command, keybindingItem, workbenchActionsRegistry, editorActions));
}
this._keybindingItems = this._keybindingItems.sort((a, b) => KeybindingsEditorModel.compareKeybindingData(a, b));
return this;
......@@ -150,7 +152,6 @@ export class KeybindingsEditorModel extends EditorModel {
const workbenchAction = workbenchActionsRegistry.getWorkbenchAction(command);
const menuCommand = MenuRegistry.getCommand(command);
const editorAction: EditorAction = editorActions[command];
keybindingItem = keybindingItem ? keybindingItem : new ResolvedKeybindingItem(null, command, null, null, true);
return <IKeybindingItem>{
keybinding: keybindingItem.resolvedKeybinding,
keybindingItem,
......
......@@ -706,7 +706,7 @@ export class DefaultKeybindingsEditorModel implements IKeybindingsEditorModel<an
public get content(): string {
if (!this._content) {
const defaultsHeader = '// ' + nls.localize('defaultKeybindingsHeader', "Overwrite key bindings by placing them into your key bindings file.");
this._content = defaultsHeader + '\n' + this.keybindingService.getDefaultKeybindings();
this._content = defaultsHeader + '\n' + this.keybindingService.getDefaultKeybindingsContent();
}
return this._content;
}
......
......@@ -532,7 +532,7 @@ export class WorkbenchKeybindingService extends AbstractKeybindingService {
return desc;
}
public getDefaultKeybindings(): string {
public getDefaultKeybindingsContent(): string {
const resolver = this._getResolver();
const defaultKeybindings = resolver.getDefaultKeybindings();
const boundCommands = resolver.getDefaultBoundCommands();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册