From 69821ac04efcf66013b8df389c1afa952bec47fd Mon Sep 17 00:00:00 2001
From: David Sehnal <david.sehnal@gmail.com>
Date: Mon, 30 Jul 2018 18:05:21 +0200
Subject: [PATCH] Fixed viewer.click event

---
 src/mol-app/ui/visualization/viewport.tsx | 1 +
 src/mol-util/input/input-observer.ts      | 8 +++++---
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/mol-app/ui/visualization/viewport.tsx b/src/mol-app/ui/visualization/viewport.tsx
index 902882921..11fef7e54 100644
--- a/src/mol-app/ui/visualization/viewport.tsx
+++ b/src/mol-app/ui/visualization/viewport.tsx
@@ -170,6 +170,7 @@ export class Viewport extends View<ViewportController, ViewportState, { noWebGl?
             this.setState({ info })
         })
 
+        // TODO filter only for left button?
         viewer.input.click.subscribe(({x, y}) => {
             const loci = viewer.getLoci(viewer.identify(x, y))
             InteractivityEvents.SelectLoci.dispatch(this.controller.context, loci);
diff --git a/src/mol-util/input/input-observer.ts b/src/mol-util/input/input-observer.ts
index b1f7073cf..f622969cf 100644
--- a/src/mol-util/input/input-observer.ts
+++ b/src/mol-util/input/input-observer.ts
@@ -145,6 +145,7 @@ namespace InputObserver {
         const lineHeight = toPixels('ex', element)
 
         let lastTouchDistance = 0
+        const pointerDown = Vec2.zero()
         const pointerStart = Vec2.zero()
         const pointerEnd = Vec2.zero()
         const pointerDelta = Vec2.zero()
@@ -334,6 +335,8 @@ namespace InputObserver {
 
         function onPointerDown (ev: PointerEvent) {
             eventOffset(pointerStart, ev)
+            Vec2.copy(pointerDown, pointerStart)
+
             if (insideBounds(pointerStart)) {
                 dragging = DraggingState.Started
             }
@@ -342,9 +345,8 @@ namespace InputObserver {
         function onPointerUp (ev: PointerEvent) {
             dragging = DraggingState.Stopped
 
-            if (Vec2.distance(pointerEnd, pointerStart) < 4) {
-                eventOffset(pointerEnd, ev)
-
+            eventOffset(pointerEnd, ev);
+            if (Vec2.distance(pointerEnd, pointerDown) < 4) {
                 const { pageX, pageY } = ev
                 const [ x, y ] = pointerEnd
 
-- 
GitLab