diff --git a/src/scripts/gamepadtokey.js b/src/scripts/gamepadtokey.js index 571c06c32c..4d4a0be200 100644 --- a/src/scripts/gamepadtokey.js +++ b/src/scripts/gamepadtokey.js @@ -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,11 @@ _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 (newPressedEvent != null) { + _gamepadADownEvent = newPressedEvent; + } }; _ButtonPressedState.getgamepadB = function () { @@ -194,6 +198,7 @@ function raiseEvent(name, key, keyCode) { event.key = key; event.keyCode = keyCode; (document.activeElement || document.body).dispatchEvent(event); + return event; } function clickElement(elem) { @@ -204,7 +209,7 @@ function clickElement(elem) { elem.click(); } -function raiseKeyEvent(oldPressedState, newPressedState, key, keyCode, enableRepeatKeyDown, clickonKeyUp) { +function raiseKeyEvent(oldPressedState, newPressedState, key, keyCode, enableRepeatKeyDown, clickonKeyUp, oldPressedEvent) { // No-op if oldPressedState === newPressedState if (newPressedState === true) { // button down @@ -219,18 +224,24 @@ function raiseKeyEvent(oldPressedState, newPressedState, key, keyCode, enableRep } if (fire && keyCode) { - raiseEvent('keydown', key, keyCode); + const newPressedEvent = raiseEvent('keydown', key, keyCode); + return newPressedEvent; } } else if (newPressedState === false && oldPressedState === true) { resetThrottle(key); + let newPressedEvent = null; // 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); } + + if (newPressedEvent) { + return newPressedEvent; + } } }