aboutsummaryrefslogtreecommitdiffstats
path: root/src/gwin
diff options
context:
space:
mode:
authorinmarket <inmarket@ugfx.org>2016-08-24 17:48:41 +1000
committerinmarket <inmarket@ugfx.org>2016-08-24 17:48:41 +1000
commit8603afd3098b5fdb640cb214bda209137fe192ee (patch)
treefade878ced28b4c4e93e8894a5886658067d71fc /src/gwin
parentea0419c29bc4aed1b60662d781d94382dcb8e336 (diff)
downloaduGFX-8603afd3098b5fdb640cb214bda209137fe192ee.tar.gz
uGFX-8603afd3098b5fdb640cb214bda209137fe192ee.tar.bz2
uGFX-8603afd3098b5fdb640cb214bda209137fe192ee.zip
Fix keyboard handling for gwin checkbox and button
Diffstat (limited to 'src/gwin')
-rw-r--r--src/gwin/gwin_button.c14
-rw-r--r--src/gwin/gwin_checkbox.c7
2 files changed, 10 insertions, 11 deletions
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