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

Fix #62861

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