summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorThomas Martitz <kugel@rockbox.org>2012-07-18 10:25:32 +0200
committerThomas Martitz <kugel@rockbox.org>2012-07-18 10:28:08 +0200
commit15775c8badac65ad9d7477a1706c019703c15b47 (patch)
tree8d8fa88d377d8cbca763cdd0cdfda7094fadf6c1 /apps
parentdf9bd8730ce8462324f64c49de0ae51584a19d9e (diff)
downloadrockbox-15775c8badac65ad9d7477a1706c019703c15b47.zip
rockbox-15775c8badac65ad9d7477a1706c019703c15b47.tar.gz
rockbox-15775c8badac65ad9d7477a1706c019703c15b47.tar.bz2
rockbox-15775c8badac65ad9d7477a1706c019703c15b47.tar.xz
fix erroneous button read in yesno screen and missed buttons in action.c.
If two yesno screens directly follow each other the button release of the first one was incorrectly accepted in the second one. The fix exposed another problem in action.c if action_wait_for_release() is called when no button is actually pressed. The next press was silently eaten. Change-Id: Iaa5f246f7ea1fd775606620a989cdaec74a9305e
Diffstat (limited to 'apps')
-rw-r--r--apps/action.c6
-rw-r--r--apps/gui/yesno.c7
2 files changed, 11 insertions, 2 deletions
diff --git a/apps/action.c b/apps/action.c
index 5ebcbf7..3c130e3 100644
--- a/apps/action.c
+++ b/apps/action.c
@@ -232,7 +232,13 @@ static int get_action_worker(int context, int timeout,
/* Data from sys events can be pulled with button_get_data
* multimedia button presses don't go through the action system */
if (button == BUTTON_NONE || button & (SYS_EVENT|BUTTON_MULTIMEDIA))
+ {
+ /* no button pressed so no point in waiting for release */
+ if (button == BUTTON_NONE)
+ wait_for_release = false;
return button;
+ }
+
/* the special redraw button should result in a screen refresh */
if (button == BUTTON_REDRAW)
return ACTION_REDRAW;
diff --git a/apps/gui/yesno.c b/apps/gui/yesno.c
index a2abae3..dc04651 100644
--- a/apps/gui/yesno.c
+++ b/apps/gui/yesno.c
@@ -169,9 +169,10 @@ enum yesno_res gui_syncyesno_run(const struct text_message * main_message,
screens[i].stop_scroll();
gui_yesno_draw(&(yn[i]));
}
+
/* make sure to eat any extranous keypresses */
- while (get_action(CONTEXT_STD+99, TIMEOUT_NOBLOCK))
- action_wait_for_release();
+ action_wait_for_release();
+
while (result==-1)
{
/* Repeat the question every 5secs (more or less) */
@@ -205,6 +206,7 @@ enum yesno_res gui_syncyesno_run(const struct text_message * main_message,
result=YESNO_YES;
break;
case ACTION_NONE:
+ case ACTION_UNKNOWN:
case SYS_CHARGER_DISCONNECTED:
case SYS_BATTERY_UPDATE:
/* ignore some SYS events that can happen */
@@ -233,6 +235,7 @@ enum yesno_res gui_syncyesno_run(const struct text_message * main_message,
screens[i].scroll_stop(yn[i].vp);
viewportmanager_theme_undo(i, true);
}
+
return(result);
}