提交 b63cd542 编写于 作者: S Sandeep Somavarapu

Fix #23395

上级 a9544249
...@@ -149,7 +149,7 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor ...@@ -149,7 +149,7 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor
focus(): void { focus(): void {
const activeKeybindingEntry = this.activeKeybindingEntry; const activeKeybindingEntry = this.activeKeybindingEntry;
if (activeKeybindingEntry) { if (activeKeybindingEntry) {
this.focusEntry(activeKeybindingEntry); this.selectEntry(activeKeybindingEntry);
} else { } else {
this.searchWidget.focus(); this.searchWidget.focus();
} }
...@@ -161,6 +161,7 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor ...@@ -161,6 +161,7 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor
} }
defineKeybinding(keybindingEntry: IKeybindingItemEntry): TPromise<any> { defineKeybinding(keybindingEntry: IKeybindingItemEntry): TPromise<any> {
this.selectEntry(keybindingEntry);
this.showOverlayContainer(); this.showOverlayContainer();
return this.defineKeybindingWidget.define().then(key => { return this.defineKeybindingWidget.define().then(key => {
if (key) { if (key) {
...@@ -174,40 +175,43 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor ...@@ -174,40 +175,43 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor
return null; return null;
}).then(() => { }).then(() => {
this.hideOverlayContainer(); this.hideOverlayContainer();
this.focusEntry(keybindingEntry); this.selectEntry(keybindingEntry);
}, error => { }, error => {
this.hideOverlayContainer(); this.hideOverlayContainer();
this.onKeybindingEditingError(error); this.onKeybindingEditingError(error);
this.focusEntry(keybindingEntry); this.selectEntry(keybindingEntry);
return error; return error;
}); });
} }
removeKeybinding(keybindingEntry: IKeybindingItemEntry): TPromise<any> { removeKeybinding(keybindingEntry: IKeybindingItemEntry): TPromise<any> {
this.selectEntry(keybindingEntry);
if (keybindingEntry.keybindingItem.keybinding) { // This should be a pre-condition if (keybindingEntry.keybindingItem.keybinding) { // This should be a pre-condition
return this.keybindingEditingService.removeKeybinding(keybindingEntry.keybindingItem.keybindingItem) return this.keybindingEditingService.removeKeybinding(keybindingEntry.keybindingItem.keybindingItem)
.then(() => this.focus(), .then(() => this.focus(),
error => { error => {
this.onKeybindingEditingError(error); this.onKeybindingEditingError(error);
this.focusEntry(keybindingEntry); this.selectEntry(keybindingEntry);
}); });
} }
return TPromise.as(null); return TPromise.as(null);
} }
resetKeybinding(keybindingEntry: IKeybindingItemEntry): TPromise<any> { resetKeybinding(keybindingEntry: IKeybindingItemEntry): TPromise<any> {
this.selectEntry(keybindingEntry);
if (keybindingEntry.keybindingItem.keybinding) { // This should be a pre-condition if (keybindingEntry.keybindingItem.keybinding) { // This should be a pre-condition
return this.keybindingEditingService.resetKeybinding(keybindingEntry.keybindingItem.keybindingItem) return this.keybindingEditingService.resetKeybinding(keybindingEntry.keybindingItem.keybindingItem)
.then(() => this.focus(), .then(() => this.focus(),
error => { error => {
this.onKeybindingEditingError(error); this.onKeybindingEditingError(error);
this.focusEntry(keybindingEntry); this.selectEntry(keybindingEntry);
}); });
} }
return TPromise.as(null); return TPromise.as(null);
} }
copyKeybinding(keybinding: IKeybindingItemEntry): TPromise<any> { copyKeybinding(keybinding: IKeybindingItemEntry): TPromise<any> {
this.selectEntry(keybinding);
const userFriendlyKeybinding: IUserFriendlyKeybinding = { const userFriendlyKeybinding: IUserFriendlyKeybinding = {
command: keybinding.keybindingItem.command, command: keybinding.keybindingItem.command,
key: keybinding.keybindingItem.keybinding ? keybinding.keybindingItem.keybinding.getUserSettingsLabel() : '' key: keybinding.keybindingItem.keybinding ? keybinding.keybindingItem.keybinding.getUserSettingsLabel() : ''
...@@ -279,10 +283,10 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor ...@@ -279,10 +283,10 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor
private createList(parent: HTMLElement): void { private createList(parent: HTMLElement): void {
this.keybindingsListContainer = DOM.append(parent, $('.keybindings-list-container')); this.keybindingsListContainer = DOM.append(parent, $('.keybindings-list-container'));
this.keybindingsList = this._register(new List<IListEntry>(this.keybindingsListContainer, new Delegate(), [new KeybindingHeaderRenderer(), new KeybindingItemRenderer(this, this.keybindingsService)], { identityProvider: e => e.id })); this.keybindingsList = this._register(new List<IListEntry>(this.keybindingsListContainer, new Delegate(), [new KeybindingHeaderRenderer(), new KeybindingItemRenderer(this, this.keybindingsService)],
{ identityProvider: e => e.id, keyboardSupport: true, mouseSupport: true, ariaLabel: localize('keybindingsLabel', "Keybindings") }));
this._register(this.keybindingsList.onContextMenu(e => this.onContextMenu(e))); this._register(this.keybindingsList.onContextMenu(e => this.onContextMenu(e)));
this._register(this.keybindingsList.onFocusChange(e => this.onFocusChange(e))); this._register(this.keybindingsList.onFocusChange(e => this.onFocusChange(e)));
this._register(this.keybindingsList.onDOMFocus(() => this.onKeybindingsListDOMFocus()));
this._register(this.keybindingsList.onDOMBlur(() => this.keybindingFocusContextKey.reset())); this._register(this.keybindingsList.onDOMBlur(() => this.keybindingFocusContextKey.reset()));
this._register(this.listService.register(this.keybindingsList)); this._register(this.listService.register(this.keybindingsList));
...@@ -298,7 +302,7 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor ...@@ -298,7 +302,7 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor
} }
private renderKeybindingsEntries(keybindingsEntries: IKeybindingItemEntry[]): void { private renderKeybindingsEntries(keybindingsEntries: IKeybindingItemEntry[]): void {
const currentFocussedIndex = this.keybindingsList.getFocus()[0]; const currentSelectedIndex = this.keybindingsList.getSelection()[0];
this.listEntries = [{ id: 'keybinding-header-entry', templateId: KEYBINDING_HEADER_TEMPLATE_ID }, ...keybindingsEntries]; this.listEntries = [{ id: 'keybinding-header-entry', templateId: KEYBINDING_HEADER_TEMPLATE_ID }, ...keybindingsEntries];
this.keybindingsList.splice(0, this.keybindingsList.length, this.listEntries); this.keybindingsList.splice(0, this.keybindingsList.length, this.listEntries);
this.layoutKebindingsList(); this.layoutKebindingsList();
...@@ -307,11 +311,11 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor ...@@ -307,11 +311,11 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor
const index = this.getNewIndexOfUnassignedKeybinding(this.unAssignedKeybindingItemToRevealAndFocus); const index = this.getNewIndexOfUnassignedKeybinding(this.unAssignedKeybindingItemToRevealAndFocus);
if (index !== -1) { if (index !== -1) {
this.keybindingsList.reveal(index, 0.2); this.keybindingsList.reveal(index, 0.2);
this.keybindingsList.setFocus([index]); this.selectEntry(index);
} }
this.unAssignedKeybindingItemToRevealAndFocus = null; this.unAssignedKeybindingItemToRevealAndFocus = null;
} else if (currentFocussedIndex !== -1 && currentFocussedIndex < this.listEntries.length) { } else if (currentSelectedIndex !== -1 && currentSelectedIndex < this.listEntries.length) {
this.keybindingsList.setFocus([currentFocussedIndex]); this.selectEntry(currentSelectedIndex);
} }
} }
...@@ -346,23 +350,26 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor ...@@ -346,23 +350,26 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor
return -1; return -1;
} }
private focusEntry(keybindingItemEntry: IKeybindingItemEntry): void { private selectEntry(keybindingItemEntry: IKeybindingItemEntry | number): void {
const index = this.getIndexOf(keybindingItemEntry); const index = typeof keybindingItemEntry === 'number' ? keybindingItemEntry : this.getIndexOf(keybindingItemEntry);
if (index !== -1) { if (index !== -1) {
this.keybindingsList.getHTMLElement().focus(); this.keybindingsList.getHTMLElement().focus();
this.keybindingsList.setFocus([index]); this.keybindingsList.setFocus([index]);
this.keybindingsList.setSelection([index]);
} }
} }
private _onNavigate(back: boolean): void { private _onNavigate(back: boolean): void {
if (!back) { if (!back) {
this.keybindingsList.getHTMLElement().focus(); this.keybindingsList.getHTMLElement().focus();
this.keybindingsList.setFocus([0]); const currentFocusIndices = this.keybindingsList.getFocus();
this.keybindingsList.setFocus([currentFocusIndices.length ? currentFocusIndices[0] : 0]);
} }
} }
private onContextMenu(e: IListContextMenuEvent<IListEntry>): void { private onContextMenu(e: IListContextMenuEvent<IListEntry>): void {
if (e.element.templateId === KEYBINDING_ENTRY_TEMPLATE_ID) { if (e.element.templateId === KEYBINDING_ENTRY_TEMPLATE_ID) {
this.selectEntry(<IKeybindingItemEntry>e.element);
this.contextMenuService.showContextMenu({ this.contextMenuService.showContextMenu({
getAnchor: () => e.anchor, getAnchor: () => e.anchor,
getActions: () => TPromise.as([this.createCopyAction(<IKeybindingItemEntry>e.element), new Separator(), this.createRemoveAction(<IKeybindingItemEntry>e.element), this.createResetAction(<IKeybindingItemEntry>e.element)]), getActions: () => TPromise.as([this.createCopyAction(<IKeybindingItemEntry>e.element), new Separator(), this.createRemoveAction(<IKeybindingItemEntry>e.element), this.createResetAction(<IKeybindingItemEntry>e.element)]),
...@@ -386,12 +393,6 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor ...@@ -386,12 +393,6 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor
} }
} }
private onKeybindingsListDOMFocus(): void {
if (!this.keybindingsList.getFocusedElements().length) {
this.keybindingsList.focusNext();
}
}
private createRemoveAction(keybindingItem: IKeybindingItemEntry): IAction { private createRemoveAction(keybindingItem: IKeybindingItemEntry): IAction {
return <IAction>{ return <IAction>{
label: localize('removeLabel', "Remove Keybinding"), label: localize('removeLabel', "Remove Keybinding"),
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册