 
     virtual void OnLeftButtonDown(MOUSEINFO *mouseInfo)   { Mouse.press(MOUSE_LEFT); }
     virtual void OnLeftButtonUp(MOUSEINFO *mouseInfo)     { Mouse.release(MOUSE_LEFT); }
-    virtual void OnRightButtonDown(MOUSEINFO *mouseInfo)  { Mouse.press(MOUSE_RIGHT); }
-    virtual void OnRightButtonUp(MOUSEINFO *mouseInfo)    { Mouse.release(MOUSE_RIGHT); }
+
+    virtual void OnRightButtonDown(MOUSEINFO *mouseInfo)  {
+        mouseState.rightPressed = true;
+        mouseState.noMouseMoveBetweenRightEvents = true;
+    }
+
+    virtual void OnRightButtonUp(MOUSEINFO *mouseInfo)    {
+        mouseState.rightPressed = false;
+
+        if (mouseState.noMouseMoveBetweenRightEvents) {
+            Mouse.press(MOUSE_RIGHT);
+            Mouse.release(MOUSE_RIGHT);
+        }
+    }
 } mouseReportParser;
 
 

    if (modifiers & MODIFIER_RIGHT_SHIFT) {
        switch (key) {
            case KEY_1:
                currentMode = MODE_NEUTRAL;

                return true;

            case KEY_2:
                currentMode = MODE_DUDRACK;

                return true;

            case KEY_3:
                currentMode = MODE_STG;

                return true;
        }

void dudrackKeyUp(uint8_t key) {
    switch (key) {
        case KEY_HENKAN:
            keyboardState.henkanPressed = false;

            return;

        case KEY_MUHENKAN:
            keyboardState.muhenkanPressed = false;
            releaseModifier(MODIFIER_LEFT_SHIFT);

            return;

        case KEY_SPACE:
            keyboardState.spacePressed = false;
            releaseModifier(MODIFIER_LEFT_SHIFT);
            if (keyboardState.noEventBetweenSpaceEvents) {
                pressKey(KEY_SPACE);
                releaseKey(KEY_SPACE);
            }
