diff --git a/apps/action.c b/apps/action.c index 5ebcbf771b..3c130e3e29 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 a2abae33ae..dc0465184d 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); }