From c37bc9147594049df23c16805c3feeb2f133769d Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Fri, 11 Jun 2021 12:54:02 +0200 Subject: [PATCH] Unregister LUA widgets when the factory is destoyed Resolves #183 --- radio/src/gui/colorlcd/widget.cpp | 6 ++++++ radio/src/gui/colorlcd/widget.h | 1 + radio/src/lua/widgets.cpp | 5 +++++ 3 files changed, 12 insertions(+) diff --git a/radio/src/gui/colorlcd/widget.cpp b/radio/src/gui/colorlcd/widget.cpp index b6e3afb9c..350762fd8 100644 --- a/radio/src/gui/colorlcd/widget.cpp +++ b/radio/src/gui/colorlcd/widget.cpp @@ -196,6 +196,12 @@ void registerWidget(const WidgetFactory * factory) getRegisteredWidgets().push_back(factory); } +void unregisterWidget(const WidgetFactory * factory) +{ + TRACE("unregister widget %s", factory->getName()); + getRegisteredWidgets().remove(factory); +} + const WidgetFactory * getWidgetFactory(const char * name) { auto it = getRegisteredWidgets().cbegin(); diff --git a/radio/src/gui/colorlcd/widget.h b/radio/src/gui/colorlcd/widget.h index 1656af236..1b2a56c9f 100644 --- a/radio/src/gui/colorlcd/widget.h +++ b/radio/src/gui/colorlcd/widget.h @@ -114,6 +114,7 @@ class Widget : public Button }; void registerWidget(const WidgetFactory * factory); +void unregisterWidget(const WidgetFactory * factory); class WidgetFactory { diff --git a/radio/src/lua/widgets.cpp b/radio/src/lua/widgets.cpp index 1ffe6d182..38cfb596c 100644 --- a/radio/src/lua/widgets.cpp +++ b/radio/src/lua/widgets.cpp @@ -225,6 +225,11 @@ class LuaWidgetFactory: public WidgetFactory { } + ~LuaWidgetFactory() + { + unregisterWidget(this); + } + Widget * create(FormGroup * parent, const rect_t & rect, Widget::PersistentData * persistentData, bool init=true) const override { if (lsWidgets == 0) return 0;