From 13ea43cc8d4ad00828f8e24d6f8c6968670ccf35 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 27 Nov 2016 23:51:10 -0600 Subject: [PATCH 1/2] Only exit menu handler when the screen changes --- Marlin/ultralcd.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp index d5067140fd..2364e5fa9d 100755 --- a/Marlin/ultralcd.cpp +++ b/Marlin/ultralcd.cpp @@ -258,6 +258,7 @@ uint8_t lcdDrawUpdate = LCDVIEW_CLEAR_CALL_REDRAW; // Set when the LCD needs to #define START_MENU() \ START_SCREEN_OR_MENU(1); \ + screen_changed = false; \ NOMORE(encoderTopLine, encoderLine); \ if (encoderLine >= encoderTopLine + LCD_HEIGHT - TALL_FONT_CORRECTION) { \ encoderTopLine = encoderLine - (LCD_HEIGHT - TALL_FONT_CORRECTION - 1); \ @@ -296,7 +297,7 @@ uint8_t lcdDrawUpdate = LCDVIEW_CLEAR_CALL_REDRAW; // Set when the LCD needs to #define _MENU_ITEM_PART_2(TYPE, ...) \ menu_action_ ## TYPE(__VA_ARGS__); \ - return; \ + if (screen_changed) return; \ } \ } \ ++_thisItemNr @@ -383,6 +384,7 @@ uint8_t lcdDrawUpdate = LCDVIEW_CLEAR_CALL_REDRAW; // Set when the LCD needs to menuPosition screen_history[10]; uint8_t screen_history_depth = 0; + bool screen_changed; // LCD and menu clicks bool lcd_clicked, wait_for_unclick, defer_return_to_status; @@ -410,6 +412,7 @@ uint8_t lcdDrawUpdate = LCDVIEW_CLEAR_CALL_REDRAW; // Set when the LCD needs to lcd_set_custom_characters(screen == lcd_status_screen); #endif lcdDrawUpdate = LCDVIEW_CALL_REDRAW_NEXT; + screen_changed = true; } } From c70a06daf1b2f2ef560ab674da0157da425c3983 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 27 Nov 2016 23:51:26 -0600 Subject: [PATCH 2/2] lcd_save_previous_menu => lcd_save_previous_screen --- Marlin/ultralcd.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp index 2364e5fa9d..6195f464dc 100755 --- a/Marlin/ultralcd.cpp +++ b/Marlin/ultralcd.cpp @@ -418,7 +418,7 @@ uint8_t lcdDrawUpdate = LCDVIEW_CLEAR_CALL_REDRAW; // Set when the LCD needs to void lcd_return_to_status() { lcd_goto_screen(lcd_status_screen); } - inline void lcd_save_previous_menu() { + void lcd_save_previous_screen() { if (screen_history_depth < COUNT(screen_history)) { screen_history[screen_history_depth].menu_function = currentScreen; screen_history[screen_history_depth].encoder_position = encoderPosition; @@ -2343,7 +2343,7 @@ void kill_screen(const char* lcd_msg) { void menu_edit_ ## _name () { _menu_edit_ ## _name(); } \ void menu_edit_callback_ ## _name () { if (_menu_edit_ ## _name ()) (*callbackFunc)(); } \ void _menu_action_setting_edit_ ## _name (const char* pstr, _type* ptr, _type minValue, _type maxValue) { \ - lcd_save_previous_menu(); \ + lcd_save_previous_screen(); \ \ lcdDrawUpdate = LCDVIEW_CLEAR_CALL_REDRAW; \ \ @@ -2434,7 +2434,7 @@ void kill_screen(const char* lcd_msg) { * */ void _menu_action_back() { lcd_goto_previous_menu(); } - void menu_action_submenu(screenFunc_t func) { lcd_save_previous_menu(); lcd_goto_screen(func); } + void menu_action_submenu(screenFunc_t func) { lcd_save_previous_screen(); lcd_goto_screen(func); } void menu_action_gcode(const char* pgcode) { enqueue_and_echo_commands_P(pgcode); } void menu_action_function(screenFunc_t func) { (*func)(); }