소스 검색

Fix missing mouseup (#144)

Christopher Chedeau 5 년 전
부모
커밋
85fe9f85fb
1개의 변경된 파일11개의 추가작업 그리고 0개의 파일을 삭제
  1. 11 0
      src/index.tsx

+ 11 - 0
src/index.tsx

@@ -832,6 +832,8 @@ const ELEMENT_TRANSLATE_AMOUNT = 1;
 let lastCanvasWidth = -1;
 let lastCanvasHeight = -1;
 
+let lastMouseUp: ((e: any) => void) | null = null;
+
 class App extends React.Component<{}, AppState> {
   public componentDidMount() {
     document.addEventListener("keydown", this.onKeyDown, false);
@@ -1157,6 +1159,12 @@ class App extends React.Component<{}, AppState> {
             }
           }}
           onMouseDown={e => {
+            if (lastMouseUp !== null) {
+              // Unfortunately, sometimes we don't get a mouseup after a mousedown,
+              // this can happen when a contextual menu or alert is triggered. In order to avoid
+              // being in a weird state, we clean up on the next mousedown
+              lastMouseUp(e);
+            }
             // only handle left mouse button
             if (e.button !== 0) return;
             // fixes mousemove causing selection of UI texts #32
@@ -1398,6 +1406,7 @@ class App extends React.Component<{}, AppState> {
             const onMouseUp = (e: MouseEvent) => {
               const { draggingElement, elementType } = this.state;
 
+              lastMouseUp = null;
               window.removeEventListener("mousemove", onMouseMove);
               window.removeEventListener("mouseup", onMouseUp);
 
@@ -1426,6 +1435,8 @@ class App extends React.Component<{}, AppState> {
               this.forceUpdate();
             };
 
+            lastMouseUp = onMouseUp;
+
             window.addEventListener("mousemove", onMouseMove);
             window.addEventListener("mouseup", onMouseUp);