From 8d27a510a4702aefda756dea639a84613f3c679d Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 9 Oct 2020 17:03:30 +0200 Subject: [PATCH] Focus fixes --- .../libopenui/src/expansion_panel.h | 6 +-- radio/src/thirdparty/libopenui/src/form.cpp | 39 +++++++++---------- radio/src/thirdparty/libopenui/src/form.h | 4 +- 3 files changed, 24 insertions(+), 25 deletions(-) diff --git a/radio/src/thirdparty/libopenui/src/expansion_panel.h b/radio/src/thirdparty/libopenui/src/expansion_panel.h index 67286faee..4be4126d5 100644 --- a/radio/src/thirdparty/libopenui/src/expansion_panel.h +++ b/radio/src/thirdparty/libopenui/src/expansion_panel.h @@ -74,10 +74,10 @@ class ExpansionPanel: public FormGroup { void setFocus(uint8_t flag) override { - if (!isOpen) - header->setFocus(flag); - else + if (isOpen) FormGroup::setFocus(flag); + else + header->setFocus(flag); } FormGroup * body = nullptr; diff --git a/radio/src/thirdparty/libopenui/src/form.cpp b/radio/src/thirdparty/libopenui/src/form.cpp index 88b8cd2bc..47d0e7e46 100644 --- a/radio/src/thirdparty/libopenui/src/form.cpp +++ b/radio/src/thirdparty/libopenui/src/form.cpp @@ -63,18 +63,22 @@ void FormField::onEvent(event_t event) void FormField::setFocus(uint8_t flag) { - if (!enabled) { - if (flag == SET_FOCUS_BACKWARD) { - if (previous) - previous->setFocus(flag); - } - else { - if (next) - next->setFocus(flag); - } + if (enabled) { + Window::setFocus(flag); } else { - Window::setFocus(flag); + clearFocus(); + focusWindow = this; + if (flag == SET_FOCUS_BACKWARD) { + if (previous) { + previous->setFocus(flag); + } + } + else { + if (next) { + next->setFocus(flag); + } + } } } @@ -133,15 +137,6 @@ void FormGroup::setFocus(uint8_t flag) if (windowFlags & FORM_FORWARD_FOCUS) { switch (flag) { - case SET_FOCUS_FIRST: - if (first) { - first->setFocus(SET_FOCUS_FIRST); - } - else if (next) { - next->setFocus(SET_FOCUS_FIRST); - } - break; - case SET_FOCUS_BACKWARD: if (focusWindow->isChild(first)) { if (previous == this) { @@ -163,8 +158,12 @@ void FormGroup::setFocus(uint8_t flag) } break; + case SET_FOCUS_FIRST: + clearFocus(); + // no break; + case SET_FOCUS_FORWARD: - if (focusWindow->isChild(this)) { + if (focusWindow && focusWindow->isChild(this)) { if (next == this) { first->setFocus(SET_FOCUS_FORWARD); } diff --git a/radio/src/thirdparty/libopenui/src/form.h b/radio/src/thirdparty/libopenui/src/form.h index 2f4a7a43b..9f3eff28b 100644 --- a/radio/src/thirdparty/libopenui/src/form.h +++ b/radio/src/thirdparty/libopenui/src/form.h @@ -62,9 +62,9 @@ class FormField: public Window { editMode = newEditMode; } - void enable(bool enabled = true) + void enable(bool value = true) { - this->enabled = enabled; + enabled = value; invalidate(); }