Skip to content

Commit

Permalink
callh - make reference, definition, and call hierarchy peek mutually …
Browse files Browse the repository at this point in the history
…exclusive, #16110
  • Loading branch information
jrieken committed Mar 22, 2019
1 parent e7ca7d5 commit 786a9e1
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 3 deletions.
33 changes: 32 additions & 1 deletion src/vs/editor/contrib/referenceSearch/peekViewWidget.ts
Expand Up @@ -18,7 +18,38 @@ import { EmbeddedCodeEditorWidget } from 'vs/editor/browser/widget/embeddedCodeE
import { IOptions, IStyles, ZoneWidget } from 'vs/editor/contrib/zoneWidget/zoneWidget';
import * as nls from 'vs/nls';
import { ContextKeyExpr, RawContextKey } from 'vs/platform/contextkey/common/contextkey';
import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
import { ServicesAccessor, createDecorator } from 'vs/platform/instantiation/common/instantiation';
import { IDisposable } from 'vs/base/common/lifecycle';
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';


export const IPeekViewService = createDecorator<IPeekViewService>('IPeekViewService');
export interface IPeekViewService {
_serviceBrand: any;
addExclusiveWidget(editor: ICodeEditor, widget: PeekViewWidget): void;
}

registerSingleton(IPeekViewService, class implements IPeekViewService {
_serviceBrand: any;

private _widgets = new Map<ICodeEditor, { widget: PeekViewWidget, listener: IDisposable }>();

addExclusiveWidget(editor: ICodeEditor, widget: PeekViewWidget): void {
const existing = this._widgets.get(editor);
if (existing) {
existing.listener.dispose();
existing.widget.dispose();
}
const remove = () => {
const data = this._widgets.get(editor);
if (data && data.widget === widget) {
data.listener.dispose();
this._widgets.delete(editor);
}
};
this._widgets.set(editor, { widget, listener: widget.onDidClose(remove) });
}
});

export namespace PeekContext {
export const inPeekEditor = new RawContextKey<boolean>('inReferenceSearchEditor', true);
Expand Down
Expand Up @@ -102,6 +102,7 @@ export abstract class ReferencesController implements editorCommon.IEditorContri
this._widget = this._instantiationService.createInstance(ReferenceWidget, this._editor, this._defaultTreeKeyboardSupport, data);
this._widget.setTitle(nls.localize('labelLoading', "Loading..."));
this._widget.show(range);

this._disposables.push(this._widget.onDidClose(() => {
modelPromise.cancel();
if (this._widget) {
Expand Down
4 changes: 3 additions & 1 deletion src/vs/editor/contrib/referenceSearch/referencesWidget.ts
Expand Up @@ -29,7 +29,7 @@ import { ILabelService } from 'vs/platform/label/common/label';
import { WorkbenchAsyncDataTree } from 'vs/platform/list/browser/listService';
import { activeContrastBorder, contrastBorder, registerColor } from 'vs/platform/theme/common/colorRegistry';
import { ITheme, IThemeService, registerThemingParticipant } from 'vs/platform/theme/common/themeService';
import { PeekViewWidget } from './peekViewWidget';
import { PeekViewWidget, IPeekViewService } from './peekViewWidget';
import { FileReferences, OneReference, ReferencesModel } from './referencesModel';
import { ITreeRenderer, IAsyncDataSource } from 'vs/base/browser/ui/tree/tree';
import { IAsyncDataTreeOptions } from 'vs/base/browser/ui/tree/asyncDataTree';
Expand Down Expand Up @@ -264,12 +264,14 @@ export class ReferenceWidget extends PeekViewWidget {
@IThemeService themeService: IThemeService,
@ITextModelService private readonly _textModelResolverService: ITextModelService,
@IInstantiationService private readonly _instantiationService: IInstantiationService,
@IPeekViewService private readonly _peekViewService: IPeekViewService,
@ILabelService private readonly _uriLabel: ILabelService
) {
super(editor, { showFrame: false, showArrow: true, isResizeable: true, isAccessible: true });

this._applyTheme(themeService.getTheme());
this._callOnDispose.push(themeService.onThemeChange(this._applyTheme.bind(this)));
this._peekViewService.addExclusiveWidget(editor, this);
this.create();
}

Expand Down
Expand Up @@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/

import 'vs/css!./media/callHierarchy';
import { PeekViewWidget } from 'vs/editor/contrib/referenceSearch/peekViewWidget';
import { PeekViewWidget, IPeekViewService } from 'vs/editor/contrib/referenceSearch/peekViewWidget';
import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { CallHierarchyProvider, CallHierarchyDirection, CallHierarchyItem } from 'vs/workbench/contrib/callHierarchy/common/callHierarchy';
Expand Down Expand Up @@ -106,6 +106,7 @@ export class CallHierarchyTreePeekWidget extends PeekViewWidget {
private readonly _provider: CallHierarchyProvider,
private _direction: CallHierarchyDirection,
@IThemeService themeService: IThemeService,
@IPeekViewService private readonly _peekViewService: IPeekViewService,
@IEditorService private readonly _editorService: IEditorService,
@ITextModelService private readonly _textModelService: ITextModelService,
@ILabelService private readonly _labelService: ILabelService,
Expand All @@ -114,6 +115,7 @@ export class CallHierarchyTreePeekWidget extends PeekViewWidget {
) {
super(editor, { showFrame: true, showArrow: true, isResizeable: true, isAccessible: true });
this.create();
this._peekViewService.addExclusiveWidget(editor, this);
this._applyTheme(themeService.getTheme());
themeService.onThemeChange(this._applyTheme, this, this._disposables);
}
Expand Down

0 comments on commit 786a9e1

Please sign in to comment.