diff --git a/radio/src/thirdparty/libopenui/src/form.h b/radio/src/thirdparty/libopenui/src/form.h index 5faceea0c..88c2ff56f 100644 --- a/radio/src/thirdparty/libopenui/src/form.h +++ b/radio/src/thirdparty/libopenui/src/form.h @@ -32,6 +32,18 @@ class FormField: public Window public: FormField(Window * parent, const rect_t & rect, WindowFlags windowFlags = 0, LcdFlags textFlags = 0); + virtual void changeEnd(bool forceChanged = false) + { + if (changeHandler) { + changeHandler(); + } + } + + void setChangeHandler(std::function handler) + { + changeHandler = std::move(handler); + } + inline void setNextField(FormField *field) { next = field; @@ -104,6 +116,7 @@ class FormField: public Window FormField * previous = nullptr; bool editMode = false; bool enabled = true; + std::function changeHandler = nullptr; }; class FormGroup: public FormField diff --git a/radio/src/thirdparty/libopenui/src/keyboard_base.cpp b/radio/src/thirdparty/libopenui/src/keyboard_base.cpp index 414c0bd42..50bb07051 100644 --- a/radio/src/thirdparty/libopenui/src/keyboard_base.cpp +++ b/radio/src/thirdparty/libopenui/src/keyboard_base.cpp @@ -37,7 +37,6 @@ coord_t calcScrollOffsetForField(FormField *newField, Window *topWindow) bool Keyboard::attachKeyboard() { - TRACE("ATTACH KEYBOARD"); if (activeKeyboard) { if (activeKeyboard == this) return false; activeKeyboard->clearField(); diff --git a/radio/src/thirdparty/libopenui/src/keyboard_base.h b/radio/src/thirdparty/libopenui/src/keyboard_base.h index 5374b9d5c..cf0e42df4 100644 --- a/radio/src/thirdparty/libopenui/src/keyboard_base.h +++ b/radio/src/thirdparty/libopenui/src/keyboard_base.h @@ -43,6 +43,7 @@ class Keyboard: public FormWindow } if (field) { field->setEditMode(false); + field->changeEnd(); field = nullptr; } } diff --git a/radio/src/thirdparty/libopenui/src/textedit.h b/radio/src/thirdparty/libopenui/src/textedit.h index 32d8dc256..975f40e1a 100644 --- a/radio/src/thirdparty/libopenui/src/textedit.h +++ b/radio/src/thirdparty/libopenui/src/textedit.h @@ -42,11 +42,6 @@ class TextEdit : public FormField { } #endif - void setChangeHandler(std::function handler) - { - changeHandler = std::move(handler); - } - uint8_t getMaxLength() const { return length; @@ -73,11 +68,10 @@ class TextEdit : public FormField { uint8_t length; const char * extra_chars; uint8_t cursorPos = 0; - std::function changeHandler = nullptr; void trim(); - void changeEnd(bool forceChanged = false) + void changeEnd(bool forceChanged = false) override { cursorPos = 0; if (changed || forceChanged) {