Skip to content

Commit 8a45b1b

Browse files
SimonSiefkebpaserosbatten
authored
fix: memory leak in menubar (microsoft#198052)
* fix: memory leak in menubar * Update src/vs/base/browser/ui/menu/menubar.ts Co-authored-by: Benjamin Pasero <[email protected]> * Update src/vs/base/browser/ui/menu/menubar.ts Co-authored-by: Benjamin Pasero <[email protected]> * Update src/vs/base/browser/ui/menu/menubar.ts Co-authored-by: Benjamin Pasero <[email protected]> * fix: potential memory leak when focusing another menu --------- Co-authored-by: Benjamin Pasero <[email protected]> Co-authored-by: SteVen Batten <[email protected]>
1 parent c60da32 commit 8a45b1b

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

src/vs/base/browser/ui/menu/menubar.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import { ThemeIcon } from 'vs/base/common/themables';
1717
import { Emitter, Event } from 'vs/base/common/event';
1818
import { KeyCode, KeyMod, ScanCode, ScanCodeUtils } from 'vs/base/common/keyCodes';
1919
import { ResolvedKeybinding } from 'vs/base/common/keybindings';
20-
import { Disposable, dispose, IDisposable } from 'vs/base/common/lifecycle';
20+
import { Disposable, DisposableStore, dispose, IDisposable } from 'vs/base/common/lifecycle';
2121
import { isMacintosh } from 'vs/base/common/platform';
2222
import * as strings from 'vs/base/common/strings';
2323
import 'vs/css!./menubar';
@@ -87,6 +87,8 @@ export class MenuBar extends Disposable {
8787
private numMenusShown: number = 0;
8888
private overflowLayoutScheduled: IDisposable | undefined = undefined;
8989

90+
private readonly menuDisposables = this._register(new DisposableStore());
91+
9092
constructor(private container: HTMLElement, private options: IMenuBarOptions, private menuStyle: IMenuStyles) {
9193
super();
9294

@@ -751,6 +753,7 @@ export class MenuBar extends Disposable {
751753
}
752754

753755
if (this.focusedMenu) {
756+
this.cleanupCustomMenu();
754757
this.showCustomMenu(this.focusedMenu.index, this.openedViaKeyboard);
755758
}
756759
break;
@@ -985,6 +988,7 @@ export class MenuBar extends Disposable {
985988

986989
this.focusedMenu = { index: this.focusedMenu.index };
987990
}
991+
this.menuDisposables.clear();
988992
}
989993

990994
private showCustomMenu(menuIndex: number, selectFirst = true): void {
@@ -1025,9 +1029,8 @@ export class MenuBar extends Disposable {
10251029
useEventAsContext: true
10261030
};
10271031

1028-
const menuWidget = this._register(new Menu(menuHolder, customMenu.actions, menuOptions, this.menuStyle));
1029-
1030-
this._register(menuWidget.onDidCancel(() => {
1032+
const menuWidget = this.menuDisposables.add(new Menu(menuHolder, customMenu.actions, menuOptions, this.menuStyle));
1033+
this.menuDisposables.add(menuWidget.onDidCancel(() => {
10311034
this.focusState = MenubarState.FOCUSED;
10321035
}));
10331036

0 commit comments

Comments
 (0)