Skip to content

Commit 3ee2bef

Browse files
authored
Fix custom hover closing context view for breadcrumbs (microsoft#205518)
Fix custom hover closes context view for breadcrumbs
1 parent a7844a6 commit 3ee2bef

File tree

6 files changed

+27
-9
lines changed

6 files changed

+27
-9
lines changed

src/vs/base/browser/ui/iconLabel/iconHoverDelegate.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ export interface IHoverDelegate {
6262
onDidHideHover?: () => void;
6363
delay: number;
6464
placement?: 'mouse' | 'element';
65+
showNativeHover?: boolean; // TODO@benibenj remove this, only temp fix for contextviews
6566
}
6667

6768
export interface IScopedHoverDelegate extends IHoverDelegate, IDisposable { }

src/vs/base/browser/ui/iconLabel/iconLabel.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import 'vs/css!./iconlabel';
77
import * as dom from 'vs/base/browser/dom';
88
import { HighlightedLabel } from 'vs/base/browser/ui/highlightedlabel/highlightedLabel';
99
import { IHoverDelegate } from 'vs/base/browser/ui/iconLabel/iconHoverDelegate';
10-
import { ITooltipMarkdownString, setupCustomHover } from 'vs/base/browser/ui/iconLabel/iconLabelHover';
10+
import { ITooltipMarkdownString, setupCustomHover, setupNativeHover } from 'vs/base/browser/ui/iconLabel/iconLabelHover';
1111
import { IMatch } from 'vs/base/common/filters';
1212
import { Disposable, IDisposable } from 'vs/base/common/lifecycle';
1313
import { equals } from 'vs/base/common/objects';
@@ -187,9 +187,13 @@ export class IconLabel extends Disposable {
187187
return;
188188
}
189189

190-
const hoverDisposable = setupCustomHover(this.hoverDelegate, htmlElement, tooltip);
191-
if (hoverDisposable) {
192-
this.customHovers.set(htmlElement, hoverDisposable);
190+
if (this.hoverDelegate.showNativeHover) {
191+
setupNativeHover(htmlElement, tooltip);
192+
} else {
193+
const hoverDisposable = setupCustomHover(this.hoverDelegate, htmlElement, tooltip);
194+
if (hoverDisposable) {
195+
this.customHovers.set(htmlElement, hoverDisposable);
196+
}
193197
}
194198
}
195199

src/vs/platform/hover/browser/hover.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,3 +283,12 @@ export class WorkbenchHoverDelegate extends Disposable implements IHoverDelegate
283283
}
284284
}
285285
}
286+
287+
// TODO@benibenj remove this, only temp fix for contextviews
288+
export const nativeHoverDelegate: IHoverDelegate = {
289+
showHover: function (): IHoverWidget | undefined {
290+
throw new Error('Native hover function not implemented.');
291+
},
292+
delay: 0,
293+
showNativeHover: true
294+
};

src/vs/workbench/browser/parts/editor/breadcrumbsControl.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ import { Codicon } from 'vs/base/common/codicons';
4141
import { defaultBreadcrumbsWidgetStyles } from 'vs/platform/theme/browser/defaultStyles';
4242
import { Emitter } from 'vs/base/common/event';
4343
import { IHoverDelegate } from 'vs/base/browser/ui/iconLabel/iconHoverDelegate';
44-
import { getDefaultHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate';
44+
import { nativeHoverDelegate } from 'vs/platform/hover/browser/hover';
4545

4646
class OutlineItem extends BreadcrumbsItem {
4747

@@ -230,7 +230,7 @@ export class BreadcrumbsControl {
230230
this._ckBreadcrumbsVisible = BreadcrumbsControl.CK_BreadcrumbsVisible.bindTo(this._contextKeyService);
231231
this._ckBreadcrumbsActive = BreadcrumbsControl.CK_BreadcrumbsActive.bindTo(this._contextKeyService);
232232

233-
this._hoverDelegate = getDefaultHoverDelegate('mouse');
233+
this._hoverDelegate = nativeHoverDelegate;
234234

235235
this._disposables.add(breadcrumbsService.register(this._editorGroup.id, this._widget));
236236
this.hide();

src/vs/workbench/browser/parts/editor/breadcrumbsPicker.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ import { IOutline, IOutlineComparator } from 'vs/workbench/services/outline/brow
3131
import { IEditorOptions } from 'vs/platform/editor/common/editor';
3232
import { IEditorService, SIDE_GROUP } from 'vs/workbench/services/editor/common/editorService';
3333
import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration';
34+
import { IHoverDelegate } from 'vs/base/browser/ui/iconLabel/iconHoverDelegate';
35+
import { nativeHoverDelegate } from 'vs/platform/hover/browser/hover';
3436

3537
interface ILayoutInfo {
3638
maxHeight: number;
@@ -213,12 +215,13 @@ class FileRenderer implements ITreeRenderer<IFileStat | IWorkspaceFolder, FuzzyS
213215

214216
constructor(
215217
private readonly _labels: ResourceLabels,
218+
private readonly _hoverDelegate: IHoverDelegate,
216219
@IConfigurationService private readonly _configService: IConfigurationService,
217220
) { }
218221

219222

220223
renderTemplate(container: HTMLElement): IResourceLabel {
221-
return this._labels.create(container, { supportHighlights: true });
224+
return this._labels.create(container, { supportHighlights: true, hoverDelegate: this._hoverDelegate });
222225
}
223226

224227
renderElement(node: ITreeNode<IWorkspaceFolder | IFileStat, [number, number, number]>, index: number, templateData: IResourceLabel): void {
@@ -374,7 +377,7 @@ export class BreadcrumbsFilePicker extends BreadcrumbsPicker {
374377
'BreadcrumbsFilePicker',
375378
container,
376379
new FileVirtualDelegate(),
377-
[this._instantiationService.createInstance(FileRenderer, labels)],
380+
[this._instantiationService.createInstance(FileRenderer, labels, nativeHoverDelegate)],
378381
this._instantiationService.createInstance(FileDataSource),
379382
{
380383
multipleSelectionSupport: false,

src/vs/workbench/contrib/codeEditor/browser/outline/documentSymbolsTree.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import { ThemeIcon } from 'vs/base/common/themables';
2626
import { mainWindow } from 'vs/base/browser/window';
2727
import { IHoverDelegate } from 'vs/base/browser/ui/iconLabel/iconHoverDelegate';
2828
import { getDefaultHoverDelegate } from 'vs/base/browser/ui/hover/hoverDelegate';
29+
import { nativeHoverDelegate } from 'vs/platform/hover/browser/hover';
2930

3031
export type DocumentSymbolItem = OutlineGroup | OutlineElement;
3132

@@ -125,7 +126,7 @@ export class DocumentSymbolRenderer implements ITreeRenderer<OutlineElement, Fuz
125126
@IConfigurationService private readonly _configurationService: IConfigurationService,
126127
@IThemeService private readonly _themeService: IThemeService,
127128
) {
128-
this._hoverDelegate = getDefaultHoverDelegate(target === OutlineTarget.Breadcrumbs ? 'element' : 'mouse');
129+
this._hoverDelegate = target === OutlineTarget.OutlinePane ? getDefaultHoverDelegate('mouse') : nativeHoverDelegate;
129130
}
130131

131132
renderTemplate(container: HTMLElement): DocumentSymbolTemplate {

0 commit comments

Comments
 (0)