diff --git a/src/vs/workbench/api/browser/mainThreadTreeViews.ts b/src/vs/workbench/api/browser/mainThreadTreeViews.ts index ad6142a91439e..4753211a74ba4 100644 --- a/src/vs/workbench/api/browser/mainThreadTreeViews.ts +++ b/src/vs/workbench/api/browser/mainThreadTreeViews.ts @@ -168,7 +168,6 @@ export class MainThreadTreeViews extends Disposable implements MainThreadTreeVie this._register(treeView.onDidExpandItem(item => this._proxy.$setExpanded(treeViewId, item.handle, true))); this._register(treeView.onDidCollapseItem(item => this._proxy.$setExpanded(treeViewId, item.handle, false))); this._register(treeView.onDidChangeSelection(items => this._proxy.$setSelection(treeViewId, items.map(({ handle }) => handle)))); - this._register(treeView.onDidChangeFocus(item => this._proxy.$setFocus(treeViewId, item.handle))); this._register(treeView.onDidChangeVisibility(isVisible => this._proxy.$setVisible(treeViewId, isVisible))); } diff --git a/src/vs/workbench/api/common/extHost.protocol.ts b/src/vs/workbench/api/common/extHost.protocol.ts index 2316c9312a334..10efae0f6dcfa 100644 --- a/src/vs/workbench/api/common/extHost.protocol.ts +++ b/src/vs/workbench/api/common/extHost.protocol.ts @@ -1406,7 +1406,6 @@ export interface ExtHostTreeViewsShape { $handleDrag(sourceViewId: string, sourceTreeItemHandles: string[], operationUuid: string, token: CancellationToken): Promise; $setExpanded(treeViewId: string, treeItemHandle: string, expanded: boolean): void; $setSelection(treeViewId: string, treeItemHandles: string[]): void; - $setFocus(treeViewId: string, treeItemHandle: string): void; $setVisible(treeViewId: string, visible: boolean): void; $hasResolve(treeViewId: string): Promise; $resolve(treeViewId: string, treeItemHandle: string, token: CancellationToken): Promise; diff --git a/src/vs/workbench/api/common/extHostTreeViews.ts b/src/vs/workbench/api/common/extHostTreeViews.ts index b5b3f8350be05..3c3a7e24e570a 100644 --- a/src/vs/workbench/api/common/extHostTreeViews.ts +++ b/src/vs/workbench/api/common/extHostTreeViews.ts @@ -11,7 +11,7 @@ import { URI } from 'vs/base/common/uri'; import { Emitter, Event } from 'vs/base/common/event'; import { Disposable, DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; import { DataTransferDTO, ExtHostTreeViewsShape, MainThreadTreeViewsShape } from './extHost.protocol'; -import { ITreeItem, TreeViewItemHandleArg, ITreeItemLabel, IRevealOptions, TreeCommand, TreeViewPaneHandleArg } from 'vs/workbench/common/views'; +import { ITreeItem, TreeViewItemHandleArg, ITreeItemLabel, IRevealOptions, TreeCommand } from 'vs/workbench/common/views'; import { ExtHostCommands, CommandsConverter } from 'vs/workbench/api/common/extHostCommands'; import { asPromise } from 'vs/base/common/async'; import { TreeItemCollapsibleState, ThemeIcon, MarkdownString as MarkdownStringType, TreeItem } from 'vs/workbench/api/common/extHostTypes'; @@ -58,16 +58,16 @@ export class ExtHostTreeViews implements ExtHostTreeViewsShape { private logService: ILogService ) { - function isTreeViewConvertableItem(arg: any): boolean { - return arg && arg.$treeViewId && (arg.$treeItemHandle || arg.$selectedTreeItems || arg.$focusedTreeItem); + function isTreeViewItemHandleArg(arg: any): boolean { + return arg && arg.$treeViewId && arg.$treeItemHandle; } commands.registerArgumentProcessor({ processArgument: arg => { - if (isTreeViewConvertableItem(arg)) { + if (isTreeViewItemHandleArg(arg)) { return this.convertArgument(arg); } else if (Array.isArray(arg) && (arg.length > 0)) { return arg.map(item => { - if (isTreeViewConvertableItem(item)) { + if (isTreeViewItemHandleArg(item)) { return this.convertArgument(item); } return item; @@ -221,14 +221,6 @@ export class ExtHostTreeViews implements ExtHostTreeViewsShape { treeView.setSelection(treeItemHandles); } - $setFocus(treeViewId: string, treeItemHandles: string) { - const treeView = this.treeViews.get(treeViewId); - if (!treeView) { - throw new Error(localize('treeView.notRegistered', 'No tree view with id \'{0}\' registered.', treeViewId)); - } - treeView.setFocus(treeItemHandles); - } - $setVisible(treeViewId: string, isVisible: boolean): void { const treeView = this.treeViews.get(treeViewId); if (!treeView) { @@ -243,15 +235,9 @@ export class ExtHostTreeViews implements ExtHostTreeViewsShape { return treeView; } - private convertArgument(arg: TreeViewItemHandleArg | TreeViewPaneHandleArg): any { + private convertArgument(arg: TreeViewItemHandleArg): any { const treeView = this.treeViews.get(arg.$treeViewId); - if (treeView && '$treeItemHandle' in arg) { - return treeView.getExtensionElement(arg.$treeItemHandle); - } - if (treeView && '$focusedTreeItem' in arg && arg.$focusedTreeItem) { - return treeView.focusedElement; - } - return null; + return treeView ? treeView.getExtensionElement(arg.$treeItemHandle) : null; } } @@ -284,9 +270,6 @@ class ExtHostTreeView extends Disposable { private _selectedHandles: TreeItemHandle[] = []; get selectedElements(): T[] { return this._selectedHandles.map(handle => this.getExtensionElement(handle)).filter(element => !isUndefinedOrNull(element)); } - private _focusedHandle: TreeItemHandle | undefined = undefined; - get focusedElement(): T | undefined { return (this._focusedHandle ? this.getExtensionElement(this._focusedHandle) : undefined); } - private _onDidExpandElement: Emitter> = this._register(new Emitter>()); readonly onDidExpandElement: Event> = this._onDidExpandElement.event; @@ -466,10 +449,6 @@ class ExtHostTreeView extends Disposable { } } - setFocus(treeItemHandle: TreeItemHandle) { - this._focusedHandle = treeItemHandle; - } - setVisible(visible: boolean): void { if (visible !== this._visible) { this._visible = visible; diff --git a/src/vs/workbench/browser/parts/views/treeView.ts b/src/vs/workbench/browser/parts/views/treeView.ts index ba93aaf42ae6b..423e7221b3a7b 100644 --- a/src/vs/workbench/browser/parts/views/treeView.ts +++ b/src/vs/workbench/browser/parts/views/treeView.ts @@ -59,7 +59,7 @@ import { API_OPEN_DIFF_EDITOR_COMMAND_ID, API_OPEN_EDITOR_COMMAND_ID } from 'vs/ import { IViewPaneOptions, ViewPane } from 'vs/workbench/browser/parts/views/viewPane'; import { IViewletViewOptions } from 'vs/workbench/browser/parts/views/viewsViewlet'; import { PANEL_BACKGROUND, SIDE_BAR_BACKGROUND } from 'vs/workbench/common/theme'; -import { Extensions, ITreeItem, ITreeItemLabel, ITreeView, ITreeViewDataProvider, ITreeViewDescriptor, ITreeViewDragAndDropController, IViewBadge, IViewDescriptorService, IViewsRegistry, ResolvableTreeItem, TreeCommand, TreeItemCollapsibleState, TreeViewItemHandleArg, TreeViewPaneHandleArg, ViewContainer, ViewContainerLocation } from 'vs/workbench/common/views'; +import { Extensions, ITreeItem, ITreeItemLabel, ITreeView, ITreeViewDataProvider, ITreeViewDescriptor, ITreeViewDragAndDropController, IViewBadge, IViewDescriptorService, IViewsRegistry, ResolvableTreeItem, TreeCommand, TreeItemCollapsibleState, TreeViewItemHandleArg, ViewContainer, ViewContainerLocation } from 'vs/workbench/common/views'; import { IActivityService, NumberBadge } from 'vs/workbench/services/activity/common/activity'; import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; import { IHoverService } from 'vs/workbench/services/hover/browser/hover'; @@ -71,7 +71,6 @@ export class TreeViewPane extends ViewPane { protected readonly treeView: ITreeView; private _container: HTMLElement | undefined; - private _actionRunner: MultipleSelectionActionRunner; constructor( options: IViewletViewOptions, @@ -84,9 +83,8 @@ export class TreeViewPane extends ViewPane { @IOpenerService openerService: IOpenerService, @IThemeService themeService: IThemeService, @ITelemetryService telemetryService: ITelemetryService, - @INotificationService notificationService: INotificationService ) { - super({ ...(options as IViewPaneOptions), titleMenuId: MenuId.ViewTitle, donotForwardArgs: false }, keybindingService, contextMenuService, configurationService, contextKeyService, viewDescriptorService, instantiationService, openerService, themeService, telemetryService); + super({ ...(options as IViewPaneOptions), titleMenuId: MenuId.ViewTitle, donotForwardArgs: true }, keybindingService, contextMenuService, configurationService, contextKeyService, viewDescriptorService, instantiationService, openerService, themeService, telemetryService); const { treeView } = (Registry.as(Extensions.ViewsRegistry).getView(options.id)); this.treeView = treeView; this._register(this.treeView.onDidChangeActions(() => this.updateActions(), this)); @@ -105,7 +103,6 @@ export class TreeViewPane extends ViewPane { if (options.titleDescription !== this.treeView.description) { this.updateTitleDescription(this.treeView.description); } - this._actionRunner = new MultipleSelectionActionRunner(notificationService, () => this.treeView.getSelection()); this.updateTreeVisibility(); } @@ -145,15 +142,6 @@ export class TreeViewPane extends ViewPane { private updateTreeVisibility(): void { this.treeView.setVisibility(this.isBodyVisible()); } - - override getActionRunner() { - return this._actionRunner; - } - - override getActionsContext(): TreeViewPaneHandleArg { - return { $treeViewId: this.id, $focusedTreeItem: true, $selectedTreeItems: true }; - } - } class Root implements ITreeItem { @@ -218,9 +206,6 @@ abstract class AbstractTreeView extends Disposable implements ITreeView { private _onDidChangeSelection: Emitter = this._register(new Emitter()); readonly onDidChangeSelection: Event = this._onDidChangeSelection.event; - private _onDidChangeFocus: Emitter = this._register(new Emitter()); - readonly onDidChangeFocus: Event = this._onDidChangeFocus.event; - private readonly _onDidChangeVisibility: Emitter = this._register(new Emitter()); readonly onDidChangeVisibility: Event = this._onDidChangeVisibility.event; @@ -624,11 +609,6 @@ abstract class AbstractTreeView extends Disposable implements ITreeView { customTreeKey.set(true); this._register(this.tree.onContextMenu(e => this.onContextMenu(treeMenus, e, actionRunner))); this._register(this.tree.onDidChangeSelection(e => this._onDidChangeSelection.fire(e.elements))); - this._register(this.tree.onDidChangeFocus(e => { - if (e.elements.length) { - this._onDidChangeFocus.fire(e.elements[0]); - } - })); this._register(this.tree.onDidChangeCollapseState(e => { if (!e.node.element) { return; @@ -815,10 +795,6 @@ abstract class AbstractTreeView extends Disposable implements ITreeView { this.tree?.setSelection(items); } - getSelection(): ITreeItem[] { - return this.tree?.getSelection() ?? []; - } - setFocus(item: ITreeItem): void { if (this.tree) { this.focus(true, item); @@ -1250,13 +1226,13 @@ class MultipleSelectionActionRunner extends ActionRunner { })); } - override async runAction(action: IAction, context: TreeViewItemHandleArg | TreeViewPaneHandleArg): Promise { + override async runAction(action: IAction, context: TreeViewItemHandleArg): Promise { const selection = this.getSelectedResources(); let selectionHandleArgs: TreeViewItemHandleArg[] | undefined = undefined; let actionInSelected: boolean = false; if (selection.length > 1) { selectionHandleArgs = selection.map(selected => { - if ((selected.handle === (context as TreeViewItemHandleArg).$treeItemHandle) || (context as TreeViewPaneHandleArg).$selectedTreeItems) { + if (selected.handle === context.$treeItemHandle) { actionInSelected = true; } return { $treeViewId: context.$treeViewId, $treeItemHandle: selected.handle }; diff --git a/src/vs/workbench/browser/parts/views/viewPane.ts b/src/vs/workbench/browser/parts/views/viewPane.ts index 84ee0c009f379..22a0701865bdd 100644 --- a/src/vs/workbench/browser/parts/views/viewPane.ts +++ b/src/vs/workbench/browser/parts/views/viewPane.ts @@ -11,7 +11,7 @@ import { attachButtonStyler, attachProgressBarStyler } from 'vs/platform/theme/c import { PANEL_BACKGROUND, SIDE_BAR_BACKGROUND } from 'vs/workbench/common/theme'; import { after, append, $, trackFocus, EventType, addDisposableListener, createCSSRule, asCSSUrl } from 'vs/base/browser/dom'; import { IDisposable, Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { IAction, IActionRunner } from 'vs/base/common/actions'; +import { IAction } from 'vs/base/common/actions'; import { ActionsOrientation, IActionViewItem, prepareActions } from 'vs/base/browser/ui/actionbar/actionbar'; import { Registry } from 'vs/platform/registry/common/platform'; import { ToolBar } from 'vs/base/browser/ui/toolbar/toolbar'; @@ -298,8 +298,7 @@ export abstract class ViewPane extends Pane implements IView { actionViewItemProvider: action => this.getActionViewItem(action), ariaLabel: nls.localize('viewToolbarAriaLabel', "{0} actions", this.title), getKeyBinding: action => this.keybindingService.lookupKeybinding(action.id), - renderDropdownAsChildElement: true, - actionRunner: this.getActionRunner() + renderDropdownAsChildElement: true }); this._register(this.toolbar); @@ -520,10 +519,6 @@ export abstract class ViewPane extends Pane implements IView { return undefined; } - getActionRunner(): IActionRunner | undefined { - return undefined; - } - getOptimalWidth(): number { return 0; } diff --git a/src/vs/workbench/common/views.ts b/src/vs/workbench/common/views.ts index b84662e5a6dad..1fd017edec7b0 100644 --- a/src/vs/workbench/common/views.ts +++ b/src/vs/workbench/common/views.ts @@ -663,8 +663,6 @@ export interface ITreeView extends IDisposable { readonly onDidChangeSelection: Event; - readonly onDidChangeFocus: Event; - readonly onDidChangeVisibility: Event; readonly onDidChangeActions: Event; @@ -693,8 +691,6 @@ export interface ITreeView extends IDisposable { setSelection(items: ITreeItem[]): void; - getSelection(): ITreeItem[]; - setFocus(item: ITreeItem): void; show(container: any): void; @@ -714,12 +710,6 @@ export interface ITreeViewDescriptor extends IViewDescriptor { treeView: ITreeView; } -export type TreeViewPaneHandleArg = { - $treeViewId: string; - $selectedTreeItems?: boolean; - $focusedTreeItem?: boolean; -}; - export type TreeViewItemHandleArg = { $treeViewId: string; $treeItemHandle: string; diff --git a/src/vs/workbench/contrib/userDataSync/browser/userDataSyncMergesView.ts b/src/vs/workbench/contrib/userDataSync/browser/userDataSyncMergesView.ts index dde5f8c333d15..0a9890b3d0fbd 100644 --- a/src/vs/workbench/contrib/userDataSync/browser/userDataSyncMergesView.ts +++ b/src/vs/workbench/contrib/userDataSync/browser/userDataSyncMergesView.ts @@ -36,7 +36,7 @@ import { IEditorContribution } from 'vs/editor/common/editorCommon'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { FloatingClickWidget } from 'vs/workbench/browser/codeeditor'; import { registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { INotificationService, Severity } from 'vs/platform/notification/common/notification'; +import { Severity } from 'vs/platform/notification/common/notification'; import { IDialogService } from 'vs/platform/dialogs/common/dialogs'; import { DEFAULT_EDITOR_ASSOCIATION } from 'vs/workbench/common/editor'; @@ -66,9 +66,8 @@ export class UserDataSyncMergesViewPane extends TreeViewPane { @IOpenerService openerService: IOpenerService, @IThemeService themeService: IThemeService, @ITelemetryService telemetryService: ITelemetryService, - @INotificationService notificationService: INotificationService ) { - super(options, keybindingService, contextMenuService, configurationService, contextKeyService, viewDescriptorService, instantiationService, openerService, themeService, telemetryService, notificationService); + super(options, keybindingService, contextMenuService, configurationService, contextKeyService, viewDescriptorService, instantiationService, openerService, themeService, telemetryService); this.userDataSyncPreview = userDataSyncWorkbenchService.userDataSyncPreview; this._register(this.userDataSyncPreview.onDidChangeResources(() => this.updateSyncButtonEnablement()));