Skip to content

Commit 5ece1f1

Browse files
committed
1 parent c43b97e commit 5ece1f1

5 files changed

Lines changed: 30 additions & 4 deletions

File tree

src/vs/base/browser/dom.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -768,6 +768,10 @@ export function findParentWithClass(node: HTMLElement, clazz: string, stopAtClaz
768768
return null;
769769
}
770770

771+
export function hasParentWithClass(node: HTMLElement, clazz: string, stopAtClazzOrNode?: string | HTMLElement): boolean {
772+
return !!findParentWithClass(node, clazz, stopAtClazzOrNode);
773+
}
774+
771775
export function createStyleSheet(container: HTMLElement = document.getElementsByTagName('head')[0]): HTMLStyleElement {
772776
let style = document.createElement('style');
773777
style.type = 'text/css';

src/vs/base/browser/ui/tree/abstractTree.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ import 'vs/css!./media/tree';
77
import { IDisposable, dispose, Disposable, toDisposable } from 'vs/base/common/lifecycle';
88
import { IListOptions, List, IListStyles, mightProducePrintableCharacter, MouseController } from 'vs/base/browser/ui/list/listWidget';
99
import { IListVirtualDelegate, IListRenderer, IListMouseEvent, IListEvent, IListContextMenuEvent, IListDragAndDrop, IListDragOverReaction, IKeyboardNavigationLabelProvider, IIdentityProvider } from 'vs/base/browser/ui/list/list';
10-
import { append, $, toggleClass, getDomNodePagePosition, removeClass, addClass, hasClass } from 'vs/base/browser/dom';
10+
import { append, $, toggleClass, getDomNodePagePosition, removeClass, addClass, hasClass, hasParentWithClass } from 'vs/base/browser/dom';
1111
import { Event, Relay, Emitter, EventBufferer } from 'vs/base/common/event';
1212
import { StandardKeyboardEvent, IKeyboardEvent } from 'vs/base/browser/keyboardEvent';
1313
import { KeyCode } from 'vs/base/common/keyCodes';
14-
import { ITreeModel, ITreeNode, ITreeRenderer, ITreeEvent, ITreeMouseEvent, ITreeContextMenuEvent, ITreeFilter, ITreeNavigator, ICollapseStateChangeEvent, ITreeDragAndDrop, TreeDragOverBubble, TreeVisibility, TreeFilterResult, ITreeModelSpliceEvent } from 'vs/base/browser/ui/tree/tree';
14+
import { ITreeModel, ITreeNode, ITreeRenderer, ITreeEvent, ITreeMouseEvent, ITreeContextMenuEvent, ITreeFilter, ITreeNavigator, ICollapseStateChangeEvent, ITreeDragAndDrop, TreeDragOverBubble, TreeVisibility, TreeFilterResult, ITreeModelSpliceEvent, TreeMouseEventTarget } from 'vs/base/browser/ui/tree/tree';
1515
import { ISpliceable } from 'vs/base/common/sequence';
1616
import { IDragAndDropData, StaticDND, DragAndDropData } from 'vs/base/browser/dnd';
1717
import { range, equals, distinctES6 } from 'vs/base/common/arrays';
@@ -722,9 +722,18 @@ function asTreeEvent<T>(event: IListEvent<ITreeNode<T, any>>): ITreeEvent<T> {
722722
}
723723

724724
function asTreeMouseEvent<T>(event: IListMouseEvent<ITreeNode<T, any>>): ITreeMouseEvent<T> {
725+
let target: TreeMouseEventTarget = TreeMouseEventTarget.Unknown;
726+
727+
if (hasParentWithClass(event.browserEvent.target as HTMLElement, 'monaco-tl-twistie', 'monaco-tl-row')) {
728+
target = TreeMouseEventTarget.Twistie;
729+
} else if (hasParentWithClass(event.browserEvent.target as HTMLElement, 'monaco-tl-contents', 'monaco-tl-row')) {
730+
target = TreeMouseEventTarget.Element;
731+
}
732+
725733
return {
726734
browserEvent: event.browserEvent,
727-
element: event.element ? event.element.element : null
735+
element: event.element ? event.element.element : null,
736+
target
728737
};
729738
}
730739

src/vs/base/browser/ui/tree/asyncDataTree.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,8 @@ function asTreeEvent<TInput, T>(e: ITreeEvent<IAsyncDataTreeNode<TInput, T>>): I
133133
function asTreeMouseEvent<TInput, T>(e: ITreeMouseEvent<IAsyncDataTreeNode<TInput, T>>): ITreeMouseEvent<T> {
134134
return {
135135
browserEvent: e.browserEvent,
136-
element: e.element && e.element.element as T
136+
element: e.element && e.element.element as T,
137+
target: e.target
137138
};
138139
}
139140

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,9 +137,16 @@ export interface ITreeEvent<T> {
137137
browserEvent?: UIEvent;
138138
}
139139

140+
export enum TreeMouseEventTarget {
141+
Unknown,
142+
Twistie,
143+
Element
144+
}
145+
140146
export interface ITreeMouseEvent<T> {
141147
browserEvent: MouseEvent;
142148
element: T | null;
149+
target: TreeMouseEventTarget;
143150
}
144151

145152
export interface ITreeContextMenuEvent<T> {

src/vs/workbench/contrib/callHierarchy/browser/callHierarchyPeek.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import { IActionBarOptions, ActionsOrientation } from 'vs/base/browser/ui/action
3333
import { ILabelService } from 'vs/platform/label/common/label';
3434
import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';
3535
import { Color } from 'vs/base/common/color';
36+
import { TreeMouseEventTarget } from 'vs/base/browser/ui/tree/tree';
3637

3738
const enum State {
3839
Loading = 'loading',
@@ -307,6 +308,10 @@ export class CallHierarchyTreePeekWidget extends PeekViewWidget {
307308
}));
308309

309310
this._disposables.add(this._tree.onMouseDblClick(e => {
311+
if (e.target === TreeMouseEventTarget.Twistie) {
312+
return;
313+
}
314+
310315
if (e.element && isNonEmptyArray(e.element.locations)) {
311316
this.dispose();
312317
this._editorService.openEditor({

0 commit comments

Comments
 (0)