Quellcode durchsuchen

fix: mobile context menu won't show on long press (#4741)

* scribble fix only if not Android

* Update src/components/App.tsx

Co-authored-by: David Luzar <luzar.david@gmail.com>
zsviczian vor 3 Jahren
Ursprung
Commit
d450c36581
2 geänderte Dateien mit 9 neuen und 1 gelöschten Zeilen
  1. 8 1
      src/components/App.tsx
  2. 1 0
      src/keys.ts

+ 8 - 1
src/components/App.tsx

@@ -163,6 +163,7 @@ import {
   shouldRotateWithDiscreteAngle,
   isArrowKey,
   KEYS,
+  isAndroid,
 } from "../keys";
 import { distance2d, getGridPoint, isPathALoop } from "../math";
 import { renderScene } from "../renderer";
@@ -1274,7 +1275,10 @@ class App extends React.Component<AppProps, AppState> {
 
   private onTapStart = (event: TouchEvent) => {
     // fix for Apple Pencil Scribble
-    event.preventDefault();
+    // On Android, preventing the event would disable contextMenu on tap-hold
+    if (!isAndroid) {
+      event.preventDefault();
+    }
 
     if (!didTapTwice) {
       didTapTwice = true;
@@ -1297,6 +1301,9 @@ class App extends React.Component<AppProps, AppState> {
       didTapTwice = false;
       clearTimeout(tappedTwiceTimer);
     }
+    if (isAndroid) {
+      event.preventDefault();
+    }
 
     if (event.touches.length === 2) {
       this.setState({

+ 1 - 0
src/keys.ts

@@ -1,5 +1,6 @@
 export const isDarwin = /Mac|iPod|iPhone|iPad/.test(window.navigator.platform);
 export const isWindows = /^Win/.test(window.navigator.platform);
+export const isAndroid = /\b(android)\b/i.test(navigator.userAgent);
 
 export const CODES = {
   EQUAL: "Equal",