summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTeruaki Kawashima <teru@rockbox.org>2010-02-11 10:41:06 +0000
committerTeruaki Kawashima <teru@rockbox.org>2010-02-11 10:41:06 +0000
commit93f9e7cbfb3905791feccb4da68f6cc969d1e148 (patch)
treefb6e01220844fa1c0a9f92643ccaddb70fcb66b4
parent0a291fff12c27ba6b46521ecaf126bdb4726c24e (diff)
downloadrockbox-93f9e7cbfb3905791feccb4da68f6cc969d1e148.tar.gz
rockbox-93f9e7cbfb3905791feccb4da68f6cc969d1e148.zip
fix text scrolling handling in do_menu, set_time_screen and time_screen.
Don't scroll text in time_screen(). the lines will be redrawn before scrolling statrs, so they don't scroll anyway. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@24591 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/gui/bitmap/list.c11
-rw-r--r--apps/gui/charcell/list.c10
-rw-r--r--apps/gui/color_picker.c2
-rw-r--r--apps/gui/list.h1
-rw-r--r--apps/menu.c66
-rw-r--r--apps/menus/main_menu.c6
-rw-r--r--apps/menus/time_menu.c13
-rw-r--r--apps/screens.c34
8 files changed, 75 insertions, 68 deletions
diff --git a/apps/gui/bitmap/list.c b/apps/gui/bitmap/list.c
index 7680c876aa..9e222c1973 100644
--- a/apps/gui/bitmap/list.c
+++ b/apps/gui/bitmap/list.c
@@ -51,6 +51,17 @@ int gui_list_get_item_offset(struct gui_synclist * gui_list, int item_width,
51 struct viewport *vp); 51 struct viewport *vp);
52bool list_display_title(struct gui_synclist *list, enum screen_type screen); 52bool list_display_title(struct gui_synclist *list, enum screen_type screen);
53 53
54void gui_synclist_scroll_stop(struct gui_synclist *lists)
55{
56 int i;
57 FOR_NB_SCREENS(i)
58 {
59 screens[i].scroll_stop(&list_text[i]);
60 screens[i].scroll_stop(&title_text[i]);
61 screens[i].scroll_stop(lists->parent[i]);
62 }
63}
64
54/* Draw the list... 65/* Draw the list...
55 internal screen layout: 66 internal screen layout:
56 ----------------- 67 -----------------
diff --git a/apps/gui/charcell/list.c b/apps/gui/charcell/list.c
index 2374156f0b..220144c356 100644
--- a/apps/gui/charcell/list.c
+++ b/apps/gui/charcell/list.c
@@ -39,6 +39,16 @@
39#include "sound.h" 39#include "sound.h"
40#include "misc.h" 40#include "misc.h"
41 41
42void gui_synclist_scroll_stop(struct gui_synclist *lists)
43{
44 int i;
45 (void)lists;
46 FOR_NB_SCREENS(i)
47 {
48 screens[i].stop_scroll();
49 }
50}
51
42void list_draw(struct screen *display, struct gui_synclist *gui_list) 52void list_draw(struct screen *display, struct gui_synclist *gui_list)
43{ 53{
44 int text_pos; 54 int text_pos;
diff --git a/apps/gui/color_picker.c b/apps/gui/color_picker.c
index 09d861245a..f8caf4d38f 100644
--- a/apps/gui/color_picker.c
+++ b/apps/gui/color_picker.c
@@ -165,7 +165,7 @@ static void draw_screen(struct screen *display, char *title,
165 viewport_set_defaults(&vp, display->screen_type); 165 viewport_set_defaults(&vp, display->screen_type);
166 display->set_viewport(&vp); 166 display->set_viewport(&vp);
167 167
168 display->clear_display(); 168 display->clear_viewport();
169 169
170 if (display->depth > 1) 170 if (display->depth > 1)
171 { 171 {
diff --git a/apps/gui/list.h b/apps/gui/list.h
index ef16c719c1..1d4a6bd5b4 100644
--- a/apps/gui/list.h
+++ b/apps/gui/list.h
@@ -160,6 +160,7 @@ extern int gui_synclist_get_nb_items(struct gui_synclist * lists);
160extern int gui_synclist_get_sel_pos(struct gui_synclist * lists); 160extern int gui_synclist_get_sel_pos(struct gui_synclist * lists);
161 161
162extern void gui_synclist_draw(struct gui_synclist * lists); 162extern void gui_synclist_draw(struct gui_synclist * lists);
163extern void gui_synclist_scroll_stop(struct gui_synclist *lists);
163extern void gui_synclist_select_item(struct gui_synclist * lists, 164extern void gui_synclist_select_item(struct gui_synclist * lists,
164 int item_number); 165 int item_number);
165extern void gui_synclist_add_item(struct gui_synclist * lists); 166extern void gui_synclist_add_item(struct gui_synclist * lists);
diff --git a/apps/menu.c b/apps/menu.c
index eb29b43f3b..eb4bf0e1c9 100644
--- a/apps/menu.c
+++ b/apps/menu.c
@@ -73,7 +73,7 @@ static void get_menu_callback(const struct menu_item_ex *m,
73{ 73{
74 if (m->flags&(MENU_HAS_DESC|MENU_DYNAMIC_DESC)) 74 if (m->flags&(MENU_HAS_DESC|MENU_DYNAMIC_DESC))
75 *menu_callback= m->callback_and_desc->menu_callback; 75 *menu_callback= m->callback_and_desc->menu_callback;
76 else 76 else
77 *menu_callback = m->menu_callback; 77 *menu_callback = m->menu_callback;
78} 78}
79 79
@@ -101,7 +101,7 @@ static const char* get_menu_item_name(int selected_item,
101 const struct menu_item_ex *menu = (const struct menu_item_ex *)data; 101 const struct menu_item_ex *menu = (const struct menu_item_ex *)data;
102 int type = (menu->flags&MENU_TYPE_MASK); 102 int type = (menu->flags&MENU_TYPE_MASK);
103 selected_item = get_menu_selection(selected_item, menu); 103 selected_item = get_menu_selection(selected_item, menu);
104 104
105 (void)buffer_len; 105 (void)buffer_len;
106 /* only MT_MENU or MT_RETURN_ID is allowed in here */ 106 /* only MT_MENU or MT_RETURN_ID is allowed in here */
107 if (type == MT_RETURN_ID) 107 if (type == MT_RETURN_ID)
@@ -111,13 +111,13 @@ static const char* get_menu_item_name(int selected_item,
111 menu->menu_get_name_and_icon->list_get_name_data, buffer); 111 menu->menu_get_name_and_icon->list_get_name_data, buffer);
112 return menu->strings[selected_item]; 112 return menu->strings[selected_item];
113 } 113 }
114 114
115 menu = menu->submenus[selected_item]; 115 menu = menu->submenus[selected_item];
116 116
117 if ((menu->flags&MENU_DYNAMIC_DESC) && (type != MT_SETTING_W_TEXT)) 117 if ((menu->flags&MENU_DYNAMIC_DESC) && (type != MT_SETTING_W_TEXT))
118 return menu->menu_get_name_and_icon->list_get_name(selected_item, 118 return menu->menu_get_name_and_icon->list_get_name(selected_item,
119 menu->menu_get_name_and_icon->list_get_name_data, buffer); 119 menu->menu_get_name_and_icon->list_get_name_data, buffer);
120 120
121 type = (menu->flags&MENU_TYPE_MASK); 121 type = (menu->flags&MENU_TYPE_MASK);
122 if ((type == MT_SETTING) || (type == MT_SETTING_W_TEXT)) 122 if ((type == MT_SETTING) || (type == MT_SETTING_W_TEXT))
123 { 123 {
@@ -135,7 +135,7 @@ static enum themable_icons menu_get_icon(int selected_item, void * data)
135 const struct menu_item_ex *menu = (const struct menu_item_ex *)data; 135 const struct menu_item_ex *menu = (const struct menu_item_ex *)data;
136 int menu_icon = Icon_NOICON; 136 int menu_icon = Icon_NOICON;
137 selected_item = get_menu_selection(selected_item, menu); 137 selected_item = get_menu_selection(selected_item, menu);
138 138
139 if ((menu->flags&MENU_TYPE_MASK) == MT_RETURN_ID) 139 if ((menu->flags&MENU_TYPE_MASK) == MT_RETURN_ID)
140 { 140 {
141 return Icon_Menu_functioncall; 141 return Icon_Menu_functioncall;
@@ -145,7 +145,7 @@ static enum themable_icons menu_get_icon(int selected_item, void * data)
145 menu_icon = menu->callback_and_desc->icon_id; 145 menu_icon = menu->callback_and_desc->icon_id;
146 else if (menu->flags&MENU_DYNAMIC_DESC) 146 else if (menu->flags&MENU_DYNAMIC_DESC)
147 menu_icon = menu->menu_get_name_and_icon->icon_id; 147 menu_icon = menu->menu_get_name_and_icon->icon_id;
148 148
149 if (menu_icon == Icon_NOICON) 149 if (menu_icon == Icon_NOICON)
150 { 150 {
151 switch (menu->flags&MENU_TYPE_MASK) 151 switch (menu->flags&MENU_TYPE_MASK)
@@ -194,7 +194,7 @@ static void init_menu_lists(const struct menu_item_ex *menu,
194 current_subitems_count++; 194 current_subitems_count++;
195 } 195 }
196 } 196 }
197 else 197 else
198 { 198 {
199 current_subitems[current_subitems_count] = i; 199 current_subitems[current_subitems_count] = i;
200 current_subitems_count++; 200 current_subitems_count++;
@@ -219,7 +219,7 @@ static void init_menu_lists(const struct menu_item_ex *menu,
219 gui_synclist_set_nb_items(lists,current_subitems_count); 219 gui_synclist_set_nb_items(lists,current_subitems_count);
220 gui_synclist_limit_scroll(lists,true); 220 gui_synclist_limit_scroll(lists,true);
221 gui_synclist_select_item(lists, find_menu_selection(selected)); 221 gui_synclist_select_item(lists, find_menu_selection(selected));
222 222
223 get_menu_callback(menu,&menu_callback); 223 get_menu_callback(menu,&menu_callback);
224 if (callback && menu_callback) 224 if (callback && menu_callback)
225 menu_callback(ACTION_ENTER_MENUITEM,menu); 225 menu_callback(ACTION_ENTER_MENUITEM,menu);
@@ -234,13 +234,13 @@ static int talk_menu_item(int selected_item, void *data)
234 int type; 234 int type;
235 unsigned char *str; 235 unsigned char *str;
236 int sel = get_menu_selection(selected_item, menu); 236 int sel = get_menu_selection(selected_item, menu);
237 237
238 if ((menu->flags&MENU_TYPE_MASK) == MT_MENU) 238 if ((menu->flags&MENU_TYPE_MASK) == MT_MENU)
239 { 239 {
240 type = menu->submenus[sel]->flags&MENU_TYPE_MASK; 240 type = menu->submenus[sel]->flags&MENU_TYPE_MASK;
241 if ((type == MT_SETTING) || (type == MT_SETTING_W_TEXT)) 241 if ((type == MT_SETTING) || (type == MT_SETTING_W_TEXT))
242 talk_setting(menu->submenus[sel]->variable); 242 talk_setting(menu->submenus[sel]->variable);
243 else 243 else
244 { 244 {
245 if (menu->submenus[sel]->flags&(MENU_DYNAMIC_DESC)) 245 if (menu->submenus[sel]->flags&(MENU_DYNAMIC_DESC))
246 { 246 {
@@ -264,7 +264,7 @@ static int talk_menu_item(int selected_item, void *data)
264 else 264 else
265 id = P2ID(menu->submenus[sel]->callback_and_desc->desc); 265 id = P2ID(menu->submenus[sel]->callback_and_desc->desc);
266 if (id != -1) 266 if (id != -1)
267 talk_id(id,false); 267 talk_id(id,false);
268 } 268 }
269 } 269 }
270 else if(((menu->flags&MENU_TYPE_MASK) == MT_RETURN_ID)) 270 else if(((menu->flags&MENU_TYPE_MASK) == MT_RETURN_ID))
@@ -285,9 +285,8 @@ void do_setting_from_menu(const struct menu_item_ex *temp,
285 struct viewport parent[NB_SCREENS]) 285 struct viewport parent[NB_SCREENS])
286{ 286{
287 int setting_id, oldval; 287 int setting_id, oldval;
288 const struct settings_list *setting = find_setting( 288 const struct settings_list *setting =
289 temp->variable, 289 find_setting(temp->variable, &setting_id);
290 &setting_id);
291 char *title; 290 char *title;
292 char padded_title[MAX_PATH]; 291 char padded_title[MAX_PATH];
293 int var_type = setting->flags&F_T_MASK; 292 int var_type = setting->flags&F_T_MASK;
@@ -305,7 +304,7 @@ void do_setting_from_menu(const struct menu_item_ex *temp,
305 title = temp->callback_and_desc->desc; 304 title = temp->callback_and_desc->desc;
306 else 305 else
307 title = ID2P(setting->lang_id); 306 title = ID2P(setting->lang_id);
308 307
309 /* Pad the title string by repeating it. This is needed 308 /* Pad the title string by repeating it. This is needed
310 so the scroll settings title can actually be used to 309 so the scroll settings title can actually be used to
311 test the setting */ 310 test the setting */
@@ -328,7 +327,7 @@ void do_setting_from_menu(const struct menu_item_ex *temp,
328 padded_title[i] = '\0'; 327 padded_title[i] = '\0';
329 title = padded_title; 328 title = padded_title;
330 } 329 }
331 330
332 option_screen((struct settings_list *)setting, parent, 331 option_screen((struct settings_list *)setting, parent,
333 setting->flags&F_TEMPVAR, title); 332 setting->flags&F_TEMPVAR, title);
334} 333}
@@ -345,7 +344,7 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
345 bool redraw_lists; 344 bool redraw_lists;
346 FOR_NB_SCREENS(i) 345 FOR_NB_SCREENS(i)
347 viewportmanager_theme_enable(i, !hide_theme, NULL); 346 viewportmanager_theme_enable(i, !hide_theme, NULL);
348 347
349 const struct menu_item_ex *menu_stack[MAX_MENUS]; 348 const struct menu_item_ex *menu_stack[MAX_MENUS];
350 int menu_stack_selected_item[MAX_MENUS]; 349 int menu_stack_selected_item[MAX_MENUS];
351 int stack_top = 0; 350 int stack_top = 0;
@@ -370,7 +369,6 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
370 in_stringlist = ((menu->flags&MENU_TYPE_MASK) == MT_RETURN_ID); 369 in_stringlist = ((menu->flags&MENU_TYPE_MASK) == MT_RETURN_ID);
371 /* load the callback, and only reload it if menu changes */ 370 /* load the callback, and only reload it if menu changes */
372 get_menu_callback(menu, &menu_callback); 371 get_menu_callback(menu, &menu_callback);
373
374 372
375#ifdef HAVE_BUTTONBAR 373#ifdef HAVE_BUTTONBAR
376 if (!hide_theme) 374 if (!hide_theme)
@@ -391,7 +389,7 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
391 action = get_action(CONTEXT_MAINMENU, 389 action = get_action(CONTEXT_MAINMENU,
392 list_do_action_timeout(&lists, HZ)); 390 list_do_action_timeout(&lists, HZ));
393 /* HZ so the status bar redraws corectly */ 391 /* HZ so the status bar redraws corectly */
394 392
395 if (menu_callback) 393 if (menu_callback)
396 { 394 {
397 int old_action = action; 395 int old_action = action;
@@ -477,11 +475,10 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
477 { 475 {
478 case GO_TO_PREVIOUS: 476 case GO_TO_PREVIOUS:
479 break; 477 break;
480 case 0: /* reset setting */ 478 case 0: /* reset setting */
481 reset_setting(setting, setting->setting); 479 reset_setting(setting, setting->setting);
482 break;
483#ifdef HAVE_QUICKSCREEN
484 break; 480 break;
481#ifdef HAVE_QUICKSCREEN
485 case 1: /* set as top QS item */ 482 case 1: /* set as top QS item */
486 set_as_qs_item(setting, QUICKSCREEN_TOP); 483 set_as_qs_item(setting, QUICKSCREEN_TOP);
487 break; 484 break;
@@ -513,10 +510,7 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
513 bool exiting_menu = false; 510 bool exiting_menu = false;
514 in_stringlist = false; 511 in_stringlist = false;
515 /* might be leaving list, so stop scrolling */ 512 /* might be leaving list, so stop scrolling */
516 FOR_NB_SCREENS(i) 513 gui_synclist_scroll_stop(&lists);
517 {
518 screens[i].scroll_stop(&vps[i]);
519 }
520 if (menu_callback) 514 if (menu_callback)
521 menu_callback(ACTION_EXIT_MENUITEM, menu); 515 menu_callback(ACTION_EXIT_MENUITEM, menu);
522 516
@@ -546,10 +540,7 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
546 { 540 {
547 int type; 541 int type;
548 /* entering an item that may not be a list, so stop scrolling */ 542 /* entering an item that may not be a list, so stop scrolling */
549 FOR_NB_SCREENS(i) 543 gui_synclist_scroll_stop(&lists);
550 {
551 screens[i].scroll_stop(&vps[i]);
552 }
553#ifdef HAVE_BUTTONBAR 544#ifdef HAVE_BUTTONBAR
554 if (!hide_theme) 545 if (!hide_theme)
555 { 546 {
@@ -562,7 +553,7 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
562 redraw_lists = true; 553 redraw_lists = true;
563 if (in_stringlist) 554 if (in_stringlist)
564 type = (menu->flags&MENU_TYPE_MASK); 555 type = (menu->flags&MENU_TYPE_MASK);
565 else 556 else
566 { 557 {
567 type = (temp->flags&MENU_TYPE_MASK); 558 type = (temp->flags&MENU_TYPE_MASK);
568 get_menu_callback(temp, &menu_callback); 559 get_menu_callback(temp, &menu_callback);
@@ -592,7 +583,7 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
592 if (temp->flags&MENU_FUNC_USEPARAM) 583 if (temp->flags&MENU_FUNC_USEPARAM)
593 return_value = temp->function->function_w_param( 584 return_value = temp->function->function_w_param(
594 temp->function->param); 585 temp->function->param);
595 else 586 else
596 return_value = temp->function->function(); 587 return_value = temp->function->function();
597 if (!(menu->flags&MENU_EXITAFTERTHISMENU) || 588 if (!(menu->flags&MENU_EXITAFTERTHISMENU) ||
598 (temp->flags&MENU_EXITAFTERTHISMENU)) 589 (temp->flags&MENU_EXITAFTERTHISMENU))
@@ -665,7 +656,7 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
665 ret = MENU_ATTACHED_USB; 656 ret = MENU_ATTACHED_USB;
666 done = true; 657 done = true;
667 } 658 }
668 659
669 if (redraw_lists && !done) 660 if (redraw_lists && !done)
670 { 661 {
671 if (menu_callback) 662 if (menu_callback)
@@ -686,8 +677,7 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
686 *start_selected = get_menu_selection( 677 *start_selected = get_menu_selection(
687 gui_synclist_get_sel_pos(&lists), menu); 678 gui_synclist_get_sel_pos(&lists), menu);
688 } 679 }
689 FOR_NB_SCREENS(i) 680 FOR_NB_SCREENS(i)
690 viewportmanager_theme_undo(i, false); 681 viewportmanager_theme_undo(i, false);
691 return ret; 682 return ret;
692} 683}
693
diff --git a/apps/menus/main_menu.c b/apps/menus/main_menu.c
index 505801d3cc..783490284c 100644
--- a/apps/menus/main_menu.c
+++ b/apps/menus/main_menu.c
@@ -415,13 +415,13 @@ static int sleep_timer(void)
415 415
416#if CONFIG_RTC 416#if CONFIG_RTC
417int time_screen(void* ignored); 417int time_screen(void* ignored);
418MENUITEM_FUNCTION(timedate_item, MENU_FUNC_CHECK_RETVAL, ID2P(LANG_TIME_MENU), time_screen, 418MENUITEM_FUNCTION(timedate_item, MENU_FUNC_CHECK_RETVAL, ID2P(LANG_TIME_MENU),
419 NULL, NULL, Icon_Menu_setting ); 419 time_screen, NULL, NULL, Icon_Menu_setting );
420#endif 420#endif
421/* This item is in the time/date screen if there is a RTC */ 421/* This item is in the time/date screen if there is a RTC */
422MENUITEM_FUNCTION(sleep_timer_call, 0, ID2P(LANG_SLEEP_TIMER), sleep_timer, 422MENUITEM_FUNCTION(sleep_timer_call, 0, ID2P(LANG_SLEEP_TIMER), sleep_timer,
423 NULL, NULL, Icon_Menu_setting); /* make it look like a 423 NULL, NULL, Icon_Menu_setting); /* make it look like a
424 setting to the user */ 424 setting to the user */
425 425
426MENUITEM_FUNCTION(show_credits_item, 0, ID2P(LANG_CREDITS), 426MENUITEM_FUNCTION(show_credits_item, 0, ID2P(LANG_CREDITS),
427 (menu_function)show_credits, NULL, NULL, Icon_NOICON); 427 (menu_function)show_credits, NULL, NULL, Icon_NOICON);
diff --git a/apps/menus/time_menu.c b/apps/menus/time_menu.c
index 757ce82928..597f7e0c3a 100644
--- a/apps/menus/time_menu.c
+++ b/apps/menus/time_menu.c
@@ -62,10 +62,10 @@ static int timedate_set(void)
62#define C2DIG2DEC(x) (S100(x)-100) 62#define C2DIG2DEC(x) (S100(x)-100)
63 63
64 tm.tm_hour = 0; 64 tm.tm_hour = 0;
65 tm.tm_min = 0; 65 tm.tm_min = 0;
66 tm.tm_sec = 0; 66 tm.tm_sec = 0;
67 tm.tm_mday = C2DIG2DEC(DAY); 67 tm.tm_mday = C2DIG2DEC(DAY);
68 tm.tm_mon = C2DIG2DEC(MONTH)-1; 68 tm.tm_mon = C2DIG2DEC(MONTH)-1;
69 tm.tm_wday = 1; 69 tm.tm_wday = 1;
70 tm.tm_year = YEAR-1900; 70 tm.tm_year = YEAR-1900;
71 } 71 }
@@ -193,8 +193,8 @@ static void draw_timedate(struct viewport *vp, struct screen *display)
193 d = str(LANG_UNKNOWN); 193 d = str(LANG_UNKNOWN);
194 } 194 }
195 195
196 display->puts_scroll(0, line++, t); 196 display->puts(0, line++, t);
197 display->puts_scroll(0, line, d); 197 display->puts(0, line, d);
198 198
199 display->update_viewport(); 199 display->update_viewport();
200 display->set_viewport(NULL); 200 display->set_viewport(NULL);
@@ -284,9 +284,6 @@ int time_screen(void* ignored)
284 } 284 }
285 285
286 ret = do_menu(&time_menu, NULL, menu, false); 286 ret = do_menu(&time_menu, NULL, menu, false);
287 FOR_NB_SCREENS(i)
288 screens[i].scroll_stop(&clock[i]);
289
290 /* see comments above in the button callback */ 287 /* see comments above in the button callback */
291 if (!menu_was_pressed && ret == GO_TO_PREVIOUS) 288 if (!menu_was_pressed && ret == GO_TO_PREVIOUS)
292 return 0; 289 return 0;
diff --git a/apps/screens.c b/apps/screens.c
index d997590623..2e7dbd84ed 100644
--- a/apps/screens.c
+++ b/apps/screens.c
@@ -345,9 +345,10 @@ static void say_time(int cursorpos, const struct tm *tm)
345 345
346bool set_time_screen(const char* title, struct tm *tm) 346bool set_time_screen(const char* title, struct tm *tm)
347{ 347{
348 bool done = false; 348 struct viewport viewports[NB_SCREENS];
349 bool done = false, usb = false;
349 int cursorpos = 0; 350 int cursorpos = 0;
350 unsigned int statusbar_height = 0; 351 unsigned int s;
351 unsigned char offsets_ptr[] = 352 unsigned char offsets_ptr[] =
352 { OFF_HOURS, OFF_MINUTES, OFF_SECONDS, OFF_YEAR, 0, OFF_DAY }; 353 { OFF_HOURS, OFF_MINUTES, OFF_SECONDS, OFF_YEAR, 0, OFF_DAY };
353 354
@@ -359,15 +360,16 @@ bool set_time_screen(const char* title, struct tm *tm)
359 offsets_ptr[IDX_DAY] = OFF_YEAR; 360 offsets_ptr[IDX_DAY] = OFF_YEAR;
360 } 361 }
361 362
362 if(global_settings.statusbar)
363 statusbar_height = STATUSBAR_HEIGHT;
364
365 /* speak selection when screen is entered */ 363 /* speak selection when screen is entered */
366 say_time(cursorpos, tm); 364 say_time(cursorpos, tm);
367 365
366#ifdef HAVE_TOUCHSCREEN
367 enum touchscreen_mode old_mode = touchscreen_get_mode();
368 touchscreen_set_mode(TOUCHSCREEN_BUTTON);
369#endif
368 while (!done) { 370 while (!done) {
369 int button; 371 int button;
370 unsigned int i, s, realyear, min, max; 372 unsigned int i, realyear, min, max;
371 unsigned char *ptr[6]; 373 unsigned char *ptr[6];
372 unsigned char buffer[20]; 374 unsigned char buffer[20];
373 int *valptr = NULL; 375 int *valptr = NULL;
@@ -413,7 +415,6 @@ bool set_time_screen(const char* title, struct tm *tm)
413 int pos, nb_lines; 415 int pos, nb_lines;
414 unsigned int separator_width, weekday_width; 416 unsigned int separator_width, weekday_width;
415 unsigned int j, width, prev_line_height; 417 unsigned int j, width, prev_line_height;
416 struct viewport viewports[NB_SCREENS];
417 /* 6 possible cursor possitions, 2 values stored for each: x, y */ 418 /* 6 possible cursor possitions, 2 values stored for each: x, y */
418 unsigned int cursor[6][2]; 419 unsigned int cursor[6][2];
419 struct viewport *vp = &viewports[s]; 420 struct viewport *vp = &viewports[s];
@@ -453,7 +454,7 @@ bool set_time_screen(const char* title, struct tm *tm)
453 prev_line_height *= 2; 454 prev_line_height *= 2;
454 } 455 }
455 screen->getstringsize(ptr[i], &width, NULL); 456 screen->getstringsize(ptr[i], &width, NULL);
456 cursor[i][INDEX_Y] = prev_line_height + statusbar_height; 457 cursor[i][INDEX_Y] = prev_line_height;
457 cursor[i][INDEX_X] = j; 458 cursor[i][INDEX_X] = j;
458 j += width + separator_width; 459 j += width + separator_width;
459 } 460 }
@@ -527,15 +528,7 @@ bool set_time_screen(const char* title, struct tm *tm)
527 break; 528 break;
528 } 529 }
529 530
530#ifdef HAVE_TOUCHSCREEN
531 enum touchscreen_mode old_mode = touchscreen_get_mode();
532
533 touchscreen_set_mode(TOUCHSCREEN_BUTTON);
534#endif
535 button = get_action(CONTEXT_SETTINGS_TIME, TIMEOUT_BLOCK); 531 button = get_action(CONTEXT_SETTINGS_TIME, TIMEOUT_BLOCK);
536#ifdef HAVE_TOUCHSCREEN
537 touchscreen_set_mode(old_mode);
538#endif
539 switch ( button ) { 532 switch ( button ) {
540 case ACTION_STD_PREV: 533 case ACTION_STD_PREV:
541 cursorpos = clamp_value_wrap(--cursorpos, 5, 0); 534 cursorpos = clamp_value_wrap(--cursorpos, 5, 0);
@@ -567,11 +560,16 @@ bool set_time_screen(const char* title, struct tm *tm)
567 560
568 default: 561 default:
569 if (default_event_handler(button) == SYS_USB_CONNECTED) 562 if (default_event_handler(button) == SYS_USB_CONNECTED)
570 return true; 563 done = usb = true;
571 break; 564 break;
572 } 565 }
573 } 566 }
574 return false; 567 FOR_NB_SCREENS(s)
568 screens[s].scroll_stop(&viewports[s]);
569#ifdef HAVE_TOUCHSCREEN
570 touchscreen_set_mode(old_mode);
571#endif
572 return usb;
575} 573}
576#endif /* defined(HAVE_LCD_BITMAP) && (CONFIG_RTC != 0) */ 574#endif /* defined(HAVE_LCD_BITMAP) && (CONFIG_RTC != 0) */
577 575