From 4dafa1001766f27f8d4fd0022c6de4b3e067c95f Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Tue, 27 Oct 2020 13:49:47 +0100 Subject: [PATCH] fix messed up function introduced in 6e9714c5 --- CHANGELOG.md | 1 + src/lv_widgets/lv_btnmatrix.c | 22 ++++++++++------------ src/lv_widgets/lv_btnmatrix.h | 2 +- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d7ac5c56d..307af71a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## v7.7.1 (04.11.2020) ### Bugfixes +- Respect btnmatrix's `one_check` in `lv_btnmatrix_set_btn_ctrl` ## v7.7.0 (20.10.2020) diff --git a/src/lv_widgets/lv_btnmatrix.c b/src/lv_widgets/lv_btnmatrix.c index b87e129d6..c781bcf35 100644 --- a/src/lv_widgets/lv_btnmatrix.c +++ b/src/lv_widgets/lv_btnmatrix.c @@ -272,22 +272,14 @@ void lv_btnmatrix_set_map(lv_obj_t * btnm, const char * map[]) * An element of the map should look like e.g.: * `ctrl_map[0] = width | LV_BTNMATRIX_CTRL_NO_REPEAT | LV_BTNMATRIX_CTRL_TGL_ENABLE` */ -void lv_btnmatrix_set_btn_ctrl(lv_obj_t * btnm, uint16_t btn_id, lv_btnmatrix_ctrl_t ctrl) +void lv_btnmatrix_set_ctrl_map(lv_obj_t * btnm, const lv_btnmatrix_ctrl_t ctrl_map[]) { LV_ASSERT_OBJ(btnm, LV_OBJX_NAME); lv_btnmatrix_ext_t * ext = lv_obj_get_ext_attr(btnm); + _lv_memcpy(ext->ctrl_bits, ctrl_map, sizeof(lv_btnmatrix_ctrl_t) * ext->btn_cnt); - if(btn_id >= ext->btn_cnt) return; - - /*Uncheck all buttons if required*/ - if(ext->one_check && (ctrl & LV_BTNMATRIX_CTRL_CHECK_STATE)) { - lv_btnmatrix_clear_btn_ctrl_all(btnm, LV_BTNMATRIX_CTRL_CHECK_STATE); - ext->btn_id_act = btn_id; - } - - ext->ctrl_bits[btn_id] |= ctrl; - invalidate_button_area(btnm, btn_id); + lv_btnmatrix_set_map(btnm, ext->map_p); } /** @@ -330,7 +322,7 @@ void lv_btnmatrix_set_recolor(const lv_obj_t * btnm, bool en) * @param btnm pointer to button matrix object * @param btn_id 0 based index of the button to modify. (Not counting new lines) */ -void lv_btnmatrix_set_btn_ctrl(const lv_obj_t * btnm, uint16_t btn_id, lv_btnmatrix_ctrl_t ctrl) +void lv_btnmatrix_set_btn_ctrl(lv_obj_t * btnm, uint16_t btn_id, lv_btnmatrix_ctrl_t ctrl) { LV_ASSERT_OBJ(btnm, LV_OBJX_NAME); @@ -338,6 +330,12 @@ void lv_btnmatrix_set_btn_ctrl(const lv_obj_t * btnm, uint16_t btn_id, lv_btnmat if(btn_id >= ext->btn_cnt) return; + /*Uncheck all buttons if required*/ + if(ext->one_check && (ctrl & LV_BTNMATRIX_CTRL_CHECK_STATE)) { + lv_btnmatrix_clear_btn_ctrl_all(btnm, LV_BTNMATRIX_CTRL_CHECK_STATE); + ext->btn_id_act = btn_id; + } + ext->ctrl_bits[btn_id] |= ctrl; invalidate_button_area(btnm, btn_id); } diff --git a/src/lv_widgets/lv_btnmatrix.h b/src/lv_widgets/lv_btnmatrix.h index c30a959f0..4fa0f849c 100644 --- a/src/lv_widgets/lv_btnmatrix.h +++ b/src/lv_widgets/lv_btnmatrix.h @@ -127,7 +127,7 @@ void lv_btnmatrix_set_recolor(const lv_obj_t * btnm, bool en); * @param btnm pointer to button matrix object * @param btn_id 0 based index of the button to modify. (Not counting new lines) */ -void lv_btnmatrix_set_btn_ctrl(const lv_obj_t * btnm, uint16_t btn_id, lv_btnmatrix_ctrl_t ctrl); +void lv_btnmatrix_set_btn_ctrl(lv_obj_t * btnm, uint16_t btn_id, lv_btnmatrix_ctrl_t ctrl); /** * Clear the attributes of a button of the button matrix