Use Mutable disposable

This commit is contained in:
Matt Bierner 2019-07-03 15:42:09 -07:00
parent e52805a945
commit 6bb0ffb66e

View file

@ -9,7 +9,7 @@ import { Action, IActionRunner, IAction } from 'vs/base/common/actions';
import { ActionBar, ActionsOrientation, IActionViewItemProvider } from 'vs/base/browser/ui/actionbar/actionbar'; import { ActionBar, ActionsOrientation, IActionViewItemProvider } from 'vs/base/browser/ui/actionbar/actionbar';
import { IContextMenuProvider, DropdownMenuActionViewItem } from 'vs/base/browser/ui/dropdown/dropdown'; import { IContextMenuProvider, DropdownMenuActionViewItem } from 'vs/base/browser/ui/dropdown/dropdown';
import { ResolvedKeybinding } from 'vs/base/common/keyCodes'; import { ResolvedKeybinding } from 'vs/base/common/keyCodes';
import { Disposable } from 'vs/base/common/lifecycle'; import { Disposable, MutableDisposable } from 'vs/base/common/lifecycle';
import { AnchorAlignment } from 'vs/base/browser/ui/contextview/contextview'; import { AnchorAlignment } from 'vs/base/browser/ui/contextview/contextview';
import { withNullAsUndefined } from 'vs/base/common/types'; import { withNullAsUndefined } from 'vs/base/common/types';
@ -32,7 +32,7 @@ export class ToolBar extends Disposable {
private options: IToolBarOptions; private options: IToolBarOptions;
private actionBar: ActionBar; private actionBar: ActionBar;
private toggleMenuAction: ToggleMenuAction; private toggleMenuAction: ToggleMenuAction;
private toggleMenuActionViewItem?: DropdownMenuActionViewItem; private toggleMenuActionViewItem = this._register(new MutableDisposable<DropdownMenuActionViewItem>());
private hasSecondaryActions: boolean; private hasSecondaryActions: boolean;
private lookupKeybindings: boolean; private lookupKeybindings: boolean;
@ -42,7 +42,7 @@ export class ToolBar extends Disposable {
this.options = options; this.options = options;
this.lookupKeybindings = typeof this.options.getKeyBinding === 'function'; this.lookupKeybindings = typeof this.options.getKeyBinding === 'function';
this.toggleMenuAction = this._register(new ToggleMenuAction(() => this.toggleMenuActionViewItem && this.toggleMenuActionViewItem.show(), options.toggleMenuTitle)); this.toggleMenuAction = this._register(new ToggleMenuAction(() => this.toggleMenuActionViewItem.value && this.toggleMenuActionViewItem.value.show(), options.toggleMenuTitle));
let element = document.createElement('div'); let element = document.createElement('div');
element.className = 'monaco-toolbar'; element.className = 'monaco-toolbar';
@ -57,13 +57,8 @@ export class ToolBar extends Disposable {
// Return special action item for the toggle menu action // Return special action item for the toggle menu action
if (action.id === ToggleMenuAction.ID) { if (action.id === ToggleMenuAction.ID) {
// Dispose old
if (this.toggleMenuActionViewItem) {
this.toggleMenuActionViewItem.dispose();
}
// Create new // Create new
this.toggleMenuActionViewItem = new DropdownMenuActionViewItem( this.toggleMenuActionViewItem.value = new DropdownMenuActionViewItem(
action, action,
(<ToggleMenuAction>action).menuActions, (<ToggleMenuAction>action).menuActions,
contextMenuProvider, contextMenuProvider,
@ -73,9 +68,9 @@ export class ToolBar extends Disposable {
'toolbar-toggle-more', 'toolbar-toggle-more',
this.options.anchorAlignmentProvider this.options.anchorAlignmentProvider
); );
this.toggleMenuActionViewItem!.setActionContext(this.actionBar.context); this.toggleMenuActionViewItem.value.setActionContext(this.actionBar.context);
return this.toggleMenuActionViewItem; return this.toggleMenuActionViewItem.value;
} }
return options.actionViewItemProvider ? options.actionViewItemProvider(action) : undefined; return options.actionViewItemProvider ? options.actionViewItemProvider(action) : undefined;
@ -93,8 +88,8 @@ export class ToolBar extends Disposable {
set context(context: any) { set context(context: any) {
this.actionBar.context = context; this.actionBar.context = context;
if (this.toggleMenuActionViewItem) { if (this.toggleMenuActionViewItem.value) {
this.toggleMenuActionViewItem.setActionContext(context); this.toggleMenuActionViewItem.value.setActionContext(context);
} }
} }
@ -154,15 +149,6 @@ export class ToolBar extends Disposable {
} }
}; };
} }
dispose(): void {
if (this.toggleMenuActionViewItem) {
this.toggleMenuActionViewItem.dispose();
this.toggleMenuActionViewItem = undefined;
}
super.dispose();
}
} }
class ToggleMenuAction extends Action { class ToggleMenuAction extends Action {