mirror of
https://github.com/Microsoft/vscode
synced 2024-10-05 19:02:54 +00:00
Merge pull request #209292 from microsoft/merogge/tab-action-bar
register `Action`s created in `getTerminalActionBarArgs`
This commit is contained in:
commit
2c3efed801
|
@ -5,7 +5,7 @@
|
|||
|
||||
import * as dom from 'vs/base/browser/dom';
|
||||
import { IActionViewItem } from 'vs/base/browser/ui/actionbar/actionbar';
|
||||
import { IAction } from 'vs/base/common/actions';
|
||||
import { Action, IAction } from 'vs/base/common/actions';
|
||||
import { CancellationToken } from 'vs/base/common/cancellation';
|
||||
import { DropdownWithPrimaryActionViewItem } from 'vs/platform/actions/browser/dropdownWithPrimaryActionViewItem';
|
||||
import { IMenu, IMenuService, MenuId, MenuItemAction } from 'vs/platform/actions/common/actions';
|
||||
|
@ -30,6 +30,7 @@ import { openContextMenu } from 'vs/workbench/contrib/terminal/browser/terminalC
|
|||
import { ACTIVE_GROUP } from 'vs/workbench/services/editor/common/editorService';
|
||||
import { IWorkbenchLayoutService, Parts } from 'vs/workbench/services/layout/browser/layoutService';
|
||||
import { IBaseActionViewItemOptions } from 'vs/base/browser/ui/actionbar/actionViewItems';
|
||||
import { DisposableStore } from 'vs/base/common/lifecycle';
|
||||
|
||||
export class TerminalEditor extends EditorPane {
|
||||
|
||||
|
@ -46,6 +47,8 @@ export class TerminalEditor extends EditorPane {
|
|||
|
||||
private _cancelContextMenu: boolean = false;
|
||||
|
||||
private _disposableStore = this._register(new DisposableStore());
|
||||
|
||||
constructor(
|
||||
group: IEditorGroup,
|
||||
@ITelemetryService telemetryService: ITelemetryService,
|
||||
|
@ -212,6 +215,7 @@ export class TerminalEditor extends EditorPane {
|
|||
if (action instanceof MenuItemAction) {
|
||||
const location = { viewColumn: ACTIVE_GROUP };
|
||||
const actions = getTerminalActionBarArgs(location, this._terminalProfileService.availableProfiles, this._getDefaultProfileName(), this._terminalProfileService.contributedProfiles, this._terminalService, this._dropdownMenu);
|
||||
this._registerDisposableActions(actions.dropdownAction, actions.dropdownMenuActions);
|
||||
const button = this._instantiationService.createInstance(DropdownWithPrimaryActionViewItem, action, actions.dropdownAction, actions.dropdownMenuActions, actions.className, this._contextMenuService, { hoverDelegate: options.hoverDelegate });
|
||||
return button;
|
||||
}
|
||||
|
@ -220,6 +224,17 @@ export class TerminalEditor extends EditorPane {
|
|||
return super.getActionViewItem(action, options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Actions might be of type Action (disposable) or Separator or SubmenuAction, which don't extend Disposable
|
||||
*/
|
||||
private _registerDisposableActions(dropdownAction: IAction, dropdownMenuActions: IAction[]): void {
|
||||
this._disposableStore.clear();
|
||||
if (dropdownAction instanceof Action) {
|
||||
this._disposableStore.add(dropdownAction);
|
||||
}
|
||||
dropdownMenuActions.filter(a => a instanceof Action).forEach(a => this._disposableStore.add(a));
|
||||
}
|
||||
|
||||
private _getDefaultProfileName(): string {
|
||||
let defaultProfileName;
|
||||
try {
|
||||
|
|
|
@ -33,7 +33,7 @@ import { renderLabelWithIcons } from 'vs/base/browser/ui/iconLabel/iconLabels';
|
|||
import { getColorForSeverity } from 'vs/workbench/contrib/terminal/browser/terminalStatusList';
|
||||
import { createAndFillInContextMenuActions, MenuEntryActionViewItem } from 'vs/platform/actions/browser/menuEntryActionViewItem';
|
||||
import { DropdownWithPrimaryActionViewItem } from 'vs/platform/actions/browser/dropdownWithPrimaryActionViewItem';
|
||||
import { dispose, IDisposable, toDisposable } from 'vs/base/common/lifecycle';
|
||||
import { DisposableStore, dispose, IDisposable, toDisposable } from 'vs/base/common/lifecycle';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { ColorScheme } from 'vs/platform/theme/common/theme';
|
||||
import { getColorClass, getUriClasses } from 'vs/workbench/contrib/terminal/browser/terminalIcon';
|
||||
|
@ -58,6 +58,7 @@ export class TerminalViewPane extends ViewPane {
|
|||
private readonly _dropdownMenu: IMenu;
|
||||
private readonly _singleTabMenu: IMenu;
|
||||
private _viewShowing: IContextKey<boolean>;
|
||||
private _disposableStore = this._register(new DisposableStore());
|
||||
|
||||
constructor(
|
||||
options: IViewPaneOptions,
|
||||
|
@ -272,6 +273,7 @@ export class TerminalViewPane extends ViewPane {
|
|||
case TerminalCommandId.New: {
|
||||
if (action instanceof MenuItemAction) {
|
||||
const actions = getTerminalActionBarArgs(TerminalLocation.Panel, this._terminalProfileService.availableProfiles, this._getDefaultProfileName(), this._terminalProfileService.contributedProfiles, this._terminalService, this._dropdownMenu);
|
||||
this._registerDisposableActions(actions.dropdownAction, actions.dropdownMenuActions);
|
||||
this._newDropdown?.dispose();
|
||||
this._newDropdown = new DropdownWithPrimaryActionViewItem(action, actions.dropdownAction, actions.dropdownMenuActions, actions.className, this._contextMenuService, { hoverDelegate: options.hoverDelegate }, this._keybindingService, this._notificationService, this._contextKeyService, this._themeService, this._accessibilityService);
|
||||
this._updateTabActionBar(this._terminalProfileService.availableProfiles);
|
||||
|
@ -282,6 +284,17 @@ export class TerminalViewPane extends ViewPane {
|
|||
return super.getActionViewItem(action, options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Actions might be of type Action (disposable) or Separator or SubmenuAction, which don't extend Disposable
|
||||
*/
|
||||
private _registerDisposableActions(dropdownAction: IAction, dropdownMenuActions: IAction[]): void {
|
||||
this._disposableStore.clear();
|
||||
if (dropdownAction instanceof Action) {
|
||||
this._disposableStore.add(dropdownAction);
|
||||
}
|
||||
dropdownMenuActions.filter(a => a instanceof Action).forEach(a => this._disposableStore.add(a));
|
||||
}
|
||||
|
||||
private _getDefaultProfileName(): string {
|
||||
let defaultProfileName;
|
||||
try {
|
||||
|
@ -298,6 +311,7 @@ export class TerminalViewPane extends ViewPane {
|
|||
|
||||
private _updateTabActionBar(profiles: ITerminalProfile[]): void {
|
||||
const actions = getTerminalActionBarArgs(TerminalLocation.Panel, profiles, this._getDefaultProfileName(), this._terminalProfileService.contributedProfiles, this._terminalService, this._dropdownMenu);
|
||||
this._registerDisposableActions(actions.dropdownAction, actions.dropdownMenuActions);
|
||||
this._newDropdown?.update(actions.dropdownAction, actions.dropdownMenuActions);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue