diff --git a/src/vs/base/browser/ui/menu/menubar.ts b/src/vs/base/browser/ui/menu/menubar.ts index 5c6ff94f205..2e58738bdab 100644 --- a/src/vs/base/browser/ui/menu/menubar.ts +++ b/src/vs/base/browser/ui/menu/menubar.ts @@ -17,7 +17,7 @@ import { ThemeIcon } from 'vs/base/common/themables'; import { Emitter, Event } from 'vs/base/common/event'; import { KeyCode, KeyMod, ScanCode, ScanCodeUtils } from 'vs/base/common/keyCodes'; import { ResolvedKeybinding } from 'vs/base/common/keybindings'; -import { Disposable, dispose, IDisposable } from 'vs/base/common/lifecycle'; +import { Disposable, DisposableStore, dispose, IDisposable } from 'vs/base/common/lifecycle'; import { isMacintosh } from 'vs/base/common/platform'; import * as strings from 'vs/base/common/strings'; import 'vs/css!./menubar'; @@ -87,6 +87,8 @@ export class MenuBar extends Disposable { private numMenusShown: number = 0; private overflowLayoutScheduled: IDisposable | undefined = undefined; + private readonly menuDisposables = this._register(new DisposableStore()); + constructor(private container: HTMLElement, private options: IMenuBarOptions, private menuStyle: IMenuStyles) { super(); @@ -751,6 +753,7 @@ export class MenuBar extends Disposable { } if (this.focusedMenu) { + this.cleanupCustomMenu(); this.showCustomMenu(this.focusedMenu.index, this.openedViaKeyboard); } break; @@ -985,6 +988,7 @@ export class MenuBar extends Disposable { this.focusedMenu = { index: this.focusedMenu.index }; } + this.menuDisposables.clear(); } private showCustomMenu(menuIndex: number, selectFirst = true): void { @@ -1025,9 +1029,8 @@ export class MenuBar extends Disposable { useEventAsContext: true }; - const menuWidget = this._register(new Menu(menuHolder, customMenu.actions, menuOptions, this.menuStyle)); - - this._register(menuWidget.onDidCancel(() => { + const menuWidget = this.menuDisposables.add(new Menu(menuHolder, customMenu.actions, menuOptions, this.menuStyle)); + this.menuDisposables.add(menuWidget.onDidCancel(() => { this.focusState = MenubarState.FOCUSED; }));