From 3b58ef14e5d8c30121f59a02c35aefcd54ffe810 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Wed, 2 Jun 2021 14:21:07 +0200 Subject: [PATCH] fix(btnmamatrix) fix focus event handling --- src/core/lv_group.c | 2 +- src/core/lv_obj.c | 1 + src/widgets/lv_btnmatrix.c | 23 +++++++++++++---------- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/core/lv_group.c b/src/core/lv_group.c index 2692b684c..5574e75c6 100644 --- a/src/core/lv_group.c +++ b/src/core/lv_group.c @@ -206,7 +206,7 @@ void lv_group_focus_obj(lv_obj_t * obj) if(g->frozen != 0) return; -// if(g->obj_focus != NULL && obj == *g->obj_focus) return; + if(g->obj_focus != NULL && obj == *g->obj_focus) return; /*On defocus edit mode must be leaved*/ lv_group_set_editing(g, false); diff --git a/src/core/lv_obj.c b/src/core/lv_obj.c index 00a425de4..296d733cc 100644 --- a/src/core/lv_obj.c +++ b/src/core/lv_obj.c @@ -763,6 +763,7 @@ static void lv_obj_set_state(lv_obj_t * obj, lv_state_t new_state) lv_obj_refresh_style(obj, LV_PART_ANY, LV_STYLE_PROP_ANY); } else if(cmp_res == _LV_STYLE_STATE_CMP_DIFF_DRAW_PAD) { + lv_obj_invalidate(obj); lv_obj_refresh_ext_draw_size(obj); } } diff --git a/src/widgets/lv_btnmatrix.c b/src/widgets/lv_btnmatrix.c index c33d7c0e4..1070cabc7 100644 --- a/src/widgets/lv_btnmatrix.c +++ b/src/widgets/lv_btnmatrix.c @@ -517,17 +517,20 @@ static void lv_btnmatrix_event(const lv_obj_class_t * class_p, lv_event_t * e) } bool editing = lv_group_get_editing(lv_obj_get_group(obj)); - if(indev_type == LV_INDEV_TYPE_KEYPAD|| (indev_type == LV_INDEV_TYPE_ENCODER&& editing)) { - uint32_t b = 0; - if(btnm->one_check) { - while(button_is_hidden(btnm->ctrl_bits[b]) || button_is_inactive(btnm->ctrl_bits[b]) || button_is_checked(btnm->ctrl_bits[b]) == false) b++; - } else { - while(button_is_hidden(btnm->ctrl_bits[b]) || button_is_inactive(btnm->ctrl_bits[b])) b++; - } + /*Focus the first button if there is not selected button*/ + if(btnm->btn_id_sel == LV_BTNMATRIX_BTN_NONE) { + if (indev_type == LV_INDEV_TYPE_KEYPAD || (indev_type == LV_INDEV_TYPE_ENCODER && editing)) { + uint32_t b = 0; + if(btnm->one_check) { + while(button_is_hidden(btnm->ctrl_bits[b]) || button_is_inactive(btnm->ctrl_bits[b]) || button_is_checked(btnm->ctrl_bits[b]) == false) b++; + } else { + while(button_is_hidden(btnm->ctrl_bits[b]) || button_is_inactive(btnm->ctrl_bits[b])) b++; + } - btnm->btn_id_sel = b; - } else { - btnm->btn_id_sel = LV_BTNMATRIX_BTN_NONE; + btnm->btn_id_sel = b; + } else { + btnm->btn_id_sel = LV_BTNMATRIX_BTN_NONE; + } } } else if(code == LV_EVENT_DEFOCUSED || code == LV_EVENT_LEAVE) {