summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorWilliam Wilgus <wilgus.william@gmail.com>2023-11-24 16:17:33 -0500
committerWilliam Wilgus <wilgus.william@gmail.com>2023-11-24 16:17:33 -0500
commitb6ce98c55c31039fdc8189b4cbe0bb7e56eaf894 (patch)
tree30163c508e0c9708775a21dfb831e7f8bd5c222c /apps
parentcb3b5397b34eb6ad181b2c9d32996152f28d3974 (diff)
downloadrockbox-b6ce98c55c31039fdc8189b4cbe0bb7e56eaf894.tar.gz
rockbox-b6ce98c55c31039fdc8189b4cbe0bb7e56eaf894.zip
[BugFix] yesno screen disappears
sending GUI_EVENT_NEED_UI_UPDATE ensured we got redrawn but it also sometimes resulted in the yesno screen being overdrawn depending on which event callback was called last now increasing the update frequency, clear the dirty bit on whatever vp we are replacing and well as call our redraw function instead of sending UI_UPDATE also found a potential bug in get_font() Change-Id: I1da6defa6db799a4778590daa0c107aba00a9d34
Diffstat (limited to 'apps')
-rw-r--r--apps/gui/yesno.c25
1 files changed, 12 insertions, 13 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);