mirror of
https://github.com/Microsoft/vscode
synced 2024-10-04 02:14:06 +00:00
parent
9c7f30b0a8
commit
d4a41934a6
|
@ -55,7 +55,7 @@ import { ConsoleLogger, ILogService } from 'vs/platform/log/common/log';
|
|||
import { IWorkspaceTrustManagementService, IWorkspaceTrustTransitionParticipant, IWorkspaceTrustUriInfo } from 'vs/platform/workspace/common/workspaceTrust';
|
||||
import { EditorOption } from 'vs/editor/common/config/editorOptions';
|
||||
import { ICodeEditor, IDiffEditor } from 'vs/editor/browser/editorBrowser';
|
||||
import { IContextMenuService, IContextViewDelegate, IContextViewService } from 'vs/platform/contextview/browser/contextView';
|
||||
import { IContextMenuService, IContextViewDelegate, IContextViewService, IOpenContextView } from 'vs/platform/contextview/browser/contextView';
|
||||
import { ContextViewService } from 'vs/platform/contextview/browser/contextViewService';
|
||||
import { LanguageService } from 'vs/editor/common/services/languageService';
|
||||
import { ContextMenuService } from 'vs/platform/contextview/browser/contextMenuService';
|
||||
|
@ -989,7 +989,7 @@ class StandaloneContextViewService extends ContextViewService {
|
|||
super(layoutService);
|
||||
}
|
||||
|
||||
override showContextView(delegate: IContextViewDelegate, container?: HTMLElement, shadowRoot?: boolean): IDisposable {
|
||||
override showContextView(delegate: IContextViewDelegate, container?: HTMLElement, shadowRoot?: boolean): IOpenContextView {
|
||||
if (!container) {
|
||||
const codeEditor = this._codeEditorService.getFocusedCodeEditor() || this._codeEditorService.getActiveCodeEditor();
|
||||
if (codeEditor) {
|
||||
|
|
|
@ -19,7 +19,7 @@ export interface IContextViewService extends IContextViewProvider {
|
|||
|
||||
readonly _serviceBrand: undefined;
|
||||
|
||||
showContextView(delegate: IContextViewDelegate, container?: HTMLElement, shadowRoot?: boolean): IDisposable;
|
||||
showContextView(delegate: IContextViewDelegate, container?: HTMLElement, shadowRoot?: boolean): IOpenContextView;
|
||||
hideContextView(data?: any): void;
|
||||
getContextViewElement(): HTMLElement;
|
||||
layout(): void;
|
||||
|
@ -48,6 +48,10 @@ export interface IContextViewDelegate {
|
|||
layer?: number; // Default: 0
|
||||
}
|
||||
|
||||
export interface IOpenContextView {
|
||||
close: () => void;
|
||||
}
|
||||
|
||||
export const IContextMenuService = createDecorator<IContextMenuService>('contextMenuService');
|
||||
|
||||
export interface IContextMenuService {
|
||||
|
|
|
@ -4,15 +4,14 @@
|
|||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { ContextView, ContextViewDOMPosition, IContextViewProvider } from 'vs/base/browser/ui/contextview/contextview';
|
||||
import { Disposable, IDisposable, MutableDisposable, toDisposable } from 'vs/base/common/lifecycle';
|
||||
import { Disposable } from 'vs/base/common/lifecycle';
|
||||
import { ILayoutService } from 'vs/platform/layout/browser/layoutService';
|
||||
import { IContextViewDelegate, IContextViewService } from './contextView';
|
||||
import { IContextViewDelegate, IContextViewService, IOpenContextView } from './contextView';
|
||||
import { getWindow } from 'vs/base/browser/dom';
|
||||
|
||||
|
||||
export class ContextViewHandler extends Disposable implements IContextViewProvider {
|
||||
|
||||
private readonly currentViewDisposable = this._register(new MutableDisposable<IDisposable>());
|
||||
private openContextView: IOpenContextView | undefined;
|
||||
protected readonly contextView = this._register(new ContextView(this.layoutService.mainContainer, ContextViewDOMPosition.ABSOLUTE));
|
||||
|
||||
constructor(
|
||||
|
@ -26,7 +25,7 @@ export class ContextViewHandler extends Disposable implements IContextViewProvid
|
|||
|
||||
// ContextView
|
||||
|
||||
showContextView(delegate: IContextViewDelegate, container?: HTMLElement, shadowRoot?: boolean): IDisposable {
|
||||
showContextView(delegate: IContextViewDelegate, container?: HTMLElement, shadowRoot?: boolean): IOpenContextView {
|
||||
let domPosition: ContextViewDOMPosition;
|
||||
if (container) {
|
||||
if (container === this.layoutService.getContainer(getWindow(container))) {
|
||||
|
@ -44,14 +43,16 @@ export class ContextViewHandler extends Disposable implements IContextViewProvid
|
|||
|
||||
this.contextView.show(delegate);
|
||||
|
||||
const disposable = toDisposable(() => {
|
||||
if (this.currentViewDisposable === disposable) {
|
||||
this.hideContextView();
|
||||
const openContextView: IOpenContextView = {
|
||||
close: () => {
|
||||
if (this.openContextView === openContextView) {
|
||||
this.hideContextView();
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
this.currentViewDisposable.value = disposable;
|
||||
return disposable;
|
||||
this.openContextView = openContextView;
|
||||
return openContextView;
|
||||
}
|
||||
|
||||
layout(): void {
|
||||
|
@ -60,6 +61,7 @@ export class ContextViewHandler extends Disposable implements IContextViewProvid
|
|||
|
||||
hideContextView(data?: any): void {
|
||||
this.contextView.hide(data);
|
||||
this.openContextView = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ import { ResourceLabels, IResourceLabel, IFileLabelOptions } from 'vs/workbench/
|
|||
import { CountBadge } from 'vs/base/browser/ui/countBadge/countBadge';
|
||||
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
|
||||
import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { IContextViewService, IContextMenuService } from 'vs/platform/contextview/browser/contextView';
|
||||
import { IContextViewService, IContextMenuService, IOpenContextView } from 'vs/platform/contextview/browser/contextView';
|
||||
import { IContextKeyService, IContextKey, ContextKeyExpr, RawContextKey } from 'vs/platform/contextkey/common/contextkey';
|
||||
import { ICommandService } from 'vs/platform/commands/common/commands';
|
||||
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
|
||||
|
@ -2286,7 +2286,7 @@ class SCMInputWidget {
|
|||
private readonly repositoryDisposables = new DisposableStore();
|
||||
|
||||
private validation: IInputValidation | undefined;
|
||||
private validationDisposable: IDisposable = Disposable.None;
|
||||
private validationContextView: IOpenContextView | undefined;
|
||||
private validationHasFocus: boolean = false;
|
||||
private _validationTimer: any;
|
||||
|
||||
|
@ -2652,7 +2652,7 @@ class SCMInputWidget {
|
|||
|
||||
const disposables = new DisposableStore();
|
||||
|
||||
this.validationDisposable = this.contextViewService.showContextView({
|
||||
this.validationContextView = this.contextViewService.showContextView({
|
||||
getAnchor: () => this.element,
|
||||
render: container => {
|
||||
this.element.style.borderBottomLeftRadius = '0';
|
||||
|
@ -2733,7 +2733,8 @@ class SCMInputWidget {
|
|||
}
|
||||
|
||||
clearValidation(): void {
|
||||
this.validationDisposable.dispose();
|
||||
this.validationContextView?.close();
|
||||
this.validationContextView = undefined;
|
||||
this.validationHasFocus = false;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue