From 3c119f76e952a0f080fe5ab2602f0777c0579dad Mon Sep 17 00:00:00 2001 From: nanner55 <59149899+nanner55@users.noreply.github.com> Date: Sat, 28 Dec 2019 14:55:28 -0800 Subject: [PATCH] Fixed missing OSD button press/releases due to combo button state. (#157) --- input.cpp | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/input.cpp b/input.cpp index f3da3f4..d5191e1 100644 --- a/input.cpp +++ b/input.cpp @@ -1592,15 +1592,21 @@ static void joy_digital(int jnum, uint32_t mask, uint32_t code, char press, int return; } + // clear OSD button state if not in the OSD. this avoids problems where buttons are still held + // on OSD exit and causes combinations to match when partial buttons are pressed. + if (!user_io_osd_is_visible()) osdbtn = 0; + if (user_io_osd_is_visible() || (bnum == BTN_OSD)) { if (press) { osdbtn |= mask; - if ((osdbtn & (JOY_BTN1 | JOY_BTN2)) == (JOY_BTN1 | JOY_BTN2)) - { - osdbtn |= JOY_BTN3; - mask = JOY_BTN3; + if (mask & (JOY_BTN1 | JOY_BTN2)) { + if ((osdbtn & (JOY_BTN1 | JOY_BTN2)) == (JOY_BTN1 | JOY_BTN2)) + { + osdbtn |= JOY_BTN3; + mask = JOY_BTN3; + } } } else @@ -1608,14 +1614,16 @@ static void joy_digital(int jnum, uint32_t mask, uint32_t code, char press, int int old_osdbtn = osdbtn; osdbtn &= ~mask; - if ((old_osdbtn & (JOY_BTN1 | JOY_BTN2 | JOY_BTN3)) == (JOY_BTN1 | JOY_BTN2 | JOY_BTN3)) - { - mask = JOY_BTN3; - } - else if (old_osdbtn & JOY_BTN3) - { - if (!(osdbtn & (JOY_BTN1 | JOY_BTN2))) osdbtn &= ~JOY_BTN3; - mask = 0; + if (mask & (JOY_BTN1 | JOY_BTN2)) { + if ((old_osdbtn & (JOY_BTN1 | JOY_BTN2 | JOY_BTN3)) == (JOY_BTN1 | JOY_BTN2 | JOY_BTN3)) + { + mask = JOY_BTN3; + } + else if (old_osdbtn & JOY_BTN3) + { + if (!(osdbtn & (JOY_BTN1 | JOY_BTN2))) osdbtn &= ~JOY_BTN3; + mask = 0; + } } }