diff --git a/Marlin/src/lcd/ultralcd.cpp b/Marlin/src/lcd/ultralcd.cpp index b0b4c15e1b..f52aec8e95 100644 --- a/Marlin/src/lcd/ultralcd.cpp +++ b/Marlin/src/lcd/ultralcd.cpp @@ -3743,7 +3743,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; @@ -4444,7 +4444,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; } diff --git a/Marlin/src/sd/cardreader.cpp b/Marlin/src/sd/cardreader.cpp index 663b788321..92954d8d7d 100644 --- a/Marlin/src/sd/cardreader.cpp +++ b/Marlin/src/sd/cardreader.cpp @@ -631,13 +631,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/src/sd/cardreader.h b/Marlin/src/sd/cardreader.h index 5d10e34a68..c8e542b75d 100644 --- a/Marlin/src/sd/cardreader.h +++ b/Marlin/src/sd/cardreader.h @@ -63,7 +63,7 @@ public: void ls(); void chdir(const char *relpath); - void updir(); + int8_t updir(); void setroot(); uint16_t get_num_Files();