From 385d999a4a8164fcde6ae05f6a5daa5d5c209dd3 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Fri, 14 Jul 2023 21:04:12 +0200 Subject: [PATCH] fix(imgbtn): support LV_OBJ_FLAG_CHECKABLE fixes #4373 --- src/core/lv_obj.c | 4 ++-- src/extra/widgets/imgbtn/lv_imgbtn.c | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/core/lv_obj.c b/src/core/lv_obj.c index 1c5bfec6e..209ef8100 100644 --- a/src/core/lv_obj.c +++ b/src/core/lv_obj.c @@ -728,9 +728,9 @@ static void lv_obj_event(const lv_obj_class_t * class_p, lv_event_t * e) } else if(code == LV_EVENT_RELEASED) { lv_obj_clear_state(obj, LV_STATE_PRESSED); - void * param = lv_event_get_param(e); + lv_indev_t * indev = lv_event_get_indev(e); /*Go the checked state if enabled*/ - if(lv_indev_get_scroll_obj(param) == NULL && lv_obj_has_flag(obj, LV_OBJ_FLAG_CHECKABLE)) { + if(lv_indev_get_scroll_obj(indev) == NULL && lv_obj_has_flag(obj, LV_OBJ_FLAG_CHECKABLE)) { if(!(lv_obj_get_state(obj) & LV_STATE_CHECKED)) lv_obj_add_state(obj, LV_STATE_CHECKED); else lv_obj_clear_state(obj, LV_STATE_CHECKED); diff --git a/src/extra/widgets/imgbtn/lv_imgbtn.c b/src/extra/widgets/imgbtn/lv_imgbtn.c index 00c3011ca..67cff7cf4 100644 --- a/src/extra/widgets/imgbtn/lv_imgbtn.c +++ b/src/extra/widgets/imgbtn/lv_imgbtn.c @@ -205,6 +205,14 @@ static void lv_imgbtn_event(const lv_obj_class_t * class_p, lv_event_t * e) p->x = LV_MAX(p->x, header.w); } } + /*Sent when the widget is checked due to LV_OBJ_FLAG_CHECKABLE */ + else if(code == LV_EVENT_VALUE_CHANGED) { + if(lv_obj_has_state(obj, LV_STATE_CHECKED)) { + lv_imgbtn_set_state(obj, LV_IMGBTN_STATE_CHECKED_RELEASED); + } else { + lv_imgbtn_set_state(obj, LV_IMGBTN_STATE_RELEASED); + } + } } static void draw_main(lv_event_t * e)