summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/menu.c37
-rw-r--r--apps/menu.h3
-rw-r--r--apps/menus/audiohw_eq_menu.c5
-rw-r--r--apps/menus/radio_menu.c5
-rw-r--r--apps/menus/settings_menu.c7
-rw-r--r--apps/root_menu.c5
6 files changed, 43 insertions, 19 deletions
diff --git a/apps/menu.c b/apps/menu.c
index a205615802..48f6fa3d0b 100644
--- a/apps/menu.c
+++ b/apps/menu.c
@@ -104,13 +104,12 @@ static const char* get_menu_item_name(int selected_item,
int type = (menu->flags&MENU_TYPE_MASK);
selected_item = get_menu_selection(selected_item, menu);
- (void)buffer_len;
/* only MT_MENU or MT_RETURN_ID is allowed in here */
if (type == MT_RETURN_ID)
{
if (menu->flags&MENU_DYNAMIC_DESC)
return menu->menu_get_name_and_icon->list_get_name(selected_item,
- menu->menu_get_name_and_icon->list_get_name_data, buffer);
+ menu->menu_get_name_and_icon->list_get_name_data, buffer, buffer_len);
return menu->strings[selected_item];
}
@@ -118,7 +117,7 @@ static const char* get_menu_item_name(int selected_item,
if ((menu->flags&MENU_DYNAMIC_DESC) && (type != MT_SETTING_W_TEXT))
return menu->menu_get_name_and_icon->list_get_name(selected_item,
- menu->menu_get_name_and_icon->list_get_name_data, buffer);
+ menu->menu_get_name_and_icon->list_get_name_data, buffer, buffer_len);
type = (menu->flags&MENU_TYPE_MASK);
if ((type == MT_SETTING) || (type == MT_SETTING_W_TEXT))
@@ -177,6 +176,7 @@ static void init_menu_lists(const struct menu_item_ex *menu,
int type = (menu->flags&MENU_TYPE_MASK);
menu_callback_type menu_callback = NULL;
int icon;
+ char * title;
current_subitems_count = 0;
if (type == MT_RETURN_ID)
@@ -206,14 +206,33 @@ static void init_menu_lists(const struct menu_item_ex *menu,
gui_synclist_init(lists,get_menu_item_name,(void*)menu,false,1, parent);
#ifdef HAVE_LCD_BITMAP
- if (menu->callback_and_desc->icon_id == Icon_NOICON)
- icon = Icon_Submenu_Entered;
- else
+
+ if (menu->flags&MENU_HAS_DESC)
+ {
icon = menu->callback_and_desc->icon_id;
- gui_synclist_set_title(lists, P2STR(menu->callback_and_desc->desc), icon);
+ title = P2STR(menu->callback_and_desc->desc);
+ }
+ else if (menu->flags&MENU_DYNAMIC_DESC)
+ {
+ char buffer[80];
+ icon = menu->menu_get_name_and_icon->icon_id;
+ title = menu->menu_get_name_and_icon->
+ list_get_name(-1, menu->menu_get_name_and_icon->
+ list_get_name_data, buffer, sizeof(buffer));
+ }
+ else
+ {
+ icon = Icon_NOICON;
+ title = "";
+ }
+
+ if (icon == Icon_NOICON)
+ icon = Icon_Submenu_Entered;
+ gui_synclist_set_title(lists, title, icon);
gui_synclist_set_icon_callback(lists, global_settings.show_icons?menu_get_icon:NULL);
#else
(void)icon;
+ (void)title;
gui_synclist_set_icon_callback(lists, NULL);
#endif
if(global_settings.talk_menu)
@@ -256,8 +275,8 @@ static int talk_menu_item(int selected_item, void *data)
char buffer[80];
str = menu->submenus[sel]->menu_get_name_and_icon->
list_get_name(sel, menu->submenus[sel]->
- menu_get_name_and_icon->
- list_get_name_data, buffer);
+ menu_get_name_and_icon->
+ list_get_name_data, buffer, sizeof(buffer));
id = P2ID(str);
}
}
diff --git a/apps/menu.h b/apps/menu.h
index df5f7ced9f..7ace51329f 100644
--- a/apps/menu.h
+++ b/apps/menu.h
@@ -91,7 +91,8 @@ struct menu_item_ex {
const struct menu_get_name_and_icon {
int (*menu_callback)(int action,
const struct menu_item_ex *this_item);
- char *(*list_get_name)(int selected_item, void * data, char *buffer);
+ char *(*list_get_name)(int selected_item, void * data,
+ char *buffer, size_t buffer_len);
int (*list_speak_item)(int selected_item, void * data);
void *list_get_name_data;
int icon_id;
diff --git a/apps/menus/audiohw_eq_menu.c b/apps/menus/audiohw_eq_menu.c
index 1027d6a0b8..8dfb6e8450 100644
--- a/apps/menus/audiohw_eq_menu.c
+++ b/apps/menus/audiohw_eq_menu.c
@@ -41,9 +41,10 @@ static unsigned short hw_eq_setting_lang_ids[AUDIOHW_EQ_SETTING_NUM] =
#endif
};
-static char * hw_eq_get_name(int selected_item, void * data, char *buffer)
+static char * hw_eq_get_name(int selected_item, void * data,
+ char *buffer, size_t buffer_len)
{
- snprintf(buffer, MAX_PATH,
+ snprintf(buffer, buffer_len,
str(hw_eq_setting_lang_ids[HW_EQ_IDX_SETTING(data)]),
HW_EQ_IDX_BAND(data) + 1);
return buffer;
diff --git a/apps/menus/radio_menu.c b/apps/menus/radio_menu.c
index fb3d2b7fee..8871421c11 100644
--- a/apps/menus/radio_menu.c
+++ b/apps/menus/radio_menu.c
@@ -100,11 +100,12 @@ MENUITEM_SETTING(force_mono, &global_settings.fm_force_mono, NULL);
#ifndef FM_MODE
extern int radio_mode;
-static char* get_mode_text(int selected_item, void * data, char *buffer)
+static char* get_mode_text(int selected_item, void * data,
+ char *buffer, size_t buffer_len)
{
(void)selected_item;
(void)data;
- snprintf(buffer, MAX_PATH, "%s %s", str(LANG_MODE),
+ snprintf(buffer, buffer_len, "%s %s", str(LANG_MODE),
radio_mode ? str(LANG_PRESET) :
str(LANG_RADIO_SCAN_MODE));
return buffer;
diff --git a/apps/menus/settings_menu.c b/apps/menus/settings_menu.c
index ca0ec91967..67595498ad 100644
--- a/apps/menus/settings_menu.c
+++ b/apps/menus/settings_menu.c
@@ -500,14 +500,15 @@ static int seconds_to_min(int secs)
/* A string representation of either whether a sleep timer will be started or
canceled, and how long it will be or how long is remaining in brackets */
-static char* sleep_timer_getname(int selected_item, void * data, char *buffer)
+static char* sleep_timer_getname(int selected_item, void * data,
+ char *buffer, size_t buffer_len)
{
(void)selected_item;
(void)data;
int sec = get_sleep_timer();
char timer_buf[10];
- /* we have no sprintf, so MAX_PATH is a guess */
- snprintf(buffer, MAX_PATH, "%s (%s)",
+
+ snprintf(buffer, buffer_len, "%s (%s)",
str(sec ? LANG_SLEEP_TIMER_CANCEL_CURRENT
: LANG_SLEEP_TIMER_START_CURRENT),
sleep_timer_formatter(timer_buf, sizeof(timer_buf),
diff --git a/apps/root_menu.c b/apps/root_menu.c
index 6b3e213831..584328bd4b 100644
--- a/apps/root_menu.c
+++ b/apps/root_menu.c
@@ -454,9 +454,10 @@ MENUITEM_RETURNVALUE(rocks_browser, ID2P(LANG_PLUGINS), GO_TO_BROWSEPLUGINS,
MENUITEM_RETURNVALUE(playlist_browser, ID2P(LANG_CATALOG), GO_TO_PLAYLIST_VIEWER,
NULL, Icon_Playlist);
-static char *get_wps_item_name(int selected_item, void * data, char *buffer)
+static char *get_wps_item_name(int selected_item, void * data,
+ char *buffer, size_t buffer_len)
{
- (void)selected_item; (void)data; (void)buffer;
+ (void)selected_item; (void)data; (void)buffer; (void)buffer_len;
if (audio_status())
return ID2P(LANG_NOW_PLAYING);
return ID2P(LANG_RESUME_PLAYBACK);