Forbid LcdUpdateDisabler to call lcd_update()

The fixes a scenario where:

lcd_status_screen() calls lcd_commands() upon exiting
lcd_show_fullscreen_message_and_wait_P(_T(MSG_NOZZLE_CNG_READ_HELP));
and so not allowing the user to leave the screen since it will keep being rendered endlessly.

This change only affects lcd_show_fullscreen_message_and_wait_P
This commit is contained in:
Guðni Már Gilbert 2024-07-31 12:27:38 +00:00 committed by gudnimg
parent f96cc2f400
commit 25a11bb7d7
1 changed files with 4 additions and 4 deletions

View File

@ -111,18 +111,18 @@ extern void lcd_buttons_update(void);
//! When constructed (on stack), original state state of lcd_update_enabled is stored //! When constructed (on stack), original state state of lcd_update_enabled is stored
//! and LCD updates are disabled. //! and LCD updates are disabled.
//! When destroyed (gone out of scope), original state of LCD update is restored. //! When destroyed (gone out of scope), original state of LCD update is restored.
//! It has zero overhead compared to storing bool saved = lcd_update_enabled //! Do not call lcd_update_enable() to prevent calling lcd_update() in sensitive code.
//! and calling lcd_update_enable(false) and lcd_update_enable(saved). //! in certain scenarios it will cause recursion e.g. in the menus.
class LcdUpdateDisabler class LcdUpdateDisabler
{ {
public: public:
LcdUpdateDisabler(): m_updateEnabled(lcd_update_enabled) LcdUpdateDisabler(): m_updateEnabled(lcd_update_enabled)
{ {
lcd_update_enable(false); lcd_update_enabled = false;
} }
~LcdUpdateDisabler() ~LcdUpdateDisabler()
{ {
lcd_update_enable(m_updateEnabled); lcd_update_enabled = m_updateEnabled;
} }
private: private: