diff --git a/src/gwin/gwin_button.c b/src/gwin/gwin_button.c index 41c736e6..f4be41a1 100644 --- a/src/gwin/gwin_button.c +++ b/src/gwin/gwin_button.c @@ -53,15 +53,15 @@ // ENTER and SPACE keys to press the button if (pke->c[0] == GKEY_ENTER || pke->c[0] == GKEY_SPACE) { - // Press or release event? - if (pke->keystate & GKEYSTATE_KEYUP) { - gw->g.flags &= ~GBUTTON_FLG_PRESSED; - } else { - gw->g.flags |= GBUTTON_FLG_PRESSED; - } + // Some keyboards (eg the virtual keyboard) can't send keyup events. + // Even for those that do we may not be listening for them. + // We should really process on a keydown and then set a timer to display + // the button release but that requires an extra timer and lots of + // complication. Instead we cheat by not providing user feedback of the keypress. + if (!(pke->keystate & GKEYSTATE_KEYUP)) + _gwinSendEvent(&gw->g, GEVENT_GWIN_BUTTON); } - _gwinUpdate((GHandle)gw); } #endif diff --git a/src/gwin/gwin_checkbox.c b/src/gwin/gwin_checkbox.c index 436a0806..1160f0b1 100644 --- a/src/gwin/gwin_checkbox.c +++ b/src/gwin/gwin_checkbox.c @@ -56,16 +56,15 @@ static void SendCheckboxEvent(GWidgetObject *gw) { static void CheckboxKeyboard(GWidgetObject* gw, GEventKeyboard* pke) { // Only react on KEYDOWN events. Ignore KEYUP events. - if (pke->keystate & GKEYSTATE_KEYUP) { + if ((pke->keystate & GKEYSTATE_KEYUP)) return; - } // ENTER and SPACE keys to check/uncheck the checkbox if (pke->c[0] == GKEY_ENTER || pke->c[0] == GKEY_SPACE) { gw->g.flags ^= GCHECKBOX_FLG_CHECKED; + _gwinUpdate((GHandle)gw); + SendCheckboxEvent(gw); } - - _gwinUpdate((GHandle)gw); } #endif