diff --git a/Marlin/cardreader.cpp b/Marlin/cardreader.cpp index 40a5d5d42..c1b42e891 100644 --- a/Marlin/cardreader.cpp +++ b/Marlin/cardreader.cpp @@ -626,13 +626,14 @@ void CardReader::chdir(const char * relpath) { } } -void CardReader::updir() { - if (workDirDepth > 0) { // At least 1 dir has been saved - workDir = --workDirDepth ? workDirParents[workDirDepth] : root; // Use parent, or root if none +int8_t CardReader::updir() { + if (workDirDepth > 0) { // At least 1 dir has been saved + workDir = --workDirDepth ? workDirParents[workDirDepth - 1] : root; // Use parent, or root if none #if ENABLED(SDCARD_SORT_ALPHA) presort(); #endif } + return workDirDepth; } #if ENABLED(SDCARD_SORT_ALPHA) diff --git a/Marlin/cardreader.h b/Marlin/cardreader.h index 5bdfa7f47..5bcdd2b6b 100644 --- a/Marlin/cardreader.h +++ b/Marlin/cardreader.h @@ -67,7 +67,7 @@ public: void ls(); void chdir(const char *relpath); - void updir(); + int8_t updir(); void setroot(); uint16_t get_num_Files(); diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp index d3aafc961..187e4bb24 100644 --- a/Marlin/ultralcd.cpp +++ b/Marlin/ultralcd.cpp @@ -3758,7 +3758,7 @@ void kill_screen(const char* lcd_msg) { #endif void lcd_sd_updir() { - card.updir(); + encoderPosition = card.updir() ? ENCODER_STEPS_PER_MENU_ITEM : 0; encoderTopLine = 0; screen_changed = true; lcdDrawUpdate = LCDVIEW_CLEAR_CALL_REDRAW; @@ -4457,7 +4457,8 @@ void kill_screen(const char* lcd_msg) { void menu_action_sddirectory(const char* filename, char* longFilename) { UNUSED(longFilename); card.chdir(filename); - encoderPosition = 0; + encoderTopLine = 0; + encoderPosition = 2 * ENCODER_STEPS_PER_MENU_ITEM; screen_changed = true; lcdDrawUpdate = LCDVIEW_CLEAR_CALL_REDRAW; }