diff options
author | Jonathan Gordon <rockbox@jdgordon.info> | 2007-03-17 12:33:34 +0000 |
---|---|---|
committer | Jonathan Gordon <rockbox@jdgordon.info> | 2007-03-17 12:33:34 +0000 |
commit | daf66940b1a06de2681c91dcb8cf72d95a234e86 (patch) | |
tree | cf19ca0f426f3a44718fbe42ce64306ac28aa815 /apps/menu.c | |
parent | 86ecc9588beca55162d7b4ef44ffcddd9c447600 (diff) | |
download | rockbox-daf66940b1a06de2681c91dcb8cf72d95a234e86.tar.gz rockbox-daf66940b1a06de2681c91dcb8cf72d95a234e86.zip |
Unify the way functions are called from menus.
Optionally, the functions return value can be checked for a value to
tell the menu to quit.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12821 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/menu.c')
-rw-r--r-- | apps/menu.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/apps/menu.c b/apps/menu.c index 29dad82851..dd5a23b933 100644 --- a/apps/menu.c +++ b/apps/menu.c | |||
@@ -160,7 +160,6 @@ static void menu_get_icon(int selected_item, void * data, ICON * icon) | |||
160 | *icon = bitmap_icons_6x8[menu_icon]; | 160 | *icon = bitmap_icons_6x8[menu_icon]; |
161 | break; | 161 | break; |
162 | case MT_FUNCTION_CALL: | 162 | case MT_FUNCTION_CALL: |
163 | case MT_FUNCTION_WITH_PARAM: | ||
164 | case MT_RETURN_VALUE: | 163 | case MT_RETURN_VALUE: |
165 | if (menu_icon == Icon_NOICON) | 164 | if (menu_icon == Icon_NOICON) |
166 | *icon = bitmap_icons_6x8[Icon_Menu_functioncall]; | 165 | *icon = bitmap_icons_6x8[Icon_Menu_functioncall]; |
@@ -545,14 +544,21 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected) | |||
545 | } | 544 | } |
546 | break; | 545 | break; |
547 | case MT_FUNCTION_CALL: | 546 | case MT_FUNCTION_CALL: |
547 | { | ||
548 | int return_value; | ||
548 | action_signalscreenchange(); | 549 | action_signalscreenchange(); |
549 | temp->function(); | 550 | if (temp->flags&MENU_FUNC_USEPARAM) |
550 | break; | 551 | return_value = temp->function->function_w_param( |
551 | case MT_FUNCTION_WITH_PARAM: | 552 | temp->function->param); |
552 | action_signalscreenchange(); | 553 | else |
553 | temp->func_with_param->function( | 554 | return_value = temp->function->function(); |
554 | temp->func_with_param->param); | 555 | if (temp->flags&MENU_FUNC_CHECK_RETVAL) |
556 | { | ||
557 | if (return_value == temp->function->exit_value) | ||
558 | return return_value; | ||
559 | } | ||
555 | break; | 560 | break; |
561 | } | ||
556 | case MT_SETTING: | 562 | case MT_SETTING: |
557 | case MT_SETTING_W_TEXT: | 563 | case MT_SETTING_W_TEXT: |
558 | { | 564 | { |