|
5 | 5 |
|
6 | 6 | import { $, append, createStyleSheet, EventHelper, EventLike } from 'vs/base/browser/dom';
|
7 | 7 | import { DomEmitter } from 'vs/base/browser/event';
|
8 |
| -import { EventType, Gesture, GestureEvent } from 'vs/base/browser/touch'; |
| 8 | +import { EventType, Gesture } from 'vs/base/browser/touch'; |
9 | 9 | import { Delayer } from 'vs/base/common/async';
|
10 | 10 | import { memoize } from 'vs/base/common/decorators';
|
11 | 11 | import { Emitter, Event } from 'vs/base/common/event';
|
@@ -155,6 +155,7 @@ interface PointerEvent extends EventLike {
|
155 | 155 | readonly pageY: number;
|
156 | 156 | readonly altKey: boolean;
|
157 | 157 | readonly target: EventTarget | null;
|
| 158 | + readonly initialTarget?: EventTarget | undefined; |
158 | 159 | }
|
159 | 160 |
|
160 | 161 | interface IPointerEventFactory {
|
@@ -419,17 +420,22 @@ export class Sash extends Disposable {
|
419 | 420 |
|
420 | 421 | this._register(Gesture.addTarget(this.el));
|
421 | 422 |
|
422 |
| - const onTouchStart = Event.map(this._register(new DomEmitter(this.el, EventType.Start)).event, e => ({ ...e, target: e.initialTarget ?? null })); |
| 423 | + const onTouchStart = this._register(new DomEmitter(this.el, EventType.Start)).event; |
423 | 424 | this._register(onTouchStart(e => this.onPointerStart(e, new GestureEventFactory(this.el)), this));
|
424 | 425 | const onTap = this._register(new DomEmitter(this.el, EventType.Tap)).event;
|
425 |
| - const onDoubleTap = Event.map( |
426 |
| - Event.filter( |
427 |
| - Event.debounce<GestureEvent, { event: GestureEvent; count: number }>(onTap, (res, event) => ({ event, count: (res?.count ?? 0) + 1 }), 250), |
428 |
| - ({ count }) => count === 2 |
429 |
| - ), |
430 |
| - ({ event }) => ({ ...event, target: event.initialTarget ?? null }) |
431 |
| - ); |
432 |
| - this._register(onDoubleTap(this.onPointerDoublePress, this)); |
| 426 | + |
| 427 | + let doubleTapTimeout: any = undefined; |
| 428 | + this._register(onTap(event => { |
| 429 | + if (doubleTapTimeout) { |
| 430 | + clearTimeout(doubleTapTimeout); |
| 431 | + doubleTapTimeout = undefined; |
| 432 | + this.onPointerDoublePress(event); |
| 433 | + return; |
| 434 | + } |
| 435 | + |
| 436 | + clearTimeout(doubleTapTimeout); |
| 437 | + doubleTapTimeout = setTimeout(() => doubleTapTimeout = undefined, 250); |
| 438 | + }, this)); |
433 | 439 |
|
434 | 440 | if (typeof options.size === 'number') {
|
435 | 441 | this.size = options.size;
|
@@ -645,12 +651,14 @@ export class Sash extends Disposable {
|
645 | 651 | }
|
646 | 652 |
|
647 | 653 | private getOrthogonalSash(e: PointerEvent): Sash | undefined {
|
648 |
| - if (!e.target || !(e.target instanceof HTMLElement)) { |
| 654 | + const target = e.initialTarget ?? e.target; |
| 655 | + |
| 656 | + if (!target || !(target instanceof HTMLElement)) { |
649 | 657 | return undefined;
|
650 | 658 | }
|
651 | 659 |
|
652 |
| - if (e.target.classList.contains('orthogonal-drag-handle')) { |
653 |
| - return e.target.classList.contains('start') ? this.orthogonalStartSash : this.orthogonalEndSash; |
| 660 | + if (target.classList.contains('orthogonal-drag-handle')) { |
| 661 | + return target.classList.contains('start') ? this.orthogonalStartSash : this.orthogonalEndSash; |
654 | 662 | }
|
655 | 663 |
|
656 | 664 | return undefined;
|
|
0 commit comments