Skip to content

Commit 7f0b126

Browse files
committed
Revert "Revert "refs microsoft#94331""
This reverts commit a8c48bb.
1 parent a8c48bb commit 7f0b126

7 files changed

Lines changed: 39 additions & 42 deletions

File tree

src/vs/workbench/browser/composite.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@ export abstract class CompositeDescriptor<T extends Composite> {
239239
readonly name: string,
240240
readonly cssClass?: string,
241241
readonly order?: number,
242+
readonly requestedIndex?: number,
242243
readonly keybindingId?: string,
243244
) { }
244245

src/vs/workbench/browser/panel.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ export abstract class Panel extends PaneComposite implements IPanel { }
1717
*/
1818
export class PanelDescriptor extends CompositeDescriptor<Panel> {
1919

20-
static create<Services extends BrandedService[]>(ctor: { new(...services: Services): Panel }, id: string, name: string, cssClass?: string, order?: number, _commandId?: string): PanelDescriptor {
21-
return new PanelDescriptor(ctor as IConstructorSignature0<Panel>, id, name, cssClass, order, _commandId);
20+
static create<Services extends BrandedService[]>(ctor: { new(...services: Services): Panel }, id: string, name: string, cssClass?: string, order?: number, requestedIndex?: number, _commandId?: string): PanelDescriptor {
21+
return new PanelDescriptor(ctor as IConstructorSignature0<Panel>, id, name, cssClass, order, requestedIndex, _commandId);
2222
}
2323

24-
private constructor(ctor: IConstructorSignature0<Panel>, id: string, name: string, cssClass?: string, order?: number, _commandId?: string) {
25-
super(ctor, id, name, cssClass, order, _commandId);
24+
private constructor(ctor: IConstructorSignature0<Panel>, id: string, name: string, cssClass?: string, order?: number, requestedIndex?: number, _commandId?: string) {
25+
super(ctor, id, name, cssClass, order, requestedIndex, _commandId);
2626
}
2727
}
2828

src/vs/workbench/browser/parts/compositeBar.ts

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,12 @@ import { IContextMenuService } from 'vs/platform/contextview/browser/contextView
1818
import { Widget } from 'vs/base/browser/ui/widget';
1919
import { isUndefinedOrNull } from 'vs/base/common/types';
2020
import { IColorTheme } from 'vs/platform/theme/common/themeService';
21-
import { Emitter } from 'vs/base/common/event';
21+
import { Emitter, Event } from 'vs/base/common/event';
2222
import { ViewContainerLocation, IViewDescriptorService } from 'vs/workbench/common/views';
2323
import { IPaneComposite } from 'vs/workbench/common/panecomposite';
2424
import { IComposite } from 'vs/workbench/common/composite';
2525
import { CompositeDragAndDropData, CompositeDragAndDropObserver, IDraggedCompositeData, ICompositeDragAndDrop, Before2D } from 'vs/workbench/browser/dnd';
26+
import { generateUuid } from 'vs/base/common/uuid';
2627

2728
export interface ICompositeBarItem {
2829
id: string;
@@ -102,7 +103,7 @@ export class CompositeDragAndDrop implements ICompositeDragAndDrop {
102103

103104
const items = this.getItems();
104105
const before = this.targetContainerLocation === ViewContainerLocation.Panel ? before2d?.horizontallyBefore : before2d?.verticallyBefore;
105-
return items.findIndex(o => o.id === targetId) + (before ? 0 : 1);
106+
return items.filter(o => o.visible).findIndex(o => o.id === targetId) + (before ? 0 : 1);
106107
}
107108

108109
private canDrop(data: CompositeDragAndDropData, targetCompositeId: string | undefined): boolean {
@@ -284,9 +285,9 @@ export class CompositeBar extends Widget implements ICompositeBar {
284285
this.updateCompositeSwitcher();
285286
}
286287

287-
addComposite({ id, name, order }: { id: string; name: string, order?: number }): void {
288+
addComposite({ id, name, order, requestedIndex }: { id: string; name: string, order?: number, requestedIndex?: number }): void {
288289
// Add to the model
289-
if (this.model.add(id, name, order)) {
290+
if (this.model.add(id, name, order, requestedIndex)) {
290291
this.computeSizes([this.model.findItem(id)]);
291292
this.updateCompositeSwitcher();
292293
}
@@ -674,17 +675,9 @@ class CompositeBarModel {
674675
this._items = result;
675676
}
676677

677-
this.updateItemsOrder();
678678
return hasChanges;
679679
}
680680

681-
682-
private updateItemsOrder(): void {
683-
if (this._items) {
684-
this.items.forEach((item, index) => { if (item.order !== undefined) { item.order = index; } });
685-
}
686-
}
687-
688681
get visibleItems(): ICompositeBarModelItem[] {
689682
return this.items.filter(item => item.visible);
690683
}
@@ -707,7 +700,7 @@ class CompositeBarModel {
707700
};
708701
}
709702

710-
add(id: string, name: string, order: number | undefined): boolean {
703+
add(id: string, name: string, order: number | undefined, requestedIndex: number | undefined): boolean {
711704
const item = this.findItem(id);
712705
if (item) {
713706
let changed = false;
@@ -721,11 +714,20 @@ class CompositeBarModel {
721714
changed = true;
722715
}
723716

724-
this.updateItemsOrder();
725717
return changed;
726718
} else {
727719
const item = this.createCompositeBarItem(id, name, order, true, true);
728-
if (isUndefinedOrNull(order)) {
720+
if (!isUndefinedOrNull(requestedIndex)) {
721+
let index = 0;
722+
let rIndex = requestedIndex;
723+
while (rIndex > 0 && index < this.items.length) {
724+
if (this.items[index++].visible) {
725+
rIndex--;
726+
}
727+
}
728+
729+
this.items.splice(index, 0, item);
730+
} else if (isUndefinedOrNull(order)) {
729731
this.items.push(item);
730732
} else {
731733
let index = 0;
@@ -735,7 +737,6 @@ class CompositeBarModel {
735737
this.items.splice(index, 0, item);
736738
}
737739

738-
this.updateItemsOrder();
739740
return true;
740741
}
741742
}
@@ -744,7 +745,6 @@ class CompositeBarModel {
744745
for (let index = 0; index < this.items.length; index++) {
745746
if (this.items[index].id === id) {
746747
this.items.splice(index, 1);
747-
this.updateItemsOrder();
748748
return true;
749749
}
750750
}
@@ -780,8 +780,6 @@ class CompositeBarModel {
780780
// Make sure a moved composite gets pinned
781781
sourceItem.pinned = true;
782782

783-
this.updateItemsOrder();
784-
785783
return true;
786784
}
787785

src/vs/workbench/browser/parts/panel/panelPart.ts

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,8 @@ export class PanelPart extends CompositePart<Panel> implements IPanelService {
220220
const newPanel = {
221221
id: panel.id,
222222
name: panel.name,
223-
order: cachedPanel?.order === undefined ? panel.order : cachedPanel.order
223+
order: panel.order,
224+
requestedIndex: panel.requestedIndex
224225
};
225226

226227
this.compositeBar.addComposite(newPanel);
@@ -676,17 +677,14 @@ export class PanelPart extends CompositePart<Panel> implements IPanelService {
676677
const cachedPanels = this.getCachedPanels();
677678

678679
for (const cachedPanel of cachedPanels) {
679-
// Add and update existing items
680-
const existingItem = compositeItems.filter(({ id }) => id === cachedPanel.id)[0];
681-
if (existingItem) {
682-
newCompositeItems.push({
683-
id: existingItem.id,
684-
name: existingItem.name,
685-
order: existingItem.order,
686-
pinned: cachedPanel.pinned,
687-
visible: existingItem.visible
688-
});
689-
}
680+
// copy behavior from activity bar
681+
newCompositeItems.push({
682+
id: cachedPanel.id,
683+
name: cachedPanel.name,
684+
order: cachedPanel.order,
685+
pinned: cachedPanel.pinned,
686+
visible: !!compositeItems.find(({ id }) => id === cachedPanel.id)
687+
});
690688
}
691689

692690
for (let index = 0; index < compositeItems.length; index++) {

src/vs/workbench/browser/parts/views/viewsService.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,7 @@ export class ViewsService extends Disposable implements IViewsService {
445445
viewContainer.name,
446446
undefined,
447447
viewContainer.order,
448+
viewContainer.requestedIndex,
448449
viewContainer.focusCommand?.id,
449450
));
450451
}

src/vs/workbench/common/views.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,9 @@ export interface IViewContainerDescriptor {
6060

6161
readonly rejectAddedViews?: boolean;
6262

63-
order?: number;
63+
readonly order?: number;
64+
65+
requestedIndex?: number;
6466
}
6567

6668
export interface IViewContainersRegistry {
@@ -515,7 +517,7 @@ export interface IViewDescriptorService {
515517
getViewContainerModel(viewContainer: ViewContainer): IViewContainerModel;
516518

517519
readonly onDidChangeContainerLocation: Event<{ viewContainer: ViewContainer, from: ViewContainerLocation, to: ViewContainerLocation }>;
518-
moveViewContainerToLocation(viewContainer: ViewContainer, location: ViewContainerLocation, order?: number): void;
520+
moveViewContainerToLocation(viewContainer: ViewContainer, location: ViewContainerLocation, requestedIndex?: number): void;
519521

520522
// Views
521523
getViewDescriptorById(id: string): IViewDescriptor | null;

src/vs/workbench/services/views/browser/viewDescriptorService.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ export class ViewDescriptorService extends Disposable implements IViewDescriptor
295295
return this.viewContainersRegistry.getDefaultViewContainer(location);
296296
}
297297

298-
moveViewContainerToLocation(viewContainer: ViewContainer, location: ViewContainerLocation, order?: number): void {
298+
moveViewContainerToLocation(viewContainer: ViewContainer, location: ViewContainerLocation, requestedIndex?: number): void {
299299
const from = this.getViewContainerLocation(viewContainer);
300300
const to = location;
301301
if (from !== to) {
@@ -304,10 +304,7 @@ export class ViewDescriptorService extends Disposable implements IViewDescriptor
304304
const defaultLocation = this.isGeneratedContainerId(viewContainer.id) ? true : this.getViewContainerLocation(viewContainer) === this.getDefaultViewContainerLocation(viewContainer);
305305
this.getOrCreateDefaultViewContainerLocationContextKey(viewContainer).set(defaultLocation);
306306

307-
if (order !== undefined) {
308-
viewContainer.order = order;
309-
}
310-
307+
viewContainer.requestedIndex = requestedIndex;
311308
this._onDidChangeContainerLocation.fire({ viewContainer, from, to });
312309

313310
const views = this.getViewsByContainer(viewContainer);

0 commit comments

Comments
 (0)