diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp
index e34d21b2464ff49eaf8088d6a3747ee76759ab59..b68a4e5e102831a6eb6a490d665696c9b6aad3ad 100644
--- a/Marlin/ultralcd.cpp
+++ b/Marlin/ultralcd.cpp
@@ -199,19 +199,25 @@ static void lcd_status_screen();
* menu_action_setting_edit_int3(PSTR(MSG_SPEED), &feedrate_multiplier, 10, 999)
*
*/
- #define MENU_ITEM(type, label, args...) do { \
+ #define _MENU_ITEM_PART_1(type, label, args...) \
if (_menuItemNr == _lineNr) { \
itemSelected = encoderLine == _menuItemNr; \
if (lcdDrawUpdate) \
lcd_implementation_drawmenu_ ## type(itemSelected, _drawLineNr, PSTR(label), ## args); \
if (wasClicked && itemSelected) { \
- lcd_quick_feedback(); \
+ lcd_quick_feedback()
+
+ #define _MENU_ITEM_PART_2(type, args...) \
menu_action_ ## type(args); \
return; \
} \
} \
- _menuItemNr++; \
- } while(0)
+ _menuItemNr++
+
+ #define MENU_ITEM(type, label, args...) do { \
+ _MENU_ITEM_PART_1(type, label, ## args); \
+ _MENU_ITEM_PART_2(type, ## args); \
+ } while(0)
#if ENABLED(ENCODER_RATE_MULTIPLIER)
@@ -221,20 +227,12 @@ static void lcd_status_screen();
* MENU_MULTIPLIER_ITEM generates drawing and handling code for a multiplier menu item
*/
#define MENU_MULTIPLIER_ITEM(type, label, args...) do { \
- if (_menuItemNr == _lineNr) { \
- itemSelected = encoderLine == _menuItemNr; \
- if (lcdDrawUpdate) \
- lcd_implementation_drawmenu_ ## type(itemSelected, _drawLineNr, PSTR(label), ## args); \
- if (wasClicked && itemSelected) { \
- lcd_quick_feedback(); \
- encoderRateMultiplierEnabled = true; \
- lastEncoderMovementMillis = 0; \
- menu_action_ ## type(args); \
- return; \
- } \
- } \
- _menuItemNr++; \
- } while(0)
+ _MENU_ITEM_PART_1(type, label, ## args); \
+ encoderRateMultiplierEnabled = true; \
+ lastEncoderMovementMillis = 0; \
+ _MENU_ITEM_PART_2(type, ## args); \
+ } while(0)
+
#endif //ENCODER_RATE_MULTIPLIER
#define MENU_ITEM_DUMMY() do { _menuItemNr++; } while(0)