提交 8565aecb 编写于 作者: A Alex Ross

Only use custom hover in custom tree for markdown tooltip

For now, we will go back to the native hover. The custom hover should be used at the resource label level instead of the tree level to avoid conflicts with resource labels. This is a larger change that will come later.

Part of #106095
上级 b775976b
......@@ -40,7 +40,6 @@ import { isFalsyOrWhitespace } from 'vs/base/common/strings';
import { SIDE_BAR_BACKGROUND, PANEL_BACKGROUND } from 'vs/workbench/common/theme';
import { IHoverService, IHoverOptions, IHoverTarget } from 'vs/workbench/services/hover/browser/hover';
import { ActionViewItem } from 'vs/base/browser/ui/actionbar/actionViewItems';
import { IMarkdownString } from 'vs/base/common/htmlContent';
import { isMacintosh } from 'vs/base/common/platform';
import { ColorScheme } from 'vs/platform/theme/common/theme';
import { AnchorPosition } from 'vs/base/browser/ui/contextview/contextview';
......@@ -775,6 +774,8 @@ class TreeRenderer extends Disposable implements ITreeRenderer<ITreeItem, FuzzyS
}) : undefined;
const icon = this.themeService.getColorTheme().type === ColorScheme.LIGHT ? node.icon : node.iconDark;
const iconUrl = icon ? URI.revive(icon) : null;
const canResolve = node instanceof ResolvableTreeItem && node.hasResolve;
const title = node.tooltip ? (isString(node.tooltip) ? node.tooltip : undefined) : (resource ? undefined : (canResolve ? undefined : label));
// reset
templateData.actionBar.clear();
......@@ -784,7 +785,7 @@ class TreeRenderer extends Disposable implements ITreeRenderer<ITreeItem, FuzzyS
const labelResource = resource ? resource : URI.parse('missing:_icon_resource');
templateData.resourceLabel.setResource({ name: label, description, resource: labelResource }, {
fileKind: this.getFileKind(node),
title: '',
title,
hideIcon: !!iconUrl,
fileDecorations,
extraClasses: ['custom-view-tree-node-item-resourceLabel'],
......@@ -794,7 +795,7 @@ class TreeRenderer extends Disposable implements ITreeRenderer<ITreeItem, FuzzyS
fallbackHover = this.labelService.getUriLabel(labelResource);
} else {
templateData.resourceLabel.setResource({ name: label, description }, {
title: '',
title,
hideIcon: true,
extraClasses: ['custom-view-tree-node-item-resourceLabel'],
matches: matches ? matches : createMatches(element.filterData),
......@@ -832,6 +833,11 @@ class TreeRenderer extends Disposable implements ITreeRenderer<ITreeItem, FuzzyS
}
private setupHovers(node: ITreeItem, htmlElement: HTMLElement, disposableStore: DisposableStore, label: string | undefined): void {
if (!(node instanceof ResolvableTreeItem) || (node.tooltip && isString(node.tooltip)) || (!node.tooltip && !node.hasResolve)) {
return;
}
const resolvableNode: ResolvableTreeItem = node;
const hoverService = this.hoverService;
// Testing has indicated that on Windows and Linux 500 ms matches the native hovers most closely.
// On Mac, the delay is 1500.
......@@ -849,10 +855,8 @@ class TreeRenderer extends Disposable implements ITreeRenderer<ITreeItem, FuzzyS
this.addEventListener(DOM.EventType.MOUSE_LEAVE, mouseLeave, { passive: true });
this.addEventListener(DOM.EventType.MOUSE_MOVE, mouseMove, { passive: true });
setTimeout(async () => {
if (node instanceof ResolvableTreeItem) {
await node.resolve();
}
let tooltip: IMarkdownString | string | undefined = node.tooltip ?? label;
await resolvableNode.resolve();
const tooltip = resolvableNode.tooltip ?? label;
if (isHovering && tooltip) {
if (!hoverOptions) {
const target: IHoverTarget = {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册