Prevent next paste on middle clic with linux (#1402)

This commit is contained in:
Jérémie Pardou-Piquemal 2020-04-13 15:10:26 +02:00 committed by GitHub
parent 0ffbde77ac
commit e158dbc45a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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,