diff --git a/src/vs/base/browser/ui/actionbar/actionbar.ts b/src/vs/base/browser/ui/actionbar/actionbar.ts index 53d4ec39d95..2a51544c746 100644 --- a/src/vs/base/browser/ui/actionbar/actionbar.ts +++ b/src/vs/base/browser/ui/actionbar/actionbar.ts @@ -151,6 +151,10 @@ export class ActionBar extends Disposable implements IActionRunner { eventHandled = this.focusNext(); } else if (event.equals(KeyCode.Escape) && this.cancelHasListener) { this._onDidCancel.fire(); + } else if (event.equals(KeyCode.Home)) { + eventHandled = this.focusFirst(); + } else if (event.equals(KeyCode.End)) { + eventHandled = this.focusLast(); } else if (event.equals(KeyCode.Tab) && focusedItem instanceof BaseActionViewItem && focusedItem.trapsArrowNavigation) { eventHandled = this.focusNext(); } else if (this.isTriggerKeyEvent(event)) { @@ -413,6 +417,16 @@ export class ActionBar extends Disposable implements IActionRunner { } } + private focusFirst(): boolean { + this.focusedItem = this.length() > 1 ? 1 : 0; + return this.focusPrevious(); + } + + private focusLast(): boolean { + this.focusedItem = this.length() < 2 ? 0 : this.length() - 2; + return this.focusNext(); + } + protected focusNext(): boolean { if (typeof this.focusedItem === 'undefined') { this.focusedItem = this.viewItems.length - 1;