Skip to content

Commit c2997da

Browse files
committed
Gesture.addTarget returns an IDisposable
fixes microsoft#81630
1 parent 5c3ac79 commit c2997da

12 files changed

Lines changed: 22 additions & 14 deletions

File tree

src/vs/base/browser/touch.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,15 +86,21 @@ export class Gesture extends Disposable {
8686
this._register(DomUtils.addDisposableListener(document, 'touchmove', (e: TouchEvent) => this.onTouchMove(e)));
8787
}
8888

89-
public static addTarget(element: HTMLElement): void {
89+
public static addTarget(element: HTMLElement): IDisposable {
9090
if (!Gesture.isTouchDevice()) {
91-
return;
91+
return Disposable.None;
9292
}
9393
if (!Gesture.INSTANCE) {
9494
Gesture.INSTANCE = new Gesture();
9595
}
9696

9797
Gesture.INSTANCE.targets.push(element);
98+
99+
return {
100+
dispose: () => {
101+
Gesture.INSTANCE.targets = Gesture.INSTANCE.targets.filter(t => t !== element);
102+
}
103+
};
98104
}
99105

100106
@memoize

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ export class BaseActionViewItem extends Disposable implements IActionViewItem {
103103

104104
render(container: HTMLElement): void {
105105
this.element = container;
106-
Gesture.addTarget(container);
106+
this._register(Gesture.addTarget(container));
107107

108108
const enableDragging = this.options && this.options.draggable;
109109
if (enableDragging) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ export class Button extends Disposable {
6363

6464
container.appendChild(this._element);
6565

66-
Gesture.addTarget(this._element);
66+
this._register(Gesture.addTarget(this._element));
6767

6868
[DOM.EventType.CLICK, EventType.Tap].forEach(eventType => {
6969
this._register(DOM.addDisposableListener(this._element, eventType, e => {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ export class BaseDropdown extends ActionRunner {
8383
this._register(cleanupFn);
8484
}
8585

86-
Gesture.addTarget(this._label);
86+
this._register(Gesture.addTarget(this._label));
8787
}
8888

8989
get element(): HTMLElement {

src/vs/base/browser/ui/list/listView.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ export class ListView<T> implements ISpliceable<T>, IDisposable {
236236

237237
this.rowsContainer = document.createElement('div');
238238
this.rowsContainer.className = 'monaco-list-rows';
239-
Gesture.addTarget(this.rowsContainer);
239+
this.disposables.add(Gesture.addTarget(this.rowsContainer));
240240

241241
this.scrollableElement = this.disposables.add(new ScrollableElement(this.rowsContainer, {
242242
alwaysConsumeMouseWheel: true,

src/vs/base/browser/ui/list/listWidget.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -542,7 +542,7 @@ export class MouseController<T> implements IDisposable {
542542
list.onContextMenu(this.onContextMenu, this, this.disposables);
543543
list.onMouseDblClick(this.onDoubleClick, this, this.disposables);
544544
list.onTouchStart(this.onMouseDown, this, this.disposables);
545-
Gesture.addTarget(list.getHTMLElement());
545+
this.disposables.add(Gesture.addTarget(list.getHTMLElement()));
546546
}
547547

548548
list.onMouseClick(this.onPointer, this, this.disposables);

src/vs/base/browser/ui/menu/menubar.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ export class MenuBar extends Disposable {
238238
}
239239
}));
240240

241-
Gesture.addTarget(buttonElement);
241+
this._register(Gesture.addTarget(buttonElement));
242242
this._register(DOM.addDisposableListener(buttonElement, EventType.Tap, (e: GestureEvent) => {
243243
// Ignore this touch if the menu is touched
244244
if (this.isOpen && this.focusedMenu && this.focusedMenu.holder && DOM.isAncestor(e.initialTarget as HTMLElement, this.focusedMenu.holder)) {
@@ -322,7 +322,7 @@ export class MenuBar extends Disposable {
322322
}
323323
}));
324324

325-
Gesture.addTarget(buttonElement);
325+
this._register(Gesture.addTarget(buttonElement));
326326
this._register(DOM.addDisposableListener(buttonElement, EventType.Tap, (e: GestureEvent) => {
327327
// Ignore this touch if the menu is touched
328328
if (this.isOpen && this.focusedMenu && this.focusedMenu.holder && DOM.isAncestor(e.initialTarget as HTMLElement, this.focusedMenu.holder)) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ export class Sash extends Disposable {
139139
this._register(domEvent(this.el, 'mousedown')(this.onMouseDown, this));
140140
this._register(domEvent(this.el, 'dblclick')(this.onMouseDoubleClick, this));
141141

142-
Gesture.addTarget(this.el);
142+
this._register(Gesture.addTarget(this.el));
143143
this._register(domEvent(this.el, EventType.Start)(this.onTouchStart, this));
144144

145145
if (isIPad) {

src/vs/base/parts/tree/browser/treeView.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,7 @@ export class TreeView extends HeightMap {
437437
private shouldInvalidateDropReaction: boolean;
438438
private currentDropTargets: ViewItem[] | null = null;
439439
private currentDropDisposable: Lifecycle.IDisposable = Lifecycle.Disposable.None;
440+
private gestureDisposable: Lifecycle.IDisposable = Lifecycle.Disposable.None;
440441
private dragAndDropScrollInterval: number | null = null;
441442
private dragAndDropScrollTimeout: number | null = null;
442443
private dragAndDropMouseY: number | null = null;
@@ -523,7 +524,7 @@ export class TreeView extends HeightMap {
523524
this.wrapper.style.msTouchAction = 'none';
524525
this.wrapper.style.msContentZooming = 'none';
525526
} else {
526-
Touch.Gesture.addTarget(this.wrapper);
527+
this.gestureDisposable = Touch.Gesture.addTarget(this.wrapper);
527528
}
528529

529530
this.rowsContainer = document.createElement('div');
@@ -1675,6 +1676,7 @@ export class TreeView extends HeightMap {
16751676
if (this.context.cache) {
16761677
this.context.cache.dispose();
16771678
}
1679+
this.gestureDisposable.dispose();
16781680

16791681
super.dispose();
16801682
}

src/vs/editor/browser/controller/pointerHandler.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ class TouchHandler extends MouseHandler {
190190
constructor(context: ViewContext, viewController: ViewController, viewHelper: IPointerHandlerHelper) {
191191
super(context, viewController, viewHelper);
192192

193-
Gesture.addTarget(this.viewHelper.linesContentDomNode);
193+
this._register(Gesture.addTarget(this.viewHelper.linesContentDomNode));
194194

195195
this._register(dom.addDisposableListener(this.viewHelper.linesContentDomNode, EventType.Tap, (e) => this.onTap(e)));
196196
this._register(dom.addDisposableListener(this.viewHelper.linesContentDomNode, EventType.Change, (e) => this.onChange(e)));

0 commit comments

Comments
 (0)