From b285076925fed906d95573b64115cb3f6bdafe65 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Fri, 23 Aug 2002 12:32:52 +0000 Subject: [PATCH] Remade the menu system slightly. All functions invoked from menus now use the Menu typedef as return type, and *ALL* menus that intercept USB connect can then return MENU_REFRESH_DIR so that the parent (any parent really) that do file or dir-accesses knows that and can do the refresh. If no refresh is needed by the parent, MENU_OK is returned. Somewhat biggish commit this close to 1.3, but we need to sort out this refresh-after-usb-connected business. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1948 a1c6a512-1295-4272-9138-f99709370657 --- apps/Makefile | 2 +- apps/debug_menu.c | 51 ++++++++++++++++++++++++---------------- apps/debug_menu.h | 6 ++--- apps/games_menu.c | 11 +++++---- apps/games_menu.h | 4 +++- apps/main_menu.c | 18 +++++++++----- apps/main_menu.h | 4 +++- apps/menu.c | 8 +++++-- apps/menu.h | 12 ++++++++-- apps/recorder/blank.c | 16 +++++++------ apps/recorder/bounce.c | 5 +++- apps/recorder/boxes.c | 5 +++- apps/recorder/boxes.h | 4 +++- apps/recorder/sokoban.c | 5 +++- apps/recorder/sokoban.h | 4 +++- apps/recorder/tetris.c | 5 +++- apps/screensavers_menu.c | 11 +++++---- apps/screensavers_menu.h | 2 +- apps/settings_menu.c | 45 +++++++++++++++++++++++------------ apps/settings_menu.h | 4 +++- apps/sound_menu.c | 28 +++++++++++++++------- apps/sound_menu.h | 4 +++- apps/tree.c | 10 ++++---- 23 files changed, 175 insertions(+), 89 deletions(-) diff --git a/apps/Makefile b/apps/Makefile index e375cb9b1d..8ec3b0a581 100644 --- a/apps/Makefile +++ b/apps/Makefile @@ -15,7 +15,7 @@ OC = sh-elf-objcopy FIRMWARE := ../firmware -INCLUDES= -I$(FIRMWARE)/include -I$(FIRMWARE) -I$(FIRMWARE)/common -I$(FIRMWARE)/drivers -I$(FIRMWARE)/malloc +INCLUDES= -I$(FIRMWARE)/include -I$(FIRMWARE) -I$(FIRMWARE)/common -I$(FIRMWARE)/drivers -I$(FIRMWARE)/malloc -I. # Pick a target to build for #TARGET = -DARCHOS_PLAYER=1 diff --git a/apps/debug_menu.c b/apps/debug_menu.c index 44079a789d..ed5e8268ea 100644 --- a/apps/debug_menu.c +++ b/apps/debug_menu.c @@ -82,7 +82,7 @@ void dbg_os(void) } } #else -void dbg_os(void) +Menu dbg_os(void) { char buf[32]; int button; @@ -109,7 +109,7 @@ void dbg_os(void) switch(button) { case BUTTON_STOP: - return; + return MENU_OK; case BUTTON_LEFT: currval--; @@ -124,12 +124,13 @@ void dbg_os(void) break; } } + return MENU_OK; } #endif #ifdef HAVE_LCD_BITMAP /* Test code!!! */ -void dbg_ports(void) +Menu dbg_ports(void) { unsigned short porta; unsigned short portb; @@ -199,12 +200,13 @@ void dbg_ports(void) case BUTTON_LEFT: charger_enable(false); ide_power_enable(true); - return; + return MENU_OK; } } + return MENU_OK; } #else -void dbg_ports(void) +Menu dbg_ports(void) { unsigned short porta; unsigned short portb; @@ -280,7 +282,7 @@ void dbg_ports(void) switch(button) { case BUTTON_STOP: - return; + return MENU_OK; case BUTTON_LEFT: currval--; @@ -295,12 +297,13 @@ void dbg_ports(void) break; } } + return MENU_OK; } #endif #ifdef HAVE_RTC /* Read RTC RAM contents and display them */ -void dbg_rtc(void) +Menu dbg_rtc(void) { char buf[32]; unsigned char addr = 0, r, c; @@ -344,14 +347,15 @@ void dbg_rtc(void) break; case BUTTON_OFF: case BUTTON_LEFT: - return; + return MENU_OK; } } + return MENU_OK; } #else -void dbg_rtc(void) +Menu dbg_rtc(void) { - return; + return MENU_OK; } #endif @@ -361,7 +365,7 @@ void dbg_rtc(void) #define NUMROWS 4 #endif /* Read MAS registers and display them */ -void dbg_mas(void) +Menu dbg_mas(void) { char buf[32]; unsigned int addr = 0, r, i; @@ -405,13 +409,14 @@ void dbg_mas(void) #else case BUTTON_DOWN: #endif - return; + return MENU_OK; } } + return MENU_OK; } #ifdef HAVE_MAS3587F -void dbg_mas_codec(void) +Menu dbg_mas_codec(void) { char buf[32]; unsigned int addr = 0, r, i; @@ -442,9 +447,10 @@ void dbg_mas_codec(void) if (addr) { addr -= 4; } break; case BUTTON_LEFT: - return; + return MENU_OK; } } + return MENU_OK; } #endif @@ -458,7 +464,7 @@ void dbg_mas_codec(void) #define BAT_FIRST_VAL MAX(POWER_HISTORY_LEN - LCD_WIDTH - 1, 0) #define BAT_YSPACE (LCD_HEIGHT - 20) -void view_battery(void) +Menu view_battery(void) { int view = 0; int i, x, y; @@ -579,15 +585,16 @@ void view_battery(void) case BUTTON_LEFT: case BUTTON_OFF: - return; + return MENU_OK; } } + return MENU_OK; } #endif #ifdef HAVE_MAS3507D -void dbg_mas_info(void) +Menu dbg_mas_info(void) { int button; char buf[32]; @@ -721,7 +728,7 @@ void dbg_mas_info(void) switch(button) { case BUTTON_STOP: - return; + return MENU_OK; case BUTTON_LEFT: currval--; @@ -757,12 +764,14 @@ void dbg_mas_info(void) break; } } + return MENU_OK; } #endif -void debug_menu(void) +Menu debug_menu(void) { int m; + Menu result; struct menu_items items[] = { { "View I/O ports", dbg_ports }, @@ -785,8 +794,10 @@ void debug_menu(void) }; m=menu_init( items, sizeof items / sizeof(struct menu_items) ); - menu_run(m); + result = menu_run(m); menu_exit(m); + + return result; } #endif /* SIMULATOR */ diff --git a/apps/debug_menu.h b/apps/debug_menu.h index 78b344bce3..5dcc3ac183 100644 --- a/apps/debug_menu.h +++ b/apps/debug_menu.h @@ -19,12 +19,12 @@ #ifndef _DEBUG_MENU_H #define _DEBUG_MENU_H -void debug_menu(void); +Menu debug_menu(void); #ifndef SIMULATOR -extern void dbg_ports(void); +extern Menu dbg_ports(void); #ifdef HAVE_RTC -extern void dbg_rtc(void); +extern Menu dbg_rtc(void); #endif #endif diff --git a/apps/games_menu.c b/apps/games_menu.c index 1d30fbbcce..3850a4f0ab 100644 --- a/apps/games_menu.c +++ b/apps/games_menu.c @@ -29,11 +29,12 @@ #include "sprintf.h" #include "sokoban.h" -extern void tetris(void); +extern Menu tetris(void); -void games_menu(void) +Menu games_menu(void) { int m; + Menu result; struct menu_items items[] = { { "Tetris", tetris }, @@ -41,10 +42,10 @@ void games_menu(void) }; m=menu_init( items, sizeof items / sizeof(struct menu_items) ); - menu_run(m); + result = menu_run(m); menu_exit(m); + + return result; } #endif - - diff --git a/apps/games_menu.h b/apps/games_menu.h index 861c27bfac..a179a2a8ea 100644 --- a/apps/games_menu.h +++ b/apps/games_menu.h @@ -19,6 +19,8 @@ #ifndef _GAMES_MENU_H #define _GAMES_MENU_H -void games_menu(void); +#include "menu.h" + +Menu games_menu(void); #endif diff --git a/apps/main_menu.c b/apps/main_menu.c index 2cb9bda9bd..885deea6c4 100644 --- a/apps/main_menu.c +++ b/apps/main_menu.c @@ -105,7 +105,7 @@ int show_logo( void ) return 0; } -void show_credits(void) +Menu show_credits(void) { int j = 0; int btn; @@ -120,22 +120,23 @@ void show_credits(void) btn = button_get(false); if (btn != BUTTON_NONE && !(btn & BUTTON_REL)) - return; + return MENU_OK; } roll_credits(); + return MENU_OK; } #ifdef SIMULATOR #define mp3buf 0 #define mp3end 0 -extern void simulate_usb(void); +extern Menu simulate_usb(void); #else /* defined in linker script */ extern unsigned char mp3buf[]; extern unsigned char mp3end[]; #endif -void show_info(void) +Menu show_info(void) { char s[32]; int buflen = ((mp3end - mp3buf) * 100) / 0x100000; @@ -181,11 +182,14 @@ void show_info(void) if(button_get(false) & ~BUTTON_REL) done = true; } + + return MENU_OK; } -void main_menu(void) +Menu main_menu(void) { int m; + Menu result; /* main menu */ struct menu_items items[] = { @@ -208,11 +212,13 @@ void main_menu(void) #ifdef HAVE_LCD_CHARCELLS lcd_icon(ICON_PARAM, true); #endif - menu_run(m); + result = menu_run(m); #ifdef HAVE_LCD_CHARCELLS lcd_icon(ICON_PARAM, false); #endif menu_exit(m); settings_save(); + + return result; } diff --git a/apps/main_menu.h b/apps/main_menu.h index 54cc6023c7..8efcd6f380 100644 --- a/apps/main_menu.h +++ b/apps/main_menu.h @@ -19,7 +19,9 @@ #ifndef _MAIN_MENU_H #define _MAIN_MENU_H +#include "menu.h" + extern int show_logo(void); -extern void main_menu(void); +extern Menu main_menu(void); #endif diff --git a/apps/menu.c b/apps/menu.c index 418ccf309d..b0060f4df4 100644 --- a/apps/menu.c +++ b/apps/menu.c @@ -212,13 +212,14 @@ void menu_exit(int m) inuse[m] = false; } -void menu_run(int m) +Menu menu_run(int m) { #ifndef SIMULATOR #ifdef HAVE_LCD_BITMAP bool laststate; #endif #endif + Menu result = MENU_OK; menu_draw(m); @@ -273,7 +274,7 @@ void menu_run(int m) case BUTTON_MENU: #endif lcd_stop_scroll(); - return; + return result; #ifdef HAVE_RECORDER_KEYPAD case BUTTON_F3: @@ -298,6 +299,7 @@ void menu_run(int m) #else lcd_icon(ICON_PARAM, true); #endif + result = MENU_REFRESH_DIR; break; #endif @@ -308,4 +310,6 @@ void menu_run(int m) status_draw(); lcd_update(); } + + return result; } diff --git a/apps/menu.h b/apps/menu.h index 0871e502c8..fc962c79aa 100644 --- a/apps/menu.h +++ b/apps/menu.h @@ -22,15 +22,23 @@ #include +typedef enum { + MENU_OK, + MENU_REFRESH_DIR, /* any file/directory contents need to be re-read */ + MENU_LAST /* don't use as return code, only for number of return codes + available */ +} Menu; + struct menu_items { char *desc; - void (*function) (void); + Menu (*function) (void); }; int menu_init(struct menu_items* items, int count); void menu_exit(int menu); -void menu_run(int menu); void put_cursorxy(int x, int y, bool on); +Menu menu_run(int menu); + #endif /* End __MENU_H__ */ diff --git a/apps/recorder/blank.c b/apps/recorder/blank.c index 835420f63b..2c59ec66bc 100644 --- a/apps/recorder/blank.c +++ b/apps/recorder/blank.c @@ -24,6 +24,7 @@ #include "lcd.h" #include "button.h" #include "kernel.h" +#include "menu.h" #ifdef SIMULATOR #include @@ -33,7 +34,7 @@ #define SS_TITLE "Blank" #define SS_TITLE_FONT 2 -void blank(void) +Menu blank(void) { int w, h; char *off = "[Off] to stop"; @@ -76,15 +77,16 @@ void blank(void) lcd_update(); sleep(HZ); - lcd_clear_display(); + lcd_clear_display(); lcd_update(); - while(1) { - if(button_get(false)) - return; + while(1) { + if(button_get(false)) + return MENU_OK; sleep(HZ/10); - } - + } + + return MENU_OK; } #endif diff --git a/apps/recorder/bounce.c b/apps/recorder/bounce.c index 6b500964f0..cb080a0d00 100644 --- a/apps/recorder/bounce.c +++ b/apps/recorder/bounce.c @@ -24,6 +24,7 @@ #include "lcd.h" #include "button.h" #include "kernel.h" +#include "menu.h" #ifdef SIMULATOR #include @@ -83,7 +84,7 @@ static void loopit(void) } -void bounce(void) +Menu bounce(void) { int w, h; char *off = "[Off] to stop"; @@ -126,6 +127,8 @@ void bounce(void) lcd_update(); sleep(HZ); loopit(); + + return MENU_OK; } #endif diff --git a/apps/recorder/boxes.c b/apps/recorder/boxes.c index 6b6d0065c9..60fdef6f9b 100644 --- a/apps/recorder/boxes.c +++ b/apps/recorder/boxes.c @@ -25,6 +25,7 @@ #include "lcd.h" #include "button.h" #include "kernel.h" +#include "menu.h" #ifdef SIMULATOR #include @@ -82,7 +83,7 @@ static void ss_loop(void) } } -void boxes(void) +Menu boxes(void) { int w, h; char *off = "[Off] to stop"; @@ -125,6 +126,8 @@ void boxes(void) lcd_update(); sleep(HZ/2); ss_loop(); + + return MENU_OK; } #endif diff --git a/apps/recorder/boxes.h b/apps/recorder/boxes.h index bf3e095a65..2defb0bbfc 100644 --- a/apps/recorder/boxes.h +++ b/apps/recorder/boxes.h @@ -20,7 +20,9 @@ #ifndef __BOXES_H__ #define __BOXES_H__ -void boxes(void); +#include "menu.h" + +Menu boxes(void); #endif /* __BOXES_H__ */ diff --git a/apps/recorder/sokoban.c b/apps/recorder/sokoban.c index 2795d745e6..6ce19e6a41 100644 --- a/apps/recorder/sokoban.c +++ b/apps/recorder/sokoban.c @@ -23,6 +23,7 @@ #include "lcd.h" #include "button.h" #include "kernel.h" +#include "menu.h" #ifdef SIMULATOR #include @@ -1334,7 +1335,7 @@ void sokoban_loop(void) { } -void sokoban(void) +Menu sokoban(void) { int w, h; int len = strlen(SOKOBAN_TITLE); @@ -1371,4 +1372,6 @@ void sokoban(void) sleep(HZ*2); lcd_clear_display(); sokoban_loop(); + + return MENU_OK; } diff --git a/apps/recorder/sokoban.h b/apps/recorder/sokoban.h index 8e6c54c43e..ee1398c011 100644 --- a/apps/recorder/sokoban.h +++ b/apps/recorder/sokoban.h @@ -20,10 +20,12 @@ #ifndef __SOKOBAN__ #define __SOKOBAN__ +#include "menu.h" + void load_level(int); void update_screen(void); void sokoban_loop(void); -void sokoban(void); +Menu sokoban(void); #endif /*__SOKOBAN__ */ diff --git a/apps/recorder/tetris.c b/apps/recorder/tetris.c index 76d1940889..910374920f 100644 --- a/apps/recorder/tetris.c +++ b/apps/recorder/tetris.c @@ -27,6 +27,7 @@ #include "button.h" #include "kernel.h" #include +#include "menu.h" #ifdef SIMULATOR #include @@ -388,7 +389,7 @@ void init_tetris(void) next_f = 0; } -void tetris(void) +Menu tetris(void) { init_tetris(); @@ -400,6 +401,8 @@ void tetris(void) next_f = t_rand(block_frames[next_b]); new_block(); game_loop(); + + return MENU_OK; } #endif diff --git a/apps/screensavers_menu.c b/apps/screensavers_menu.c index a7bd4d422c..b184b916cc 100644 --- a/apps/screensavers_menu.c +++ b/apps/screensavers_menu.c @@ -30,12 +30,13 @@ #include "sprintf.h" #include "boxes.h" -extern void bounce(void); -extern void blank(void); +extern Menu bounce(void); +extern Menu blank(void); -void screensavers_menu(void) +Menu screensavers_menu(void) { int m; + Menu result; struct menu_items items[] = { { "Boxes", boxes }, @@ -44,8 +45,10 @@ void screensavers_menu(void) }; m=menu_init( items, sizeof items / sizeof(struct menu_items) ); - menu_run(m); + result = menu_run(m); menu_exit(m); + + return result; } #endif diff --git a/apps/screensavers_menu.h b/apps/screensavers_menu.h index 42a40cf826..cac4c43cc9 100644 --- a/apps/screensavers_menu.h +++ b/apps/screensavers_menu.h @@ -19,7 +19,7 @@ #ifndef _SCREENSAVERS_MENU_H #define _SCREENSAVERS_MENU_H -void screensavers_menu(void); +Menu screensavers_menu(void); #endif diff --git a/apps/settings_menu.c b/apps/settings_menu.c index 0d88edfff4..2bb4ef4481 100644 --- a/apps/settings_menu.c +++ b/apps/settings_menu.c @@ -36,39 +36,45 @@ #include "powermgmt.h" #include "rtc.h" -static void show_hidden_files(void) +static Menu show_hidden_files(void) { set_bool( "[Show hidden files]", &global_settings.show_hidden_files ); + return MENU_OK; } -static void contrast(void) +static Menu contrast(void) { set_int( "[Contrast]", "", &global_settings.contrast, lcd_set_contrast, 1, 0, MAX_CONTRAST_SETTING ); + return MENU_OK; } -static void shuffle(void) +static Menu shuffle(void) { set_bool( "[Shuffle]", &global_settings.playlist_shuffle ); + return MENU_OK; } -static void mp3_filter(void) +static Menu mp3_filter(void) { set_bool( "[MP3/M3U filter]", &global_settings.mp3filter ); + return MENU_OK; } -static void sort_case(void) +static Menu sort_case(void) { set_bool( "[Sort case sensitive]", &global_settings.sort_case ); + return MENU_OK; } -static void resume(void) +static Menu resume(void) { char* names[] = { "off", "ask", "on " }; set_option( "[Resume]", &global_settings.resume, names, 3 ); + return MENU_OK; } -static void backlight_timer(void) +static Menu backlight_timer(void) { char* names[] = { "off", "on ", "1s ", "2s ", "3s ", "4s ", "5s ", @@ -77,15 +83,17 @@ static void backlight_timer(void) "60s", "90s"}; set_option("[Backlight]", &global_settings.backlight, names, 19 ); backlight_time(global_settings.backlight); + return MENU_OK; } -static void scroll_speed(void) +static Menu scroll_speed(void) { set_int("Scroll speed indicator...", "", &global_settings.scroll_speed, &lcd_scroll_speed, 1, 1, 20 ); + return MENU_OK; } -static void wps_set(void) +static Menu wps_set(void) { #ifdef HAVE_LCD_BITMAP char* names[] = { "ID3 Tags", "File ", "Parse " }; @@ -102,18 +110,20 @@ static void wps_set(void) #endif #endif + return MENU_OK; } #ifdef HAVE_CHARGE_CTRL -static void deep_discharge(void) +static Menu deep_discharge(void) { set_bool( "[Deep discharge]", &global_settings.discharge ); charge_restart_level = global_settings.discharge ? CHARGE_RESTART_LO : CHARGE_RESTART_HI; + return MENU_OK; } #endif #ifdef HAVE_RTC -static void timedate_set(void) +static Menu timedate_set(void) { int timedate[7]; /* hour,minute,second,year,month,day,dayofweek */ @@ -150,24 +160,28 @@ static void timedate_set(void) rtc_write(0x04, timedate[6] | (rtc_read(0x04) & 0xf8)); /* dayofweek */ rtc_write(0x00, 0x00); /* 0.1 + 0.01 seconds */ } + return MENU_OK; } #endif -static void ff_rewind(void) +static Menu ff_rewind(void) { set_int("[FF/Rewind Step Size]", "s", &global_settings.ff_rewind, NULL, 1, 1, 999 ); + return MENU_OK; } -void settings_menu(void) +Menu settings_menu(void) { int m; + Menu result; + struct menu_items items[] = { { "Shuffle", shuffle }, { "MP3/M3U filter", mp3_filter }, { "Sort mode", sort_case }, { "Backlight Timer", backlight_timer }, - { "Contrast", contrast }, + { "Contrast", contrast }, { "Scroll speed", scroll_speed }, { "While Playing", wps_set }, #ifdef HAVE_CHARGE_CTRL @@ -183,7 +197,7 @@ void settings_menu(void) bool old_shuffle = global_settings.playlist_shuffle; m=menu_init( items, sizeof items / sizeof(struct menu_items) ); - menu_run(m); + result = menu_run(m); menu_exit(m); if (old_shuffle != global_settings.playlist_shuffle) @@ -197,4 +211,5 @@ void settings_menu(void) sort_playlist(); } } + return result; } diff --git a/apps/settings_menu.h b/apps/settings_menu.h index 00227c08fa..19cffaccae 100644 --- a/apps/settings_menu.h +++ b/apps/settings_menu.h @@ -19,6 +19,8 @@ #ifndef _SETTINGS_MENU_H #define _SETTINGS_MENU_H -void settings_menu(void); +#include "menu.h" + +Menu settings_menu(void); #endif diff --git a/apps/sound_menu.c b/apps/sound_menu.c index 63873ff0f8..24da3f5555 100644 --- a/apps/sound_menu.c +++ b/apps/sound_menu.c @@ -145,48 +145,56 @@ void set_sound(char* string, lcd_stop_scroll(); } -static void volume(void) +static Menu volume(void) { set_sound("Volume", &global_settings.volume, SOUND_VOLUME); + return MENU_OK; } -static void balance(void) +static Menu balance(void) { set_sound("Balance", &global_settings.balance, SOUND_BALANCE); + return MENU_OK; } -static void bass(void) +static Menu bass(void) { set_sound("Bass", &global_settings.bass, SOUND_BASS); + return MENU_OK; }; -static void treble(void) +static Menu treble(void) { set_sound("Treble", &global_settings.treble, SOUND_TREBLE); + return MENU_OK; } #ifdef HAVE_MAS3587F -static void loudness(void) +static Menu loudness(void) { set_sound("Loudness", &global_settings.loudness, SOUND_LOUDNESS); + return MENU_OK; }; -static void bass_boost(void) +static Menu bass_boost(void) { set_sound("Bass boost", &global_settings.bass_boost, SOUND_SUPERBASS); + return MENU_OK; }; -static void avc(void) +static Menu avc(void) { char* names[] = { "off", "2s ", "4s ", "8s " }; set_option("[AV decay time]", &global_settings.avc, names, 4 ); mpeg_sound_set(SOUND_AVC, global_settings.avc); + return MENU_OK; } #endif /* ARCHOS_RECORDER */ -void sound_menu(void) +Menu sound_menu(void) { int m; + Menu result; struct menu_items items[] = { { "Volume", volume }, { "Bass", bass }, @@ -200,6 +208,8 @@ void sound_menu(void) }; m=menu_init( items, sizeof items / sizeof(struct menu_items) ); - menu_run(m); + result = menu_run(m); menu_exit(m); + + return result; } diff --git a/apps/sound_menu.h b/apps/sound_menu.h index db40c120aa..27e9c5efa3 100644 --- a/apps/sound_menu.h +++ b/apps/sound_menu.h @@ -19,6 +19,8 @@ #ifndef _SOUND_MENU_H #define _SOUND_MENU_H -void sound_menu(void); +#include "menu.h" + +Menu sound_menu(void); #endif diff --git a/apps/tree.c b/apps/tree.c index 8718252ac5..0c4e26ab8e 100644 --- a/apps/tree.c +++ b/apps/tree.c @@ -640,13 +640,15 @@ bool dirbrowse(char *root) bool lastfilter = global_settings.mp3filter; bool lastsortcase = global_settings.sort_case; bool show_hidden_files = global_settings.show_hidden_files; + Menu result; lcd_stop_scroll(); - main_menu(); + result = main_menu(); /* do we need to rescan dir? */ - if ( lastfilter != global_settings.mp3filter || - lastsortcase != global_settings.sort_case || - show_hidden_files != global_settings.show_hidden_files) + if (result == MENU_REFRESH_DIR || + lastfilter != global_settings.mp3filter || + lastsortcase != global_settings.sort_case || + show_hidden_files != global_settings.show_hidden_files) lastdir[0] = 0; restore = true; break;