From 7ab53f757f7f50ed8811dde2c9697bb2d092a6cf Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Mon, 8 Aug 2022 11:13:21 +0200 Subject: [PATCH] window: clear lvobj before deleting it --- .../src/thirdparty/libopenui/src/keyboard_base.cpp | 13 ++++++++++--- radio/src/thirdparty/libopenui/src/keyboard_base.h | 1 + radio/src/thirdparty/libopenui/src/window.cpp | 3 ++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/radio/src/thirdparty/libopenui/src/keyboard_base.cpp b/radio/src/thirdparty/libopenui/src/keyboard_base.cpp index 3017c3208..38a2c2f0a 100644 --- a/radio/src/thirdparty/libopenui/src/keyboard_base.cpp +++ b/radio/src/thirdparty/libopenui/src/keyboard_base.cpp @@ -104,13 +104,19 @@ void Keyboard::clearField() if (field) { // restore field's group auto obj = field->getLvObj(); - lv_obj_remove_event_cb(obj, field_focus_leave); - lv_group_t* g = (lv_group_t*)lv_obj_get_group(obj); - if (g) _assign_lv_group(g); + if (obj) { + lv_obj_remove_event_cb(obj, field_focus_leave); + } field->setEditMode(false); field->changeEnd(); field = nullptr; + + if (fieldGroup) { + _assign_lv_group(fieldGroup); + lv_group_set_editing(fieldGroup, false); + fieldGroup = nullptr; + } } } @@ -165,6 +171,7 @@ void Keyboard::setField(FormField* newField) _assign_lv_group(group); field = newField; + fieldGroup = (lv_group_t*)lv_obj_get_group(obj); } } } diff --git a/radio/src/thirdparty/libopenui/src/keyboard_base.h b/radio/src/thirdparty/libopenui/src/keyboard_base.h index 8a599dc45..c67689106 100644 --- a/radio/src/thirdparty/libopenui/src/keyboard_base.h +++ b/radio/src/thirdparty/libopenui/src/keyboard_base.h @@ -40,6 +40,7 @@ class Keyboard : public Window FormField* field = nullptr; Window* fieldContainer = nullptr; + lv_group_t* fieldGroup = nullptr; lv_coord_t scroll_pos = 0; void setField(FormField* newField); diff --git a/radio/src/thirdparty/libopenui/src/window.cpp b/radio/src/thirdparty/libopenui/src/window.cpp index 74d8e5b6e..119dff4d3 100644 --- a/radio/src/thirdparty/libopenui/src/window.cpp +++ b/radio/src/thirdparty/libopenui/src/window.cpp @@ -328,8 +328,9 @@ void Window::deleteLater(bool detach, bool trash) deleteChildren(); if (lvobj != nullptr) { - lv_obj_del(lvobj); + auto obj = lvobj; lvobj = nullptr; + lv_obj_del(obj); } }