From a71c077ee1143650ff4d37b1d8f0ebafa3d15893 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Mangeonjean?= Date: Mon, 26 Feb 2024 20:59:24 +0100 Subject: [PATCH 1/4] fix: add scrollbar on custom views --- src/service-override/tools/views.ts | 42 ++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/src/service-override/tools/views.ts b/src/service-override/tools/views.ts index 54ebd55f..6b56cb05 100644 --- a/src/service-override/tools/views.ts +++ b/src/service-override/tools/views.ts @@ -2,7 +2,7 @@ import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors' import { IViewContainerDescriptor, IViewContainersRegistry, IViewDescriptor, IViewsRegistry, ViewContainer, ViewContainerLocation, Extensions as ViewExtensions } from 'vs/workbench/common/views' import { BrandedService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation' import { DisposableStore, IDisposable, MutableDisposable } from 'vs/base/common/lifecycle' -import { append, $, Dimension, size } from 'vs/base/browser/dom' +import { $, Dimension, size } from 'vs/base/browser/dom' import { ViewPane } from 'vs/workbench/browser/parts/views/viewPane' import { Registry } from 'vs/platform/registry/common/platform' import { ViewPaneContainer } from 'vs/workbench/browser/parts/views/viewPaneContainer' @@ -280,15 +280,34 @@ function registerCustomView (options: CustomViewOption): IDisposable { original: options.name }, ctorDescriptor: new SyncDescriptor(class extends ViewPane { - private content?: HTMLElement + protected wrapper!: HTMLElement + protected container!: HTMLElement + private scrollbar: DomScrollableElement | undefined protected override renderBody (container: HTMLElement): void { super.renderBody(container) - this.content = $('.view-pane-content') - this.content.style.display = 'flex' - this.content.style.alignItems = 'stretch' - append(container, this.content) - this._register(options.renderBody(this.content)) + + this.container = $('.view-pane-content') + this.container.style.display = 'flex' + this.container.style.alignItems = 'stretch' + this._register(options.renderBody(this.container)) + + this.wrapper = document.createElement('div') + this.wrapper.append(this.container) + + // Custom Scrollbars + this.scrollbar = this._register(new DomScrollableElement(this.wrapper, { horizontal: ScrollbarVisibility.Auto, vertical: ScrollbarVisibility.Auto })) + container.appendChild(this.scrollbar.getDomNode()) + + const observer = new ResizeObserver(() => { + assertIsDefined(this.scrollbar).scanDomNode() + }) + observer.observe(this.container) + this._register({ + dispose () { + observer.disconnect() + } + }) } public override getActionViewItem (action: IAction, actionOptions?: IDropdownMenuActionViewItemOptions) { @@ -303,8 +322,13 @@ function registerCustomView (options: CustomViewOption): IDisposable { } protected override layoutBody (height: number, width: number): void { - this.content!.style.height = `${height}px` - this.content!.style.width = `${width}px` + const [wrapper, scrollbar] = assertAllDefined(this.wrapper, this.scrollbar) + + // Pass on to Container + size(wrapper, width, height) + + // Adjust scrollbar + scrollbar.scanDomNode() } }), canMoveView: options.canMoveView ?? true, From e31c82a2b8823c106c9fd7c7f0ef964f5ae61845 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Mangeonjean?= Date: Mon, 26 Feb 2024 20:59:36 +0100 Subject: [PATCH 2/4] fix: export ViewPaneContainer --- src/service-override/tools/views.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/service-override/tools/views.ts b/src/service-override/tools/views.ts index 6b56cb05..a3bfd343 100644 --- a/src/service-override/tools/views.ts +++ b/src/service-override/tools/views.ts @@ -407,6 +407,7 @@ export { ViewContainerLocation, CustomViewOption, registerCustomView, + ViewPaneContainer, IEditorCloseHandler, ConfirmResult, registerEditorPane, From a3e83443e4d9957993be860f6f41f249653163ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Mangeonjean?= Date: Mon, 26 Feb 2024 20:59:56 +0100 Subject: [PATCH 3/4] fix: do not detect fullscreen if it's only a guess --- src/service-override/workbench.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/service-override/workbench.ts b/src/service-override/workbench.ts index b13957c5..ed21edff 100644 --- a/src/service-override/workbench.ts +++ b/src/service-override/workbench.ts @@ -119,7 +119,8 @@ class CustomWorkbench extends Workbench { } } -setFullscreen(detectFullscreen(mainWindow) != null, mainWindow) +const detectedFullScreen = detectFullscreen(mainWindow) +setFullscreen(detectedFullScreen != null && !detectedFullScreen.guess, mainWindow) onLayout(async accessor => { (accessor.get(IWorkbenchLayoutService) as Workbench).startup() }) From c9e49ee09420a5a8c1ed9cee7dacdac269e5a18a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Mangeonjean?= Date: Mon, 26 Feb 2024 21:00:33 +0100 Subject: [PATCH 4/4] fix(demo): adapt to view scrollbar --- demo/src/features/customView.views.ts | 1 + demo/src/features/customView.workbench.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/demo/src/features/customView.views.ts b/demo/src/features/customView.views.ts index c5c2f9ca..ee881402 100644 --- a/demo/src/features/customView.views.ts +++ b/demo/src/features/customView.views.ts @@ -11,6 +11,7 @@ registerCustomView({ container.style.display = 'flex' container.style.alignItems = 'center' container.style.justifyContent = 'center' + container.style.height = '100%' container.innerHTML = 'This is a custom view
You can render anything you want here' return { diff --git a/demo/src/features/customView.workbench.ts b/demo/src/features/customView.workbench.ts index b9f9fb7a..2b275ab8 100644 --- a/demo/src/features/customView.workbench.ts +++ b/demo/src/features/customView.workbench.ts @@ -11,6 +11,7 @@ registerCustomView({ container.style.display = 'flex' container.style.alignItems = 'center' container.style.justifyContent = 'center' + container.style.height = '100%' container.innerHTML = 'This is a custom view
You can render anything you want here' return {