From 35bad7021df1e9c4c64396256c8ef6fa9b58b370 Mon Sep 17 00:00:00 2001 From: SteVen Batten <6561887+sbatten@users.noreply.github.com> Date: Fri, 6 Nov 2020 10:09:22 -0800 Subject: [PATCH] disable submenus rendered as dropdowns (#109934) * disable submenus rendered as dropdowns fix #109305 * address comments --- src/vs/base/browser/ui/dropdown/dropdown.css | 4 ++++ .../browser/ui/dropdown/dropdownActionViewItem.ts | 11 +++++++++++ src/vs/base/browser/ui/menu/menu.ts | 6 ++++++ src/vs/base/common/actions.ts | 2 +- 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/vs/base/browser/ui/dropdown/dropdown.css b/src/vs/base/browser/ui/dropdown/dropdown.css index fb87b8c5df1..77060ee20b1 100644 --- a/src/vs/base/browser/ui/dropdown/dropdown.css +++ b/src/vs/base/browser/ui/dropdown/dropdown.css @@ -12,3 +12,7 @@ cursor: pointer; height: 100%; } + +.monaco-dropdown > .dropdown-label > .action-label.disabled { + cursor: default; +} diff --git a/src/vs/base/browser/ui/dropdown/dropdownActionViewItem.ts b/src/vs/base/browser/ui/dropdown/dropdownActionViewItem.ts index 5713a8a9337..6540851f701 100644 --- a/src/vs/base/browser/ui/dropdown/dropdownActionViewItem.ts +++ b/src/vs/base/browser/ui/dropdown/dropdownActionViewItem.ts @@ -35,6 +35,7 @@ export class DropdownMenuActionViewItem extends BaseActionViewItem { private menuActionsOrProvider: readonly IAction[] | IActionProvider; private dropdownMenu: DropdownMenu | undefined; private contextMenuProvider: IContextMenuProvider; + private actionItem: HTMLElement | null = null; private _onDidChangeVisibility = this._register(new Emitter()); readonly onDidChangeVisibility = this._onDidChangeVisibility.event; @@ -56,6 +57,8 @@ export class DropdownMenuActionViewItem extends BaseActionViewItem { } render(container: HTMLElement): void { + this.actionItem = container; + const labelRenderer: ILabelRenderer = (el: HTMLElement): IDisposable | null => { this.element = append(el, $('a.action-label')); @@ -115,6 +118,8 @@ export class DropdownMenuActionViewItem extends BaseActionViewItem { } }; } + + this.updateEnabled(); } setActionContext(newContext: unknown): void { @@ -134,6 +139,12 @@ export class DropdownMenuActionViewItem extends BaseActionViewItem { this.dropdownMenu.show(); } } + + protected updateEnabled(): void { + const disabled = !this.getAction().enabled; + this.actionItem?.classList.toggle('disabled', disabled); + this.element?.classList.toggle('disabled', disabled); + } } export interface IActionWithDropdownActionViewItemOptions extends IActionViewItemOptions { diff --git a/src/vs/base/browser/ui/menu/menu.ts b/src/vs/base/browser/ui/menu/menu.ts index 8b3da5df8d8..b445d13d6cb 100644 --- a/src/vs/base/browser/ui/menu/menu.ts +++ b/src/vs/base/browser/ui/menu/menu.ts @@ -777,6 +777,12 @@ class SubmenuMenuActionViewItem extends BaseMenuActionViewItem { })); } + updateEnabled(): void { + // override on submenu entry + // native menus do not observe enablement on sumbenus + // we mimic that behavior + } + open(selectFirst?: boolean): void { this.cleanupExistingSubmenu(false); this.createSubmenu(selectFirst); diff --git a/src/vs/base/common/actions.ts b/src/vs/base/common/actions.ts index cb4b12d5cc1..59c8a97d99e 100644 --- a/src/vs/base/common/actions.ts +++ b/src/vs/base/common/actions.ts @@ -242,7 +242,7 @@ export class SubmenuAction extends Action { } constructor(id: string, label: string, private _actions: IAction[], cssClass?: string) { - super(id, label, cssClass, true); + super(id, label, cssClass, !!_actions?.length); } } -- GitLab