From 303bb7e3814f66daad94c0a26042b2650d8ed6fe Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Wed, 23 Oct 2019 14:38:37 +0200 Subject: [PATCH] Code hardening --- radio/src/thirdparty/libopenui/src/form.cpp | 31 +++++++++++++++------ 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/radio/src/thirdparty/libopenui/src/form.cpp b/radio/src/thirdparty/libopenui/src/form.cpp index 72c36662d..c859a57e0 100644 --- a/radio/src/thirdparty/libopenui/src/form.cpp +++ b/radio/src/thirdparty/libopenui/src/form.cpp @@ -97,22 +97,35 @@ void FormGroup::addField(FormField * field) void FormGroup::setFocus(uint8_t flag) { + TRACE_WINDOWS("FormGroup::setFocus(%d)", flag); + if (windowFlags & FORM_FORWARD_FOCUS) { switch (flag) { case SET_FOCUS_FIRST: - first->setFocus(SET_FOCUS_FIRST); + if (first) + first->setFocus(SET_FOCUS_FIRST); break; case SET_FOCUS_BACKWARD: - if (focusWindow == first) - previous->setFocus(SET_FOCUS_BACKWARD); - else - last->setFocus(SET_FOCUS_BACKWARD); + if (focusWindow == first) { + if (previous == this) + last->setFocus(SET_FOCUS_BACKWARD); + else if (previous) + previous->setFocus(SET_FOCUS_BACKWARD); + } + else { + if (last) + last->setFocus(SET_FOCUS_BACKWARD); + } break; default: - if (focusWindow == previous) - first->setFocus(); - else - next->setFocus(); + if (focusWindow == previous) { + if (first) + first->setFocus(); + } + else { + if (next) + next->setFocus(); + } break; } }