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;