This commit is contained in:
Sandeep Somavarapu 2021-04-16 18:01:04 +02:00
parent 6b7a55444a
commit 880363524f
No known key found for this signature in database
GPG key ID: 1FED25EC4646638B
5 changed files with 55 additions and 5 deletions

View file

@ -174,6 +174,10 @@ export class BaseActionViewItem extends Disposable implements IActionViewItem {
}
}
isFocused(): boolean {
return !!this.element?.classList.contains('focused');
}
blur(): void {
if (this.element) {
this.element.blur();
@ -283,6 +287,10 @@ export class ActionViewItem extends BaseActionViewItem {
}
}
override isFocused(): boolean {
return !!this.label && this.label?.tabIndex === 0;
}
override blur(): void {
if (this.label) {
this.label.tabIndex = -1;

View file

@ -7,14 +7,15 @@ import 'vs/css!./dropdown';
import { Action, IAction, IActionRunner } from 'vs/base/common/actions';
import { IDisposable } from 'vs/base/common/lifecycle';
import { AnchorAlignment } from 'vs/base/browser/ui/contextview/contextview';
import { ResolvedKeybinding } from 'vs/base/common/keyCodes';
import { append, $ } from 'vs/base/browser/dom';
import { KeyCode, ResolvedKeybinding } from 'vs/base/common/keyCodes';
import { append, $, addDisposableListener, EventType } from 'vs/base/browser/dom';
import { Emitter } from 'vs/base/common/event';
import { ActionViewItem, BaseActionViewItem, IActionViewItemOptions, IBaseActionViewItemOptions } from 'vs/base/browser/ui/actionbar/actionViewItems';
import { IActionProvider, DropdownMenu, IDropdownMenuOptions, ILabelRenderer } from 'vs/base/browser/ui/dropdown/dropdown';
import { IContextMenuProvider } from 'vs/base/browser/contextmenu';
import { Codicon } from 'vs/base/common/codicons';
import { IActionViewItemProvider } from 'vs/base/browser/ui/actionbar/actionbar';
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
export interface IKeybindingProvider {
(action: IAction): ResolvedKeybinding | undefined;
@ -184,6 +185,34 @@ export class ActionWithDropdownActionViewItem extends ActionViewItem {
};
this.dropdownMenuActionViewItem = new DropdownMenuActionViewItem(this._register(new Action('dropdownAction', undefined)), menuActionsProvider, this.contextMenuProvider, { classNames: ['dropdown', ...Codicon.dropDownButton.classNamesArray, ...(<IActionWithDropdownActionViewItemOptions>this.options).menuActionClassNames || []] });
this.dropdownMenuActionViewItem.render(this.element);
this._register(addDisposableListener(this.element, EventType.KEY_DOWN, e => {
const event = new StandardKeyboardEvent(e);
let handled: boolean = false;
if (this.dropdownMenuActionViewItem?.isFocused() && event.equals(KeyCode.LeftArrow)) {
handled = true;
this.dropdownMenuActionViewItem?.blur();
this.focus();
} else if (this.isFocused() && event.equals(KeyCode.RightArrow)) {
handled = true;
this.blur();
this.dropdownMenuActionViewItem?.focus();
}
if (handled) {
event.preventDefault();
event.stopPropagation();
}
}));
}
}
override blur(): void {
super.blur();
this.dropdownMenuActionViewItem?.blur();
}
override setFocusable(focusable: boolean): void {
super.setFocusable(focusable);
this.dropdownMenuActionViewItem?.setFocusable(focusable);
}
}

View file

@ -29,7 +29,8 @@
width: auto;
height: auto;
line-height: 14px;
margin-top: 2px;
margin-top: 2px; /* margin for outline */
margin-bottom: 2px; /* margin for outline */
}
.monaco-action-bar .action-item .action-label.extension-action.multiserver.install:after,

View file

@ -158,8 +158,15 @@
min-width: 0;
}
.extension-editor > .header > .details > .actions > .monaco-action-bar > .actions-container > .action-item > .extension-action:not(.icon) {
margin-left: 2px; /* margin for outline */
}
.extension-editor > .header > .details > .actions > .monaco-action-bar > .actions-container > .action-item.action-dropdown-item > .monaco-dropdown .extension-action.action-dropdown {
margin-right: 2px; /* margin for outline */
}
.extension-editor > .header > .details > .actions > .monaco-action-bar > .actions-container > .action-item .extension-action:not(.icon) {
margin-top: 0px; /* overrides from extension actions */
border-radius: 0;
padding-top: 0;
padding-bottom: 0;
@ -172,7 +179,7 @@
.extension-editor > .header > .details > .actions > .monaco-action-bar > .actions-container > .action-item.action-dropdown-item,
.extension-editor > .header > .details > .actions > .monaco-action-bar > .actions-container > .action-item:not(.action-dropdown-item) > .extension-action {
margin-right: 8px;
margin-right: 6px;
}
.extension-editor > .header > .details > .actions > .monaco-action-bar > .actions-container > .action-item > .extension-action.label,

View file

@ -57,6 +57,11 @@
display: none;
}
.extensions-viewlet > .extensions .extension-list-item .monaco-action-bar > .actions-container > .action-item.action-dropdown-item,
.extensions-viewlet > .extensions .extension-list-item .monaco-action-bar > .actions-container > .action-item:not(.action-dropdown-item) > .extension-action {
margin-left: 6px;
}
.extensions-viewlet > .extensions .extensions-list.hidden,
.extensions-viewlet > .extensions .message-container.hidden {
display: none;