|
|
@ -114,6 +114,34 @@ kaleidoscope::EventHandlerResult MouseKeys_::onKeyswitchEvent(Key &mappedKey, by
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
mouseMoveIntent |= mappedKey.keyCode;
|
|
|
|
mouseMoveIntent |= mappedKey.keyCode;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
} else if (keyToggledOff(keyState)) {
|
|
|
|
|
|
|
|
/* If a mouse key toggles off, we want to explicitly stop moving (or
|
|
|
|
|
|
|
|
* scrolling) in that direction. We want to do this to support use-cases
|
|
|
|
|
|
|
|
* where we send multiple reports per cycle (such as macros), and can't
|
|
|
|
|
|
|
|
* rely on the main loop clearing the report for us. We do not want to
|
|
|
|
|
|
|
|
* clear the whole report either, because we want any other mouse keys
|
|
|
|
|
|
|
|
* to still have their desired effect. Therefore, we selectively stop
|
|
|
|
|
|
|
|
* movement or scrolling. */
|
|
|
|
|
|
|
|
mouseMoveIntent &= ~mappedKey.keyCode;
|
|
|
|
|
|
|
|
bool x = false, y = false, vWheel = false, hWheel = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (mappedKey.keyCode & KEY_MOUSE_UP ||
|
|
|
|
|
|
|
|
mappedKey.keyCode & KEY_MOUSE_DOWN) {
|
|
|
|
|
|
|
|
if (mappedKey.keyCode & KEY_MOUSE_WHEEL) {
|
|
|
|
|
|
|
|
vWheel = true;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
y = true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else if (mappedKey.keyCode & KEY_MOUSE_LEFT ||
|
|
|
|
|
|
|
|
mappedKey.keyCode & KEY_MOUSE_RIGHT) {
|
|
|
|
|
|
|
|
if (mappedKey.keyCode & KEY_MOUSE_WHEEL) {
|
|
|
|
|
|
|
|
hWheel = true;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
x = true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
kaleidoscope::hid::stopMouse(x, y, vWheel, hWheel);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else if (keyToggledOn(keyState)) {
|
|
|
|
} else if (keyToggledOn(keyState)) {
|
|
|
|
if (mappedKey.keyCode & KEY_MOUSE_WARP && mappedKey.flags & IS_MOUSE_KEY) {
|
|
|
|
if (mappedKey.keyCode & KEY_MOUSE_WARP && mappedKey.flags & IS_MOUSE_KEY) {
|
|
|
|