From 83d3f1d3f65e4115bc5a8348d126b6ab7cbbcf64 Mon Sep 17 00:00:00 2001 From: Jonathan Gordon Date: Wed, 27 Mar 2013 22:43:40 +1100 Subject: [PATCH] simplelist: Fix simplelist_set_line_count() so it actually sets the count (hopefully) Fixes FS#12838 Change-Id: I932184afaf7b65121a0c459cd03c8482e3bad22b --- apps/debug_menu.c | 26 ++++++++++++++++++++++++++ apps/gui/list.c | 8 ++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/apps/debug_menu.c b/apps/debug_menu.c index 265d8988b5..59a58212ad 100644 --- a/apps/debug_menu.c +++ b/apps/debug_menu.c @@ -1838,6 +1838,31 @@ static bool dbg_save_roms(void) } #endif /* CPU */ +static int radio_callback(int btn, struct gui_synclist *lists) +{ + (void)lists; + if (btn == ACTION_STD_CANCEL) + return btn; + simplelist_set_line_count(1); + simplelist_addline("test one"); + simplelist_addline("test two"); + simplelist_addline("test dsaf"); + simplelist_addline("test asdfsad"); + simplelist_addline("-------------"); + return ACTION_REDRAW; +} +static bool dbg_fm_radio(void) +{ + struct simplelist_info info; + info.scroll_all = true; + simplelist_info_init(&info, "FM Radio", 1, NULL); + simplelist_set_line_count(0); + simplelist_addline("HW detected: %s", "no"); + + info.action_callback = radio_callback; + info.hide_selection = true; + return simplelist_show_list(&info); +} #ifndef SIMULATOR #if CONFIG_TUNER @@ -2324,6 +2349,7 @@ static const struct { { "FM Radio", dbg_fm_radio }, #endif #endif + { "TEST HERE", dbg_fm_radio}, #if defined(HAVE_EEPROM) && !defined(HAVE_EEPROM_SETTINGS) { "Write back EEPROM", dbg_write_eeprom }, #endif diff --git a/apps/gui/list.c b/apps/gui/list.c index cc43843e46..27032378c3 100644 --- a/apps/gui/list.c +++ b/apps/gui/list.c @@ -843,8 +843,12 @@ void simplelist_set_line_count(int lines) simplelist_line_remaining = sizeof(simplelist_buffer); simplelist_line_count = 0; } - else if (lines >= SIMPLELIST_MAX_LINES) - simplelist_line_count = SIMPLELIST_MAX_LINES; + else if (lines < simplelist_line_count) { + char *end = simplelist_text[lines]; + simplelist_line_pos = end - simplelist_buffer; + simplelist_line_remaining = sizeof(simplelist_buffer) - simplelist_line_pos; + simplelist_line_count = lines; + } } /* get the current amount of lines shown */ int simplelist_get_line_count(void)