🚸 Fix TFT GLCD "Select from Media" glitch

This commit is contained in:
Scott Lahteine 2025-04-23 12:57:53 -05:00
parent 7ee745b2da
commit 3df75188f3
3 changed files with 27 additions and 21 deletions

View file

@ -1114,7 +1114,7 @@ void MarlinUI::init() {
#if MARLINUI_SCROLL_NAME
// If scrolling of long file names is enabled and we are in the sd card menu,
// cause a refresh to occur until all the text has scrolled into view.
if (currentScreen == menu_media && filename_scroll_max && !lcd_status_update_delay--) {
if (currentScreen == menu_media_filelist && filename_scroll_max && !lcd_status_update_delay--) {
lcd_status_update_delay = ++filename_scroll_pos >= filename_scroll_max ? 12 : 4; // Long delay at end and start
if (filename_scroll_pos > filename_scroll_max) filename_scroll_pos = 0;
refresh(LCDVIEW_REDRAW_NOW);

View file

@ -211,6 +211,7 @@ void menu_main();
void menu_move();
#if HAS_MEDIA
void menu_media_filelist();
void menu_media();
#endif

View file

@ -45,7 +45,7 @@ void lcd_sd_updir() {
void MarlinUI::reselect_last_file() {
if (sd_encoder_position == 0xFFFF) return;
goto_screen(menu_media, sd_encoder_position, sd_top_line, sd_items);
goto_screen(menu_media_filelist, sd_encoder_position, sd_top_line, sd_items);
sd_encoder_position = 0xFFFF;
defer_status_screen();
}
@ -101,6 +101,29 @@ class MenuItem_sdfolder : public MenuItem_sdbase {
}
};
#if HAS_MULTI_VOLUME
void menu_media_select() {
START_MENU();
BACK_ITEM_F(TERN1(BROWSE_MEDIA_ON_INSERT, screen_history_depth) ? GET_TEXT_F(MSG_MAIN_MENU) : GET_TEXT_F(MSG_BACK));
#if ENABLED(VOLUME_SD_ONBOARD)
ACTION_ITEM(MSG_SD_CARD, []{ card.changeMedia(&card.media_driver_sdcard); card.mount(); ui.goto_screen(menu_media_filelist); });
#endif
#if ENABLED(VOLUME_USB_FLASH_DRIVE)
ACTION_ITEM(MSG_USB_DISK, []{ card.changeMedia(&card.media_driver_usbFlash); card.mount(); ui.goto_screen(menu_media_filelist); });
#endif
END_MENU();
}
#endif
/**
* "Select From Media" menu item. Depending on single or multiple drives:
* - menu_media_filelist - List files on the current media
* - menu_media_select - Select one of the attached drives, then go to the file list
*/
void menu_media() {
ui.goto_screen(TERN(HAS_MULTI_VOLUME, menu_media_select, menu_media_filelist));
}
void menu_media_filelist() {
ui.encoder_direction_menus();
@ -113,7 +136,7 @@ void menu_media_filelist() {
START_MENU();
#if HAS_MULTI_VOLUME
ACTION_ITEM(MSG_BACK, []{ ui.goto_screen(menu_media); });
ACTION_ITEM(MSG_BACK, []{ ui.goto_screen(menu_media_select); });
#else
BACK_ITEM_F(TERN1(BROWSE_MEDIA_ON_INSERT, screen_history_depth) ? GET_TEXT_F(MSG_MAIN_MENU) : GET_TEXT_F(MSG_BACK));
#endif
@ -141,22 +164,4 @@ void menu_media_filelist() {
END_MENU();
}
#if HAS_MULTI_VOLUME
void menu_media_select() {
START_MENU();
BACK_ITEM_F(TERN1(BROWSE_MEDIA_ON_INSERT, screen_history_depth) ? GET_TEXT_F(MSG_MAIN_MENU) : GET_TEXT_F(MSG_BACK));
#if ENABLED(VOLUME_SD_ONBOARD)
ACTION_ITEM(MSG_SD_CARD, []{ card.changeMedia(&card.media_driver_sdcard); card.mount(); ui.goto_screen(menu_media_filelist); });
#endif
#if ENABLED(VOLUME_USB_FLASH_DRIVE)
ACTION_ITEM(MSG_USB_DISK, []{ card.changeMedia(&card.media_driver_usbFlash); card.mount(); ui.goto_screen(menu_media_filelist); });
#endif
END_MENU();
}
#endif
void menu_media() {
TERN(HAS_MULTI_VOLUME, menu_media_select, menu_media_filelist)();
}
#endif // HAS_MARLINUI_MENU && HAS_MEDIA