aux window - hopefully fix contextview issue

This commit is contained in:
Benjamin Pasero 2023-11-17 11:36:50 +01:00 committed by Benjamin Pasero
parent 634df63517
commit af63c41918
2 changed files with 25 additions and 28 deletions

View file

@ -136,29 +136,33 @@ export class ContextView extends Disposable {
private container: HTMLElement | null = null;
private view: HTMLElement;
private useFixedPosition: boolean;
private useShadowDOM: boolean;
private useFixedPosition = false;
private useShadowDOM = false;
private delegate: IDelegate | null = null;
private toDisposeOnClean: IDisposable = Disposable.None;
private toDisposeOnSetContainer: IDisposable = Disposable.None;
private shadowRoot: ShadowRoot | null = null;
private shadowRootHostElement: HTMLElement | null = null;
constructor(container: HTMLElement | null, domPosition: ContextViewDOMPosition) {
constructor(container: HTMLElement, domPosition: ContextViewDOMPosition) {
super();
this.view = DOM.$('.context-view');
this.useFixedPosition = false;
this.useShadowDOM = false;
DOM.hide(this.view);
this.setContainer(container, domPosition);
this._register(toDisposable(() => this.setContainer(null, ContextViewDOMPosition.ABSOLUTE)));
}
setContainer(container: HTMLElement | null, domPosition: ContextViewDOMPosition): void {
this.useFixedPosition = domPosition !== ContextViewDOMPosition.ABSOLUTE;
const usedShadowDOM = this.useShadowDOM;
this.useShadowDOM = domPosition === ContextViewDOMPosition.FIXED_SHADOW;
if (container === this.container && usedShadowDOM !== this.useShadowDOM) {
return; // container is the same and now shadow DOM usage has changed
}
if (this.container) {
this.toDisposeOnSetContainer.dispose();
@ -173,12 +177,10 @@ export class ContextView extends Disposable {
this.container = null;
}
if (container) {
this.container = container;
this.useFixedPosition = domPosition !== ContextViewDOMPosition.ABSOLUTE;
this.useShadowDOM = domPosition === ContextViewDOMPosition.FIXED_SHADOW;
if (this.useShadowDOM) {
this.shadowRootHostElement = DOM.$('.shadow-root-host');
this.container.appendChild(this.shadowRootHostElement);

View file

@ -9,44 +9,32 @@ import { ILayoutService } from 'vs/platform/layout/browser/layoutService';
import { IContextViewDelegate, IContextViewService } from './contextView';
export class ContextViewService extends Disposable implements IContextViewService {
declare readonly _serviceBrand: undefined;
private currentViewDisposable: IDisposable = Disposable.None;
private contextView: ContextView;
private container: HTMLElement | null;
private shadowRoot: boolean | undefined;
private readonly contextView = this._register(new ContextView(this.layoutService.mainContainer, ContextViewDOMPosition.ABSOLUTE));
constructor(
@ILayoutService private readonly layoutService: ILayoutService
) {
super();
this.container = layoutService.mainContainer;
this.contextView = this._register(new ContextView(this.container, ContextViewDOMPosition.ABSOLUTE));
this.layout();
this._register(layoutService.onDidLayoutContainer(() => this.layout()));
}
// ContextView
private setContainer(container: HTMLElement, domPosition?: ContextViewDOMPosition): void {
this.container = container;
this.contextView.setContainer(container, domPosition || ContextViewDOMPosition.ABSOLUTE);
}
showContextView(delegate: IContextViewDelegate, container?: HTMLElement, shadowRoot?: boolean): IDisposable {
let domPosition: ContextViewDOMPosition;
if (container) {
if (container !== this.container || this.shadowRoot !== shadowRoot) {
this.setContainer(container, shadowRoot ? ContextViewDOMPosition.FIXED_SHADOW : ContextViewDOMPosition.FIXED);
}
domPosition = shadowRoot ? ContextViewDOMPosition.FIXED_SHADOW : ContextViewDOMPosition.FIXED;
} else {
if (this.container !== this.layoutService.activeContainer) {
this.setContainer(this.layoutService.activeContainer, ContextViewDOMPosition.ABSOLUTE);
}
domPosition = ContextViewDOMPosition.ABSOLUTE;
}
this.shadowRoot = shadowRoot;
this.contextView.setContainer(container ?? this.layoutService.activeContainer, domPosition);
this.contextView.show(delegate);
@ -71,4 +59,11 @@ export class ContextViewService extends Disposable implements IContextViewServic
hideContextView(data?: any): void {
this.contextView.hide(data);
}
override dispose(): void {
super.dispose();
this.currentViewDisposable.dispose();
this.currentViewDisposable = Disposable.None;
}
}