summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/gui/yesno.c25
-rw-r--r--firmware/font.c2
2 files changed, 13 insertions, 14 deletions
diff --git a/apps/gui/yesno.c b/apps/gui/yesno.c
index 6056d239a6..a0fd908727 100644
--- a/apps/gui/yesno.c
+++ b/apps/gui/yesno.c
@@ -88,7 +88,7 @@ static void gui_yesno_draw(struct gui_yesno * yn)
88 enum yesno_res def_res = yn->tmo_default_res; 88 enum yesno_res def_res = yn->tmo_default_res;
89 long end_tick = yn->end_tick; 89 long end_tick = yn->end_tick;
90 90
91 last_vp = display->set_viewport(vp); 91 last_vp = display->set_viewport_ex(vp, VP_FLAG_VP_SET_CLEAN);
92 display->clear_viewport(); 92 display->clear_viewport();
93 nb_lines = yn->main_message->nb_lines; 93 nb_lines = yn->main_message->nb_lines;
94 vp_lines = viewport_get_nb_lines(vp); 94 vp_lines = viewport_get_nb_lines(vp);
@@ -182,9 +182,10 @@ static bool gui_yesno_draw_result(struct gui_yesno * yn, enum yesno_res result)
182 const struct text_message * message=yn->result_message[result]; 182 const struct text_message * message=yn->result_message[result];
183 struct viewport *vp = yn->vp; 183 struct viewport *vp = yn->vp;
184 struct screen * display=yn->display; 184 struct screen * display=yn->display;
185 struct viewport *last_vp = display->set_viewport_ex(vp, VP_FLAG_VP_SET_CLEAN);
186
185 if(message==NULL) 187 if(message==NULL)
186 return false; 188 return false;
187 struct viewport *last_vp = display->set_viewport(vp);
188 display->clear_viewport(); 189 display->clear_viewport();
189 put_message(yn->display, message, 0, viewport_get_nb_lines(vp)); 190 put_message(yn->display, message, 0, viewport_get_nb_lines(vp));
190 display->update_viewport(); 191 display->update_viewport();
@@ -223,21 +224,16 @@ enum yesno_res gui_syncyesno_run_w_tmo(int ticks, enum yesno_res tmo_default_res
223{ 224{
224 int button; 225 int button;
225 int result=-1; 226 int result=-1;
226 bool result_displayed; 227 bool result_displayed = false;
227 struct gui_yesno yn[NB_SCREENS]; 228 struct gui_yesno yn[NB_SCREENS];
228 struct viewport vp[NB_SCREENS]; 229 struct viewport vp[NB_SCREENS];
229 long talked_tick = 0; 230 long talked_tick = 0;
230 long end_tick = current_tick + ticks; 231 long end_tick = current_tick + ticks;
231 long button_scan_tmo; 232 long button_scan_tmo = HZ/2;
232 233
233 if (ticks >= HZ) /* Display a prompt with timeout to the user */ 234 if (ticks < HZ) /* Display a prompt with NO timeout to the user */
234 {
235 button_scan_tmo = HZ/2;
236 }
237 else
238 { 235 {
239 tmo_default_res = YESNO_TMO; 236 tmo_default_res = YESNO_TMO;
240 button_scan_tmo = HZ*5;
241 } 237 }
242 238
243 FOR_NB_SCREENS(i) 239 FOR_NB_SCREENS(i)
@@ -278,7 +274,8 @@ enum yesno_res gui_syncyesno_run_w_tmo(int ticks, enum yesno_res tmo_default_res
278 talked_tick = current_tick; 274 talked_tick = current_tick;
279 talk_text_message(main_message, false); 275 talk_text_message(main_message, false);
280 } 276 }
281 send_event(GUI_EVENT_NEED_UI_UPDATE, NULL); 277 FOR_NB_SCREENS(i)
278 gui_yesno_draw(&yn[i]);
282 279
283 button = get_action(CONTEXT_YESNOSCREEN, button_scan_tmo); 280 button = get_action(CONTEXT_YESNOSCREEN, button_scan_tmo);
284 281
@@ -340,12 +337,14 @@ enum yesno_res gui_syncyesno_run_w_tmo(int ticks, enum yesno_res tmo_default_res
340 : no_message, false); 337 : no_message, false);
341 talk_force_enqueue_next(); 338 talk_force_enqueue_next();
342 } 339 }
343 if(result_displayed) 340
344 sleep(HZ);
345 341
346 exit: 342 exit:
347 remove_event_ex(GUI_EVENT_NEED_UI_UPDATE, gui_yesno_ui_update, &yn[0]); 343 remove_event_ex(GUI_EVENT_NEED_UI_UPDATE, gui_yesno_ui_update, &yn[0]);
348 344
345 if(result_displayed)
346 sleep(HZ);
347
349 FOR_NB_SCREENS(i) 348 FOR_NB_SCREENS(i)
350 { 349 {
351 screens[i].scroll_stop_viewport(yn[i].vp); 350 screens[i].scroll_stop_viewport(yn[i].vp);
diff --git a/firmware/font.c b/firmware/font.c
index 1644201f67..baaec13d3c 100644
--- a/firmware/font.c
+++ b/firmware/font.c
@@ -699,7 +699,7 @@ struct font* font_get(int font)
699 struct font* pf; 699 struct font* pf;
700 if (font == FONT_UI) 700 if (font == FONT_UI)
701 font = MAXFONTS-1; 701 font = MAXFONTS-1;
702 if (font <= FONT_SYSFIXED) 702 if (font <= FONT_SYSFIXED || font >= MAXFONTS)
703 return &sysfont; 703 return &sysfont;
704 704
705 while (1) { 705 while (1) {