From 172176fa8cd990ba6fbc7598cb3d3df86e7f556b Mon Sep 17 00:00:00 2001 From: Erez Odier <2045191+erezmus@users.noreply.github.com> Date: Thu, 13 Jul 2023 11:26:22 +0100 Subject: [PATCH] add handling of extension visibility --- packages/plugin-ext/src/common/plugin-protocol.ts | 10 ++++++++++ .../src/hosted/node/scanners/scanner-theia.ts | 3 ++- .../src/main/browser/view/plugin-view-registry.ts | 12 +++++++++--- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/packages/plugin-ext/src/common/plugin-protocol.ts b/packages/plugin-ext/src/common/plugin-protocol.ts index 32f27ae6178ba..cee640595d46b 100644 --- a/packages/plugin-ext/src/common/plugin-protocol.ts +++ b/packages/plugin-ext/src/common/plugin-protocol.ts @@ -136,11 +136,18 @@ export interface PluginPackageTranslation { path: string; } +export enum InitialVisibility { + Visible = 'visible', + Hidden = 'hidden', + Collapsed = 'collapsed' +} + export interface PluginPackageCustomEditor { viewType: string; displayName: string; selector?: CustomEditorSelector[]; priority?: CustomEditorPriority; + visibility?: InitialVisibility; } export interface CustomEditorSelector { @@ -169,12 +176,14 @@ export interface PluginPackageView { name: string; when?: string; type?: string; + visibility?: InitialVisibility; } export interface PluginPackageViewWelcome { view: string; contents: string; when?: string; + visibility?: InitialVisibility; } export interface PluginPackageCommand { @@ -774,6 +783,7 @@ export interface View { name: string; when?: string; type?: string; + visibility?: InitialVisibility; } /** diff --git a/packages/plugin-ext/src/hosted/node/scanners/scanner-theia.ts b/packages/plugin-ext/src/hosted/node/scanners/scanner-theia.ts index 28306abb2af04..2cdb39c87fafd 100644 --- a/packages/plugin-ext/src/hosted/node/scanners/scanner-theia.ts +++ b/packages/plugin-ext/src/hosted/node/scanners/scanner-theia.ts @@ -596,7 +596,8 @@ export class TheiaPluginScanner implements PluginScanner { id: rawView.id, name: rawView.name, when: rawView.when, - type: rawView.type + type: rawView.type, + visibility: rawView.visibility, }; return result; diff --git a/packages/plugin-ext/src/main/browser/view/plugin-view-registry.ts b/packages/plugin-ext/src/main/browser/view/plugin-view-registry.ts index a987ef8e29a00..c78f984f371c3 100644 --- a/packages/plugin-ext/src/main/browser/view/plugin-view-registry.ts +++ b/packages/plugin-ext/src/main/browser/view/plugin-view-registry.ts @@ -20,7 +20,7 @@ import { ViewContainerIdentifier, ViewContainerTitleOptions, Widget, FrontendApplicationContribution, StatefulWidget, CommonMenus, TreeViewWelcomeWidget, codicon, ViewContainerPart, BaseWidget } from '@theia/core/lib/browser'; -import { ViewContainer, View, ViewWelcome, PluginViewType } from '../../../common'; +import { ViewContainer, View, ViewWelcome, PluginViewType, InitialVisibility } from '../../../common'; import { PluginSharedStyle } from '../plugin-shared-style'; import { DebugWidget } from '@theia/debug/lib/browser/view/debug-widget'; import { PluginViewWidget, PluginViewWidgetIdentifier } from './plugin-view-widget'; @@ -608,9 +608,15 @@ export class PluginViewRegistry implements FrontendApplicationContribution { } const widget = await this.widgetManager.getOrCreateWidget(PLUGIN_VIEW_FACTORY_ID, identifier); if (containerWidget.getTrackableWidgets().indexOf(widget) === -1) { + const viewInfo = this.views.get(viewId); + const initialVisibility = viewInfo?.[1].visibility; + const isInitiallyVisible = initialVisibility === InitialVisibility.Visible; + const isinitiallyHidden = initialVisibility === InitialVisibility.Hidden; + const isInitiallyCollapsed = initialVisibility === InitialVisibility.Collapsed; + containerWidget.addWidget(widget, { - initiallyCollapsed: !!containerWidget.getParts().length, - initiallyHidden: !this.isViewVisible(viewId) + initiallyCollapsed: !!containerWidget.getParts().length && (!isInitiallyVisible || isInitiallyCollapsed), + initiallyHidden: (!this.isViewVisible(viewId) || isinitiallyHidden) && !isInitiallyVisible, }); } this.registerWidgetPartEvents(widget, containerWidget);