Merge pull request #6974 from brad1111/checkbox-controller-fix

Fix checkbox toggle on controller
This commit is contained in:
Bill Thornton
2025-07-31 14:17:17 -04:00
committed by GitHub

View File

@@ -58,6 +58,7 @@ let _dPadUpPressed = false;
let _dPadDownPressed = false;
let _dPadLeftPressed = false;
let _dPadRightPressed = false;
let _gamepadADownEvent = null;
let _gamepadAPressed = false;
let _gamepadBPressed = false;
@@ -77,8 +78,15 @@ _ButtonPressedState.getgamepadA = function () {
};
_ButtonPressedState.setgamepadA = function (newPressedState) {
raiseKeyEvent(_gamepadAPressed, newPressedState, _GAMEPAD_A_KEY, _GAMEPAD_A_KEYCODE, false, true);
const newPressedEvent = raiseKeyEvent(_gamepadAPressed, newPressedState, _GAMEPAD_A_KEY, _GAMEPAD_A_KEYCODE, false, true, _gamepadADownEvent);
_gamepadAPressed = newPressedState;
if (!newPressedState) {
// reset on keyup
_gamepadADownEvent = null;
} else if (newPressedEvent != null) {
_gamepadADownEvent = newPressedEvent;
}
};
_ButtonPressedState.getgamepadB = function () {
@@ -194,6 +202,8 @@ function raiseEvent(name, key, keyCode) {
event.key = key;
event.keyCode = keyCode;
(document.activeElement || document.body).dispatchEvent(event);
return event;
}
function clickElement(elem) {
@@ -204,7 +214,9 @@ function clickElement(elem) {
elem.click();
}
function raiseKeyEvent(oldPressedState, newPressedState, key, keyCode, enableRepeatKeyDown, clickonKeyUp) {
function raiseKeyEvent(oldPressedState, newPressedState, key, keyCode, enableRepeatKeyDown, clickonKeyUp, oldPressedEvent) {
let newPressedEvent = null;
// No-op if oldPressedState === newPressedState
if (newPressedState === true) {
// button down
@@ -219,19 +231,21 @@ function raiseKeyEvent(oldPressedState, newPressedState, key, keyCode, enableRep
}
if (fire && keyCode) {
raiseEvent('keydown', key, keyCode);
newPressedEvent = raiseEvent('keydown', key, keyCode);
}
} else if (newPressedState === false && oldPressedState === true) {
resetThrottle(key);
// button up
if (keyCode) {
raiseEvent('keyup', key, keyCode);
newPressedEvent = raiseEvent('keyup', key, keyCode);
}
if (clickonKeyUp) {
if (clickonKeyUp && !oldPressedEvent?.defaultPrevented && !newPressedEvent?.defaultPrevented) {
clickElement(document.activeElement || window);
}
}
return newPressedEvent;
}
let inputLoopTimer;