From 1bfe34fa08fbba44c193b6ab8bcb64dca1333b9b Mon Sep 17 00:00:00 2001 From: SteVen Batten <6561887+sbatten@users.noreply.github.com> Date: Mon, 8 Jun 2020 10:03:03 -0700 Subject: [PATCH 1/4] refs #94331 (#99503) * refs #94331 * fixes compile errors * fixes compile errors --- src/vs/workbench/browser/composite.ts | 1 + src/vs/workbench/browser/panel.ts | 8 ++--- .../workbench/browser/parts/compositeBar.ts | 33 +++++++++---------- .../browser/parts/panel/panelPart.ts | 22 ++++++------- .../browser/parts/views/viewsService.ts | 2 ++ src/vs/workbench/browser/viewlet.ts | 6 ++-- src/vs/workbench/common/views.ts | 6 ++-- .../views/browser/viewDescriptorService.ts | 7 ++-- 8 files changed, 42 insertions(+), 43 deletions(-) diff --git a/src/vs/workbench/browser/composite.ts b/src/vs/workbench/browser/composite.ts index 0cb69cba7d4..28f0c6bbfb5 100644 --- a/src/vs/workbench/browser/composite.ts +++ b/src/vs/workbench/browser/composite.ts @@ -239,6 +239,7 @@ export abstract class CompositeDescriptor { readonly name: string, readonly cssClass?: string, readonly order?: number, + readonly requestedIndex?: number, readonly keybindingId?: string, ) { } diff --git a/src/vs/workbench/browser/panel.ts b/src/vs/workbench/browser/panel.ts index 191d51a4d50..b2b2a18b46f 100644 --- a/src/vs/workbench/browser/panel.ts +++ b/src/vs/workbench/browser/panel.ts @@ -17,12 +17,12 @@ export abstract class Panel extends PaneComposite implements IPanel { } */ export class PanelDescriptor extends CompositeDescriptor { - static create(ctor: { new(...services: Services): Panel }, id: string, name: string, cssClass?: string, order?: number, _commandId?: string): PanelDescriptor { - return new PanelDescriptor(ctor as IConstructorSignature0, id, name, cssClass, order, _commandId); + static create(ctor: { new(...services: Services): Panel }, id: string, name: string, cssClass?: string, order?: number, requestedIndex?: number, _commandId?: string): PanelDescriptor { + return new PanelDescriptor(ctor as IConstructorSignature0, id, name, cssClass, order, requestedIndex, _commandId); } - private constructor(ctor: IConstructorSignature0, id: string, name: string, cssClass?: string, order?: number, _commandId?: string) { - super(ctor, id, name, cssClass, order, _commandId); + private constructor(ctor: IConstructorSignature0, id: string, name: string, cssClass?: string, order?: number, requestedIndex?: number, _commandId?: string) { + super(ctor, id, name, cssClass, order, requestedIndex, _commandId); } } diff --git a/src/vs/workbench/browser/parts/compositeBar.ts b/src/vs/workbench/browser/parts/compositeBar.ts index 1142be0f778..8765f13633e 100644 --- a/src/vs/workbench/browser/parts/compositeBar.ts +++ b/src/vs/workbench/browser/parts/compositeBar.ts @@ -102,7 +102,7 @@ export class CompositeDragAndDrop implements ICompositeDragAndDrop { const items = this.getItems(); const before = this.targetContainerLocation === ViewContainerLocation.Panel ? before2d?.horizontallyBefore : before2d?.verticallyBefore; - return items.findIndex(o => o.id === targetId) + (before ? 0 : 1); + return items.filter(o => o.visible).findIndex(o => o.id === targetId) + (before ? 0 : 1); } private canDrop(data: CompositeDragAndDropData, targetCompositeId: string | undefined): boolean { @@ -284,9 +284,9 @@ export class CompositeBar extends Widget implements ICompositeBar { this.updateCompositeSwitcher(); } - addComposite({ id, name, order }: { id: string; name: string, order?: number }): void { + addComposite({ id, name, order, requestedIndex }: { id: string; name: string, order?: number, requestedIndex?: number }): void { // Add to the model - if (this.model.add(id, name, order)) { + if (this.model.add(id, name, order, requestedIndex)) { this.computeSizes([this.model.findItem(id)]); this.updateCompositeSwitcher(); } @@ -674,17 +674,9 @@ class CompositeBarModel { this._items = result; } - this.updateItemsOrder(); return hasChanges; } - - private updateItemsOrder(): void { - if (this._items) { - this.items.forEach((item, index) => { if (item.order !== undefined) { item.order = index; } }); - } - } - get visibleItems(): ICompositeBarModelItem[] { return this.items.filter(item => item.visible); } @@ -707,7 +699,7 @@ class CompositeBarModel { }; } - add(id: string, name: string, order: number | undefined): boolean { + add(id: string, name: string, order: number | undefined, requestedIndex: number | undefined): boolean { const item = this.findItem(id); if (item) { let changed = false; @@ -721,11 +713,20 @@ class CompositeBarModel { changed = true; } - this.updateItemsOrder(); return changed; } else { const item = this.createCompositeBarItem(id, name, order, true, true); - if (isUndefinedOrNull(order)) { + if (!isUndefinedOrNull(requestedIndex)) { + let index = 0; + let rIndex = requestedIndex; + while (rIndex > 0 && index < this.items.length) { + if (this.items[index++].visible) { + rIndex--; + } + } + + this.items.splice(index, 0, item); + } else if (isUndefinedOrNull(order)) { this.items.push(item); } else { let index = 0; @@ -735,7 +736,6 @@ class CompositeBarModel { this.items.splice(index, 0, item); } - this.updateItemsOrder(); return true; } } @@ -744,7 +744,6 @@ class CompositeBarModel { for (let index = 0; index < this.items.length; index++) { if (this.items[index].id === id) { this.items.splice(index, 1); - this.updateItemsOrder(); return true; } } @@ -780,8 +779,6 @@ class CompositeBarModel { // Make sure a moved composite gets pinned sourceItem.pinned = true; - this.updateItemsOrder(); - return true; } diff --git a/src/vs/workbench/browser/parts/panel/panelPart.ts b/src/vs/workbench/browser/parts/panel/panelPart.ts index d44fcc689e3..86531968f7b 100644 --- a/src/vs/workbench/browser/parts/panel/panelPart.ts +++ b/src/vs/workbench/browser/parts/panel/panelPart.ts @@ -220,7 +220,8 @@ export class PanelPart extends CompositePart implements IPanelService { const newPanel = { id: panel.id, name: panel.name, - order: cachedPanel?.order === undefined ? panel.order : cachedPanel.order + order: panel.order, + requestedIndex: panel.requestedIndex }; this.compositeBar.addComposite(newPanel); @@ -676,17 +677,14 @@ export class PanelPart extends CompositePart implements IPanelService { const cachedPanels = this.getCachedPanels(); for (const cachedPanel of cachedPanels) { - // Add and update existing items - const existingItem = compositeItems.filter(({ id }) => id === cachedPanel.id)[0]; - if (existingItem) { - newCompositeItems.push({ - id: existingItem.id, - name: existingItem.name, - order: existingItem.order, - pinned: cachedPanel.pinned, - visible: existingItem.visible - }); - } + // copy behavior from activity bar + newCompositeItems.push({ + id: cachedPanel.id, + name: cachedPanel.name, + order: cachedPanel.order, + pinned: cachedPanel.pinned, + visible: !!compositeItems.find(({ id }) => id === cachedPanel.id) + }); } for (let index = 0; index < compositeItems.length; index++) { diff --git a/src/vs/workbench/browser/parts/views/viewsService.ts b/src/vs/workbench/browser/parts/views/viewsService.ts index fbce01f7e0a..c1ba9229f63 100644 --- a/src/vs/workbench/browser/parts/views/viewsService.ts +++ b/src/vs/workbench/browser/parts/views/viewsService.ts @@ -445,6 +445,7 @@ export class ViewsService extends Disposable implements IViewsService { viewContainer.name, undefined, viewContainer.order, + viewContainer.requestedIndex, viewContainer.focusCommand?.id, )); } @@ -480,6 +481,7 @@ export class ViewsService extends Disposable implements IViewsService { viewContainer.name, isString(viewContainer.icon) ? viewContainer.icon : undefined, viewContainer.order, + viewContainer.requestedIndex, viewContainer.icon instanceof URI ? viewContainer.icon : undefined )); } diff --git a/src/vs/workbench/browser/viewlet.ts b/src/vs/workbench/browser/viewlet.ts index 355c4ada7a3..9c4d5a10f01 100644 --- a/src/vs/workbench/browser/viewlet.ts +++ b/src/vs/workbench/browser/viewlet.ts @@ -73,10 +73,11 @@ export class ViewletDescriptor extends CompositeDescriptor { name: string, cssClass?: string, order?: number, + requestedIndex?: number, iconUrl?: URI ): ViewletDescriptor { - return new ViewletDescriptor(ctor as IConstructorSignature0, id, name, cssClass, order, iconUrl); + return new ViewletDescriptor(ctor as IConstructorSignature0, id, name, cssClass, order, requestedIndex, iconUrl); } private constructor( @@ -85,9 +86,10 @@ export class ViewletDescriptor extends CompositeDescriptor { name: string, cssClass?: string, order?: number, + requestedIndex?: number, readonly iconUrl?: URI ) { - super(ctor, id, name, cssClass, order, id); + super(ctor, id, name, cssClass, order, requestedIndex, id); } } diff --git a/src/vs/workbench/common/views.ts b/src/vs/workbench/common/views.ts index 6a8dd33202f..692e5a3a344 100644 --- a/src/vs/workbench/common/views.ts +++ b/src/vs/workbench/common/views.ts @@ -60,7 +60,9 @@ export interface IViewContainerDescriptor { readonly rejectAddedViews?: boolean; - order?: number; + readonly order?: number; + + requestedIndex?: number; } export interface IViewContainersRegistry { @@ -515,7 +517,7 @@ export interface IViewDescriptorService { getViewContainerModel(viewContainer: ViewContainer): IViewContainerModel; readonly onDidChangeContainerLocation: Event<{ viewContainer: ViewContainer, from: ViewContainerLocation, to: ViewContainerLocation }>; - moveViewContainerToLocation(viewContainer: ViewContainer, location: ViewContainerLocation, order?: number): void; + moveViewContainerToLocation(viewContainer: ViewContainer, location: ViewContainerLocation, requestedIndex?: number): void; // Views getViewDescriptorById(id: string): IViewDescriptor | null; diff --git a/src/vs/workbench/services/views/browser/viewDescriptorService.ts b/src/vs/workbench/services/views/browser/viewDescriptorService.ts index 2ad2a87523c..c98baea8b9c 100644 --- a/src/vs/workbench/services/views/browser/viewDescriptorService.ts +++ b/src/vs/workbench/services/views/browser/viewDescriptorService.ts @@ -295,7 +295,7 @@ export class ViewDescriptorService extends Disposable implements IViewDescriptor return this.viewContainersRegistry.getDefaultViewContainer(location); } - moveViewContainerToLocation(viewContainer: ViewContainer, location: ViewContainerLocation, order?: number): void { + moveViewContainerToLocation(viewContainer: ViewContainer, location: ViewContainerLocation, requestedIndex?: number): void { const from = this.getViewContainerLocation(viewContainer); const to = location; if (from !== to) { @@ -304,10 +304,7 @@ export class ViewDescriptorService extends Disposable implements IViewDescriptor const defaultLocation = this.isGeneratedContainerId(viewContainer.id) ? true : this.getViewContainerLocation(viewContainer) === this.getDefaultViewContainerLocation(viewContainer); this.getOrCreateDefaultViewContainerLocationContextKey(viewContainer).set(defaultLocation); - if (order !== undefined) { - viewContainer.order = order; - } - + viewContainer.requestedIndex = requestedIndex; this._onDidChangeContainerLocation.fire({ viewContainer, from, to }); const views = this.getViewsByContainer(viewContainer); From cee31f322137e8a20cabcece49ce0d4bb76c13fe Mon Sep 17 00:00:00 2001 From: SteVen Batten <6561887+sbatten@users.noreply.github.com> Date: Mon, 8 Jun 2020 10:05:00 -0700 Subject: [PATCH 2/4] refs #99490 (#99491) --- .../workbench/services/views/browser/viewDescriptorService.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/vs/workbench/services/views/browser/viewDescriptorService.ts b/src/vs/workbench/services/views/browser/viewDescriptorService.ts index c98baea8b9c..08ad31d66ec 100644 --- a/src/vs/workbench/services/views/browser/viewDescriptorService.ts +++ b/src/vs/workbench/services/views/browser/viewDescriptorService.ts @@ -405,6 +405,8 @@ export class ViewDescriptorService extends Disposable implements IViewDescriptor this.saveViewContainerLocationsToCache(); } + this.getOrCreateDefaultViewContainerLocationContextKey(container).set(true); + return container; } From 2f1809c74fe73c470ae09a357c74d34f19acdb71 Mon Sep 17 00:00:00 2001 From: SteVen Batten <6561887+sbatten@users.noreply.github.com> Date: Mon, 8 Jun 2020 10:43:42 -0700 Subject: [PATCH 3/4] fixes #99448 (#99475) --- src/vs/base/browser/ui/dropdown/dropdown.ts | 16 +++++++++++----- src/vs/base/browser/ui/toolbar/toolbar.ts | 3 ++- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/vs/base/browser/ui/dropdown/dropdown.ts b/src/vs/base/browser/ui/dropdown/dropdown.ts index 22693e1971c..19617990112 100644 --- a/src/vs/base/browser/ui/dropdown/dropdown.ts +++ b/src/vs/base/browser/ui/dropdown/dropdown.ts @@ -214,6 +214,7 @@ export interface IDropdownMenuOptions extends IBaseDropdownOptions { actions?: ReadonlyArray; actionProvider?: IActionProvider; menuClassName?: string; + menuAsChild?: boolean; // scope down for #99448 } export class DropdownMenu extends BaseDropdown { @@ -222,6 +223,7 @@ export class DropdownMenu extends BaseDropdown { private _actions: ReadonlyArray = []; private actionProvider?: IActionProvider; private menuClassName: string; + private menuAsChild?: boolean; constructor(container: HTMLElement, options: IDropdownMenuOptions) { super(container, options); @@ -230,6 +232,7 @@ export class DropdownMenu extends BaseDropdown { this.actions = options.actions || []; this.actionProvider = options.actionProvider; this.menuClassName = options.menuClassName || ''; + this.menuAsChild = !!options.menuAsChild; } set menuOptions(options: IMenuOptions | undefined) { @@ -267,7 +270,7 @@ export class DropdownMenu extends BaseDropdown { onHide: () => this.onHide(), actionRunner: this.menuOptions ? this.menuOptions.actionRunner : undefined, anchorAlignment: this.menuOptions ? this.menuOptions.anchorAlignment : AnchorAlignment.LEFT, - anchorAsContainer: true + anchorAsContainer: this.menuAsChild }); } @@ -289,10 +292,11 @@ export class DropdownMenuActionViewItem extends BaseActionViewItem { private keybindings?: (action: IAction) => ResolvedKeybinding | undefined; private clazz: string | undefined; private anchorAlignmentProvider: (() => AnchorAlignment) | undefined; + private menuAsChild?: boolean; - constructor(action: IAction, menuActions: ReadonlyArray, contextMenuProvider: IContextMenuProvider, actionViewItemProvider: IActionViewItemProvider | undefined, actionRunner: IActionRunner, keybindings: ((action: IAction) => ResolvedKeybinding | undefined) | undefined, clazz: string | undefined, anchorAlignmentProvider?: () => AnchorAlignment); - constructor(action: IAction, actionProvider: IActionProvider, contextMenuProvider: IContextMenuProvider, actionViewItemProvider: IActionViewItemProvider | undefined, actionRunner: IActionRunner, keybindings: ((action: IAction) => ResolvedKeybinding) | undefined, clazz: string | undefined, anchorAlignmentProvider?: () => AnchorAlignment); - constructor(action: IAction, menuActionsOrProvider: ReadonlyArray | IActionProvider, contextMenuProvider: IContextMenuProvider, actionViewItemProvider: IActionViewItemProvider | undefined, actionRunner: IActionRunner, keybindings: ((action: IAction) => ResolvedKeybinding | undefined) | undefined, clazz: string | undefined, anchorAlignmentProvider?: () => AnchorAlignment) { + constructor(action: IAction, menuActions: ReadonlyArray, contextMenuProvider: IContextMenuProvider, actionViewItemProvider: IActionViewItemProvider | undefined, actionRunner: IActionRunner, keybindings: ((action: IAction) => ResolvedKeybinding | undefined) | undefined, clazz: string | undefined, anchorAlignmentProvider?: () => AnchorAlignment, menuAsChild?: boolean); + constructor(action: IAction, actionProvider: IActionProvider, contextMenuProvider: IContextMenuProvider, actionViewItemProvider: IActionViewItemProvider | undefined, actionRunner: IActionRunner, keybindings: ((action: IAction) => ResolvedKeybinding) | undefined, clazz: string | undefined, anchorAlignmentProvider?: () => AnchorAlignment, menuAsChild?: boolean); + constructor(action: IAction, menuActionsOrProvider: ReadonlyArray | IActionProvider, contextMenuProvider: IContextMenuProvider, actionViewItemProvider: IActionViewItemProvider | undefined, actionRunner: IActionRunner, keybindings: ((action: IAction) => ResolvedKeybinding | undefined) | undefined, clazz: string | undefined, anchorAlignmentProvider?: () => AnchorAlignment, menuAsChild?: boolean) { super(null, action); this.menuActionsOrProvider = menuActionsOrProvider; @@ -302,6 +306,7 @@ export class DropdownMenuActionViewItem extends BaseActionViewItem { this.keybindings = keybindings; this.clazz = clazz; this.anchorAlignmentProvider = anchorAlignmentProvider; + this.menuAsChild = menuAsChild; } render(container: HTMLElement): void { @@ -322,7 +327,8 @@ export class DropdownMenuActionViewItem extends BaseActionViewItem { const options: IDropdownMenuOptions = { contextMenuProvider: this.contextMenuProvider, - labelRenderer: labelRenderer + labelRenderer: labelRenderer, + menuAsChild: this.menuAsChild }; // Render the DropdownMenu around a simple action to toggle it diff --git a/src/vs/base/browser/ui/toolbar/toolbar.ts b/src/vs/base/browser/ui/toolbar/toolbar.ts index 2ce6e5599dc..9badee8eb96 100644 --- a/src/vs/base/browser/ui/toolbar/toolbar.ts +++ b/src/vs/base/browser/ui/toolbar/toolbar.ts @@ -69,7 +69,8 @@ export class ToolBar extends Disposable { this.actionRunner, this.options.getKeyBinding, toolBarMoreIcon.classNames, - this.options.anchorAlignmentProvider + this.options.anchorAlignmentProvider, + true ); this.toggleMenuActionViewItem.value.setActionContext(this.actionBar.context); From b42ca404bd79f5f1cb252c2210969ea2b6b57a70 Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Mon, 8 Jun 2020 14:19:21 -0700 Subject: [PATCH 4/4] fix: wrong extension id for js-debug --- product.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/product.json b/product.json index cc59b5bad18..d586d2fc067 100644 --- a/product.json +++ b/product.json @@ -93,7 +93,7 @@ "version": "1.46.1", "repo": "https://github.com/Microsoft/vscode-js-debug", "metadata": { - "id": "7acbb4ce-c85a-49d4-8d95-a8054406ae97", + "id": "25629058-ddac-4e17-abba-74678e126c5d", "publisherId": { "publisherId": "5f5636e7-69ed-4afe-b5d6-8d231fb3d3ee", "publisherName": "ms-vscode",