mirror of
https://github.com/Microsoft/vscode
synced 2024-10-01 08:50:48 +00:00
aux window - hopefully fix contextview issue
This commit is contained in:
parent
634df63517
commit
af63c41918
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue