提交 4fd60ed5 编写于 作者: S Sandeep Somavarapu

Fix #62861

上级 8383d424
...@@ -30,12 +30,18 @@ import { IExtensionService } from 'vs/workbench/services/extensions/common/exten ...@@ -30,12 +30,18 @@ import { IExtensionService } from 'vs/workbench/services/extensions/common/exten
import { URI } from 'vs/base/common/uri'; import { URI } from 'vs/base/common/uri';
import { ToggleCompositePinnedAction, ICompositeBarColors } from 'vs/workbench/browser/parts/compositeBarActions'; import { ToggleCompositePinnedAction, ICompositeBarColors } from 'vs/workbench/browser/parts/compositeBarActions';
import { ViewletDescriptor } from 'vs/workbench/browser/viewlet'; import { ViewletDescriptor } from 'vs/workbench/browser/viewlet';
import { IViewsService, IViewContainersRegistry, Extensions as ViewContainerExtensions } from 'vs/workbench/common/views';
import { IContextKeyService, ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';
interface IPlaceholderComposite { interface IPlaceholderComposite {
id: string; id: string;
iconUrl: URI; iconUrl: URI;
} }
interface ISerializedPlaceholderComposite extends IPlaceholderComposite {
whens?: string[];
}
export class ActivitybarPart extends Part { export class ActivitybarPart extends Part {
private static readonly ACTION_HEIGHT = 50; private static readonly ACTION_HEIGHT = 50;
...@@ -59,7 +65,9 @@ export class ActivitybarPart extends Part { ...@@ -59,7 +65,9 @@ export class ActivitybarPart extends Part {
@IThemeService themeService: IThemeService, @IThemeService themeService: IThemeService,
@ILifecycleService private lifecycleService: ILifecycleService, @ILifecycleService private lifecycleService: ILifecycleService,
@IStorageService private storageService: IStorageService, @IStorageService private storageService: IStorageService,
@IExtensionService private extensionService: IExtensionService @IExtensionService private extensionService: IExtensionService,
@IViewsService private viewsService: IViewsService,
@IContextKeyService contextKeyService: IContextKeyService
) { ) {
super(id, { hasTitle: false }, themeService, storageService); super(id, { hasTitle: false }, themeService, storageService);
...@@ -80,14 +88,20 @@ export class ActivitybarPart extends Part { ...@@ -80,14 +88,20 @@ export class ActivitybarPart extends Part {
})); }));
const previousState = this.storageService.get(ActivitybarPart.PLACEHOLDER_VIEWLETS, StorageScope.GLOBAL, '[]'); const previousState = this.storageService.get(ActivitybarPart.PLACEHOLDER_VIEWLETS, StorageScope.GLOBAL, '[]');
this.placeholderComposites = <IPlaceholderComposite[]>JSON.parse(previousState); const serializedPlaceholderComposites = <ISerializedPlaceholderComposite[]>JSON.parse(previousState);
this.placeholderComposites.forEach((s) => { this.placeholderComposites = [];
if (typeof s.iconUrl === 'object') { for (const { id, iconUrl, whens } of serializedPlaceholderComposites) {
s.iconUrl = URI.revive(s.iconUrl); if (whens && whens.length > 0) {
} else { if (whens.every(when => !contextKeyService.contextMatchesRules(ContextKeyExpr.deserialize(when)))) {
s.iconUrl = void 0; // Hidden by default
} continue;
}
}
this.placeholderComposites.push({
id,
iconUrl: typeof iconUrl === 'object' ? URI.revive(iconUrl) : void 0
}); });
}
this.registerListeners(); this.registerListeners();
this.updateCompositebar(); this.updateCompositebar();
...@@ -332,7 +346,22 @@ export class ActivitybarPart extends Part { ...@@ -332,7 +346,22 @@ export class ActivitybarPart extends Part {
} }
protected saveState(): void { protected saveState(): void {
const state = this.viewletService.getAllViewlets().map(({ id, iconUrl }) => ({ id, iconUrl })); const viewContainerRegistry = Registry.as<IViewContainersRegistry>(ViewContainerExtensions.ViewContainersRegistry);
const state: ISerializedPlaceholderComposite[] = [];
for (const { id, iconUrl } of this.viewletService.getAllViewlets()) {
if (iconUrl) {
const viewContainer = viewContainerRegistry.get(id);
const whens: string[] = [];
if (viewContainer) {
for (const { when } of this.viewsService.getViewDescriptors(viewContainer).allViewDescriptors) {
if (when) {
whens.push(when.serialize());
}
}
}
state.push({ id, iconUrl, whens });
}
}
this.storageService.store(ActivitybarPart.PLACEHOLDER_VIEWLETS, JSON.stringify(state), StorageScope.GLOBAL); this.storageService.store(ActivitybarPart.PLACEHOLDER_VIEWLETS, JSON.stringify(state), StorageScope.GLOBAL);
super.saveState(); super.saveState();
......
...@@ -80,6 +80,10 @@ class ViewDescriptorCollection extends Disposable implements IViewDescriptorColl ...@@ -80,6 +80,10 @@ class ViewDescriptorCollection extends Disposable implements IViewDescriptorColl
.map(i => i.viewDescriptor); .map(i => i.viewDescriptor);
} }
get allViewDescriptors(): IViewDescriptor[] {
return this.items.map(i => i.viewDescriptor);
}
constructor( constructor(
container: ViewContainer, container: ViewContainer,
@IContextKeyService private contextKeyService: IContextKeyService @IContextKeyService private contextKeyService: IContextKeyService
......
...@@ -119,6 +119,7 @@ export interface IViewDescriptor { ...@@ -119,6 +119,7 @@ export interface IViewDescriptor {
export interface IViewDescriptorCollection { export interface IViewDescriptorCollection {
readonly onDidChangeActiveViews: Event<{ added: IViewDescriptor[], removed: IViewDescriptor[] }>; readonly onDidChangeActiveViews: Event<{ added: IViewDescriptor[], removed: IViewDescriptor[] }>;
readonly activeViewDescriptors: IViewDescriptor[]; readonly activeViewDescriptors: IViewDescriptor[];
readonly allViewDescriptors: IViewDescriptor[];
} }
export interface IViewsRegistry { export interface IViewsRegistry {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册