Fix keyboard handling for gwin checkbox and button

This commit is contained in:
inmarket 2016-08-24 17:48:41 +10:00
parent ea0419c29b
commit 8603afd309
2 changed files with 10 additions and 11 deletions

View File

@ -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

View File

@ -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