diff options
Diffstat (limited to 'apps/gui/yesno.c')
-rw-r--r-- | apps/gui/yesno.c | 25 |
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); |