--- ./apps/gui/gwps.c.orig 2006-12-27 23:13:34.000000000 +0100 +++ ./apps/gui/gwps.c 2007-01-08 16:17:02.000000000 +0100 @@ -459,7 +459,8 @@ #endif action_signalscreenchange(); if (main_menu()) - return true; + if (menureturn(false) == MENU_ATTACHED_USB) + return true; #if LCD_DEPTH > 1 show_wps_backdrop(); #endif --- ./apps/keymaps/keymap-h1x0_h3x0.c.orig 2006-12-19 12:57:40.000000000 +0100 +++ ./apps/keymaps/keymap-h1x0_h3x0.c 2007-01-08 16:17:02.000000000 +0100 @@ -282,6 +282,13 @@ }; +const struct button_mapping button_context_menu[] = { + { ACTION_WPS_PLAY, BUTTON_ON|BUTTON_REL, BUTTON_ON }, + { ACTION_WPS_STOP, BUTTON_OFF, BUTTON_NONE }, + + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) +}; /* button_context_menu */ + /***************************************************************************** * Remote control mappings *****************************************************************************/ @@ -914,8 +921,9 @@ switch (context) { case CONTEXT_STD: - case CONTEXT_MAINMENU: return button_context_standard; + case CONTEXT_MAINMENU: + return button_context_menu; case CONTEXT_WPS: return button_context_wps; --- ./apps/tree.c.orig 2006-12-27 23:13:33.000000000 +0100 +++ ./apps/tree.c 2007-01-08 16:17:02.000000000 +0100 @@ -509,8 +509,8 @@ { playlist_start(global_settings.resume_index, global_settings.resume_offset); - - start_wps = true; + if (*tc.dirfilter < NUM_FILTER_MODES) + start_wps = true; } else return; } @@ -609,6 +609,7 @@ bool lastsortcase = global_settings.sort_case; bool need_update = true; bool exit_func = false; + bool exit_menu = false; long thumbnail_time = -1; /* for delaying a thumbnail */ char* currdir = tc.currdir; /* just a shortcut */ @@ -722,30 +723,27 @@ break; case ACTION_TREE_STOP: - if (*tc.dirfilter < NUM_FILTER_MODES) - { - /* Stop the music if it is playing */ - if(audio_status()) { - if (!global_settings.party_mode) { - if (global_settings.fade_on_stop) - fade(0); - bookmark_autobookmark(); - audio_stop(); - } + /* Stop the music if it is playing */ + if(audio_status()) { + if (!global_settings.party_mode) { + if (global_settings.fade_on_stop) + fade(0); + bookmark_autobookmark(); + audio_stop(); } + } #if defined(CONFIG_CHARGING) && \ (CONFIG_KEYPAD == RECORDER_PAD) && !defined(HAVE_SW_POWEROFF) - else { - if (!charger_inserted()) { - if(shutdown_screen()) - reload_dir = true; - } else { - charging_splash(); - } - restore = true; + else if (*tc.dirfilter < NUM_FILTER_MODES){ + if (!charger_inserted()) { + if(shutdown_screen()) + reload_dir = true; + } else { + charging_splash(); } -#endif + restore = true; } +#endif #if defined(CONFIG_CHARGING) && !defined(HAVE_POWEROFF_WHILE_CHARGING) { static int last_off = 0; @@ -768,7 +766,16 @@ screens[i].stop_scroll(); action_signalscreenchange(); if (main_menu()) - reload_dir = true; + switch (menureturn(false)){ + case MENU_SELECTED_WPS: + start_wps=true; + break; + case MENU_ATTACHED_USB: + reload_dir = true; + break; + default: + break; + } restore = true; #ifdef HAVE_TAGCACHE @@ -778,7 +785,10 @@ #endif } else /* use it as a quick exit instead */ + { + menureturn(MENU_SELECTED_QEXIT); exit_func = true; + } break; case ACTION_TREE_WPS: @@ -795,6 +805,14 @@ restore = true; } } + else + { + if (!audio_status() & AUDIO_STATUS_PLAY) + start_resume(false); + menureturn(MENU_SELECTED_WPS); + exit_menu = true; + exit_func = true; + } break; #ifdef HAVE_QUICKSCREEN case ACTION_STD_QUICKSCREEN: @@ -937,7 +955,11 @@ if(*tc.dirfilter > NUM_FILTER_MODES) /* leave sub-browsers after usb, doing otherwise might be confusing to the user */ - exit_func = true; + { + menureturn(MENU_ATTACHED_USB); + exit_func = true; + exit_menu = true; + } else reload_dir = true; } @@ -1102,7 +1124,7 @@ } } action_signalscreenchange(); - return true; + return exit_menu; } static int plsize = 0; @@ -1245,20 +1267,21 @@ { static struct tree_context backup; int last_context; - + bool rtrn; + backup = tc; reload_dir = true; memcpy(tc.currdir, root, sizeof(tc.currdir)); start_wps = false; tc.dirfilter = &dirfilter; last_context = curr_context; - - dirbrowse(); + + rtrn = dirbrowse(); tc = backup; curr_context = last_context; - - return false; + + return rtrn; } void tree_init(void) --- ./apps/menu.c.orig 2006-12-13 09:33:57.000000000 +0100 +++ ./apps/menu.c 2007-01-08 16:17:02.000000000 +0100 @@ -41,6 +41,11 @@ #include "lang.h" #include "misc.h" #include "action.h" +#include "splash.h" +#include "audio.h" +#include "playlist.h" +#include "gwps-common.h" +#include "bookmark.h" #ifdef HAVE_LCD_BITMAP #include "icons.h" @@ -65,6 +70,34 @@ static struct menu menus[MAX_MENUS]; static bool inuse[MAX_MENUS] = { false }; +static int reason_return; + +int menureturn(int reason) +{ + if (reason) + reason_return=reason; + return reason_return; +} + +static void start_resume(void) +{ + if ( global_settings.resume_index != -1 ) { + DEBUGF("Resume index %X offset %X\n", + global_settings.resume_index, + global_settings.resume_offset); + + if (playlist_resume() != -1) + { + playlist_start(global_settings.resume_index, + global_settings.resume_offset); + } + else return; + } + else { + gui_syncsplash(HZ*2, true, str(LANG_NOTHING_TO_RESUME)); + } +} + static char * menu_get_itemname(int selected_item, void * data, char *buffer) { struct menu *local_menus=(struct menu *)data; @@ -148,15 +181,34 @@ action_signalscreenchange(); return gui_synclist_get_sel_pos(&(menus[m].synclist)); - case ACTION_STD_CANCEL: - case ACTION_STD_MENU: exit = true; break; + case ACTION_STD_MENU: + action_signalscreenchange(); + return menureturn(MENU_SELECTED_QEXIT); + + case ACTION_WPS_STOP: + if(audio_status()) { + if (!global_settings.party_mode){ + if (global_settings.fade_on_stop) + fade(0); + bookmark_autobookmark(); + audio_stop(); + } + } + break; + + case ACTION_WPS_PLAY: + if (!audio_status() & AUDIO_STATUS_PLAY) + start_resume(); + action_signalscreenchange(); + return menureturn(MENU_SELECTED_WPS); + default: if(default_event_handler(key) == SYS_USB_CONNECTED) - return MENU_ATTACHED_USB; + return menureturn(MENU_ATTACHED_USB); break; } gui_syncstatusbar_draw(&statusbars, false); @@ -176,6 +228,8 @@ return false; case MENU_ATTACHED_USB: + case MENU_SELECTED_QEXIT: + case MENU_SELECTED_WPS: return true; default: --- ./apps/menu.h.orig 2006-12-09 11:50:06.000000000 +0100 +++ ./apps/menu.h 2007-01-08 16:17:02.000000000 +0100 @@ -26,10 +26,11 @@ #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ (CONFIG_KEYPAD == IRIVER_H300_PAD) #define MENU_EXIT BUTTON_LEFT -#define MENU_EXIT2 BUTTON_OFF #define MENU_EXIT_MENU BUTTON_MODE #define MENU_ENTER BUTTON_RIGHT #define MENU_ENTER2 BUTTON_SELECT +#define MENU_STOP BUTTON_OFF +#define MENU_PLAY BUTTON_ON #define MENU_RC_EXIT BUTTON_RC_STOP #define MENU_RC_EXIT_MENU BUTTON_RC_MODE @@ -40,10 +41,11 @@ #elif CONFIG_KEYPAD == RECORDER_PAD #define MENU_EXIT BUTTON_LEFT -#define MENU_EXIT2 BUTTON_OFF #define MENU_EXIT_MENU BUTTON_F1 #define MENU_ENTER BUTTON_RIGHT #define MENU_ENTER2 BUTTON_PLAY +#define MENU_STOP BUTTON_OFF +#define MENU_PLAY BUTTON_ON #define MENU_RC_EXIT BUTTON_RC_STOP #define MENU_RC_ENTER BUTTON_RC_PLAY @@ -52,7 +54,7 @@ #define MENU_EXIT BUTTON_STOP #define MENU_EXIT_MENU BUTTON_MENU #define MENU_ENTER BUTTON_PLAY - +#define MENU_PLAY BUTTON_ON #define MENU_RC_EXIT BUTTON_RC_STOP #define MENU_RC_ENTER BUTTON_RC_PLAY @@ -60,6 +62,7 @@ #define MENU_EXIT BUTTON_LEFT #define MENU_EXIT_MENU BUTTON_MENU #define MENU_ENTER BUTTON_RIGHT +#define MENU_STOP BUTTON_OFF #elif (CONFIG_KEYPAD == IPOD_3G_PAD) || (CONFIG_KEYPAD == IPOD_4G_PAD) @@ -71,6 +74,7 @@ #define MENU_EXIT_MENU BUTTON_MENU #define MENU_ENTER BUTTON_RIGHT #define MENU_ENTER2 BUTTON_SELECT +#define MENU_PLAY BUTTON_PLAY #elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD @@ -88,6 +92,7 @@ #define MENU_EXIT_MENU BUTTON_REC #define MENU_ENTER BUTTON_RIGHT #define MENU_ENTER2 BUTTON_SELECT +#define MENU_PLAY BUTTON_PLAY #elif CONFIG_KEYPAD == GIGABEAT_PAD @@ -98,6 +103,7 @@ #define MENU_ENTER2 BUTTON_SELECT #define MENU_NEXT BUTTON_DOWN #define MENU_PREV BUTTON_UP +#define MENU_PLAY BUTTON_POWER #elif CONFIG_KEYPAD == IRIVER_H10_PAD @@ -125,6 +131,8 @@ int menu_show(int m); #define MENU_ATTACHED_USB -1 #define MENU_SELECTED_EXIT -2 +#define MENU_SELECTED_QEXIT -3 +#define MENU_SELECTED_WPS -4 bool menu_run(int menu); int menu_cursor(int menu); @@ -137,5 +145,6 @@ void menu_insert(int menu, int position, char *desc, bool (*function) (void)); void menu_set_cursor(int menu, int position); void menu_talk_selected(int m); +int menureturn(int reason);/*used to return the reason for leaving the menu*/ #endif /* End __MENU_H__ */