|
@@ -1603,6 +1603,10 @@ class App extends React.Component<any, AppState> {
|
|
|
(event.button === POINTER_BUTTON.MAIN && isHoldingSpace))
|
|
|
) {
|
|
|
isPanning = true;
|
|
|
+
|
|
|
+ let nextPastePrevented = false;
|
|
|
+ const isLinux = /Linux/.test(window.navigator.platform);
|
|
|
+
|
|
|
document.documentElement.style.cursor = CURSOR_TYPE.GRABBING;
|
|
|
let { clientX: lastX, clientY: lastY } = event;
|
|
|
const onPointerMove = withBatchedUpdates((event: PointerEvent) => {
|
|
@@ -1611,6 +1615,40 @@ class App extends React.Component<any, AppState> {
|
|
|
lastX = event.clientX;
|
|
|
lastY = event.clientY;
|
|
|
|
|
|
+ /*
|
|
|
+ * Prevent paste event if we move while middle clicking on Linux.
|
|
|
+ * See issue #1383.
|
|
|
+ */
|
|
|
+ if (
|
|
|
+ isLinux &&
|
|
|
+ !nextPastePrevented &&
|
|
|
+ (Math.abs(deltaX) > 1 || Math.abs(deltaY) > 1)
|
|
|
+ ) {
|
|
|
+ nextPastePrevented = true;
|
|
|
+
|
|
|
+ /* Prevent the next paste event */
|
|
|
+ const preventNextPaste = (event: ClipboardEvent) => {
|
|
|
+ document.body.removeEventListener(EVENT.PASTE, preventNextPaste);
|
|
|
+ event.stopPropagation();
|
|
|
+ };
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Reenable next paste in case of disabled middle click paste for
|
|
|
+ * any reason:
|
|
|
+ * - rigth click paste
|
|
|
+ * - empty clipboard
|
|
|
+ */
|
|
|
+ const enableNextPaste = () => {
|
|
|
+ setTimeout(() => {
|
|
|
+ document.body.removeEventListener(EVENT.PASTE, preventNextPaste);
|
|
|
+ window.removeEventListener(EVENT.POINTER_UP, enableNextPaste);
|
|
|
+ }, 100);
|
|
|
+ };
|
|
|
+
|
|
|
+ document.body.addEventListener(EVENT.PASTE, preventNextPaste);
|
|
|
+ window.addEventListener(EVENT.POINTER_UP, enableNextPaste);
|
|
|
+ }
|
|
|
+
|
|
|
this.setState({
|
|
|
scrollX: normalizeScroll(
|
|
|
this.state.scrollX - deltaX / this.state.zoom,
|