diff --git a/radio/src/thirdparty/libopenui/src/button.cpp b/radio/src/thirdparty/libopenui/src/button.cpp index 6862a9b7e..04efafa31 100644 --- a/radio/src/thirdparty/libopenui/src/button.cpp +++ b/radio/src/thirdparty/libopenui/src/button.cpp @@ -37,7 +37,9 @@ void Button::onEvent(event_t event) TRACE_WINDOWS("%s received event 0x%X", getWindowDebugString("Button").c_str(), event); if (event == EVT_KEY_BREAK(KEY_ENTER)) { - onPress(); + if (enabled) { + onPress(); + } } else { FormField::onEvent(event); diff --git a/radio/src/thirdparty/libopenui/src/modal_window.h b/radio/src/thirdparty/libopenui/src/modal_window.h index b82c0faf3..2ec3e3629 100644 --- a/radio/src/thirdparty/libopenui/src/modal_window.h +++ b/radio/src/thirdparty/libopenui/src/modal_window.h @@ -36,6 +36,9 @@ class ModalWindow: public Window void deleteLater() { + if (deleted) + return; + if (previousFocus) { previousFocus->setFocus(SET_FOCUS_DEFAULT); } diff --git a/radio/src/thirdparty/libopenui/src/window.cpp b/radio/src/thirdparty/libopenui/src/window.cpp index a79b3c1c4..438efc141 100644 --- a/radio/src/thirdparty/libopenui/src/window.cpp +++ b/radio/src/thirdparty/libopenui/src/window.cpp @@ -69,6 +69,9 @@ void Window::detach() void Window::deleteLater(bool detach) { + if (deleted) + return; + TRACE_WINDOWS("Delete %p %s", this, getWindowDebugString().c_str()); if (static_cast(focusWindow) == static_cast(this)) { @@ -85,6 +88,8 @@ void Window::deleteLater(bool detach) } trash.push_back(this); + + deleted = true; } void Window::clear() diff --git a/radio/src/thirdparty/libopenui/src/window.h b/radio/src/thirdparty/libopenui/src/window.h index a261677aa..18b131828 100644 --- a/radio/src/thirdparty/libopenui/src/window.h +++ b/radio/src/thirdparty/libopenui/src/window.h @@ -354,6 +354,7 @@ class Window { coord_t scrollPositionY = 0; WindowFlags windowFlags; LcdFlags textFlags; + bool deleted = false; static Window * focusWindow; static Window * slidingWindow;