From ab7663930183769b1ac958f69c7a94b9bdf31f00 Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Sun, 20 Feb 2022 09:12:10 +0100 Subject: [PATCH] Fix standalone LUA --- radio/src/gui/colorlcd/radio_tools.cpp | 3 ++- radio/src/gui/colorlcd/standalone_lua.cpp | 24 +++++++++++++++++++---- radio/src/gui/colorlcd/standalone_lua.h | 2 ++ 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/radio/src/gui/colorlcd/radio_tools.cpp b/radio/src/gui/colorlcd/radio_tools.cpp index 452806fb4..b5b72dddd 100644 --- a/radio/src/gui/colorlcd/radio_tools.cpp +++ b/radio/src/gui/colorlcd/radio_tools.cpp @@ -136,7 +136,8 @@ void buildLuaUi(std::vector luaScripts, FormWindow *window, FormGridL f_chdir(toolPath); luaExec(luaScript.path.c_str()); - StandaloneLuaWindow::instance()->attach(window); + auto lua_win = StandaloneLuaWindow::instance(); + lua_win->attach(window); return 0; }, diff --git a/radio/src/gui/colorlcd/standalone_lua.cpp b/radio/src/gui/colorlcd/standalone_lua.cpp index c8e2efc21..1ba6913f2 100644 --- a/radio/src/gui/colorlcd/standalone_lua.cpp +++ b/radio/src/gui/colorlcd/standalone_lua.cpp @@ -76,8 +76,18 @@ StandaloneLuaWindow* StandaloneLuaWindow::instance() void StandaloneLuaWindow::attach(Window* newParent) { - Window::attach(newParent->getFullScreenWindow()); - Layer::push(this); + if (!prevScreen) { + + // backup previous screen + prevScreen = lv_scr_act(); + + Window::attach(newParent->getFullScreenWindow()); + + // and load new one + lv_scr_load(lvobj); + + Layer::push(this); + } setFocus(); } @@ -90,9 +100,15 @@ void StandaloneLuaWindow::deleteLater(bool detach, bool /*trash*/) focusWindow = nullptr; } + if (prevScreen) { + lv_scr_load(prevScreen); + prevScreen = nullptr; + } + // detach from parent - if (detach) + if (detach) { this->detach(); + } if (closeHandler) { closeHandler(); @@ -221,4 +237,4 @@ bool StandaloneLuaWindow::displayPopup(event_t event, uint8_t type, const char* } return false; -} \ No newline at end of file +} diff --git a/radio/src/gui/colorlcd/standalone_lua.h b/radio/src/gui/colorlcd/standalone_lua.h index de815f723..56e5dde20 100644 --- a/radio/src/gui/colorlcd/standalone_lua.h +++ b/radio/src/gui/colorlcd/standalone_lua.h @@ -64,6 +64,8 @@ public: const char* info, bool& result); protected: + lv_obj_t* prevScreen = nullptr; + // GFX BitmapBuffer lcdBuffer;