diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 92df0122..1f7d4641 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -9901,6 +9901,17 @@ if(0) #endif check_axes_activity(); mmu_loop(); + + // handle longpress + if(lcd_longpress_trigger) + { + // long press is not possible in modal mode, wait until ready + if (lcd_longpress_func && lcd_update_enabled) + { + lcd_longpress_func(); + lcd_longpress_trigger = 0; + } + } } void kill(const char *full_screen_message, unsigned char id) diff --git a/Firmware/lcd.cpp b/Firmware/lcd.cpp index c3f2921d..a52bdd3e 100644 --- a/Firmware/lcd.cpp +++ b/Firmware/lcd.cpp @@ -728,6 +728,8 @@ void lcd_update_enable(uint8_t enabled) } } +bool lcd_longpress_trigger = 0; + void lcd_buttons_update(void) { static uint8_t lcd_long_press_active = 0; @@ -749,9 +751,7 @@ void lcd_buttons_update(void) else if (longPressTimer.expired(LONG_PRESS_TIME)) { lcd_long_press_active = 1; - //long press is not possible in modal mode - if (lcd_longpress_func && lcd_update_enabled) - lcd_longpress_func(); + lcd_longpress_trigger = 1; } } } diff --git a/Firmware/lcd.h b/Firmware/lcd.h index 12b162e7..65bb9dc9 100644 --- a/Firmware/lcd.h +++ b/Firmware/lcd.h @@ -110,6 +110,7 @@ extern uint32_t lcd_next_update_millis; extern uint8_t lcd_status_update_delay; extern lcd_longpress_func_t lcd_longpress_func; +extern bool lcd_longpress_trigger; extern lcd_charsetup_func_t lcd_charsetup_func;