diff --git a/system/keymaps/joystick.xml b/system/keymaps/joystick.xml index 9963e36d0fcc9..78ea9d98b7644 100644 --- a/system/keymaps/joystick.xml +++ b/system/keymaps/joystick.xml @@ -89,6 +89,8 @@ + OSD + OSD OSD diff --git a/xbmc/input/joysticks/keymaps/KeyHandler.cpp b/xbmc/input/joysticks/keymaps/KeyHandler.cpp index 13a4f8a394468..bd21b5d617b4e 100644 --- a/xbmc/input/joysticks/keymaps/KeyHandler.cpp +++ b/xbmc/input/joysticks/keymaps/KeyHandler.cpp @@ -57,6 +57,7 @@ bool CKeyHandler::OnDigitalMotion(bool bPressed, unsigned int holdTimeMs) const unsigned int actionId = keymapAction.actionId; const std::string &actionString = keymapAction.actionString; + const unsigned int requriedHoldTimeMs = keymapAction.holdTimeMs; if (CActionTranslator::IsAnalog(actionId)) { @@ -70,9 +71,15 @@ bool CKeyHandler::OnDigitalMotion(bool bPressed, unsigned int holdTimeMs) { if (bPressed) { - CAction action(actionId, actionString); - action.SetHoldTime(holdTimeMs); - SendDigitalAction(action); + if (holdTimeMs >= requriedHoldTimeMs) + { + if (!m_bPressed) + holdTimeMs = requriedHoldTimeMs; + + CAction action(actionId, actionString); + action.SetHoldTime(holdTimeMs - requriedHoldTimeMs); + SendDigitalAction(action); + } } else { @@ -95,6 +102,7 @@ bool CKeyHandler::OnAnalogMotion(float magnitude, unsigned int motionTimeMs) const unsigned int actionId = keymapAction.actionId; const std::string &actionString = keymapAction.actionString; + const unsigned int requriedHoldTimeMs = keymapAction.holdTimeMs; if (CActionTranslator::IsAnalog(actionId)) { @@ -106,8 +114,6 @@ bool CKeyHandler::OnAnalogMotion(float magnitude, unsigned int motionTimeMs) } else { - unsigned int holdTimeMs = 0; - const bool bIsPressed = (magnitude >= DIGITAL_ANALOG_THRESHOLD); if (bIsPressed) { @@ -116,18 +122,25 @@ bool CKeyHandler::OnAnalogMotion(float magnitude, unsigned int motionTimeMs) m_holdStartTime = motionTimeMs; m_bHeld = true; } - else + + unsigned int holdTimeMs = motionTimeMs - m_holdStartTime; + + if (holdTimeMs >= requriedHoldTimeMs) { - holdTimeMs = motionTimeMs - m_holdStartTime; + if (!m_bPressed) + holdTimeMs = requriedHoldTimeMs; + + CAction action(actionId, actionString); + action.SetHoldTime(holdTimeMs - requriedHoldTimeMs); + SendDigitalAction(action); } } else { m_holdStartTime = 0; + m_bPressed = false; m_bHeld = false; } - - OnDigitalMotion(bIsPressed, holdTimeMs); } return true;