From 16b15b843dd5a0c87faa24a1a7899daf0abdf559 Mon Sep 17 00:00:00 2001 From: jianglianfang <132983613+jianglianfang@users.noreply.github.com> Date: Tue, 26 Dec 2023 10:36:57 +0800 Subject: [PATCH] lvgl:add lv_display_remove_event_cb_with_user_data (#4998) Signed-off-by: jianglianfang --- src/core/lv_obj_event.c | 19 +++++++++++++++++++ src/core/lv_obj_event.h | 9 +++++++++ src/display/lv_display.c | 19 +++++++++++++++++++ src/display/lv_display.h | 9 +++++++++ src/indev/lv_indev.c | 19 +++++++++++++++++++ src/indev/lv_indev.h | 9 +++++++++ 6 files changed, 84 insertions(+) diff --git a/src/core/lv_obj_event.c b/src/core/lv_obj_event.c index 4305e4ca8..bafcdcf3c 100644 --- a/src/core/lv_obj_event.c +++ b/src/core/lv_obj_event.c @@ -139,6 +139,25 @@ bool lv_obj_remove_event_cb(lv_obj_t * obj, lv_event_cb_t event_cb) return false; } +uint32_t lv_obj_remove_event_cb_with_user_data(lv_obj_t * obj, lv_event_cb_t event_cb, void * user_data) +{ + LV_ASSERT_NULL(obj); + + uint32_t event_cnt = lv_obj_get_event_count(obj); + uint32_t removed_count = 0; + int32_t i; + + for(i = event_cnt - 1; i >= 0; i--) { + lv_event_dsc_t * dsc = lv_obj_get_event_dsc(obj, i); + if(dsc && dsc->cb == event_cb && dsc->user_data == user_data) { + lv_obj_remove_event(obj, i); + removed_count ++; + } + } + + return removed_count; +} + lv_obj_t * lv_event_get_current_target_obj(lv_event_t * e) { return lv_event_get_current_target(e); diff --git a/src/core/lv_obj_event.h b/src/core/lv_obj_event.h index 9d8dbd249..542fab672 100644 --- a/src/core/lv_obj_event.h +++ b/src/core/lv_obj_event.h @@ -113,6 +113,15 @@ bool lv_obj_remove_event(struct _lv_obj_t * obj, uint32_t index); bool lv_obj_remove_event_cb(struct _lv_obj_t * obj, lv_event_cb_t event_cb); +/** + * Remove an event_cb with user_data + * @param obj pointer to a obj + * @param event_cb the event_cb of the event to remove + * @param user_data user_data + * @return the count of the event removed + */ +uint32_t lv_obj_remove_event_cb_with_user_data(struct _lv_obj_t * obj, lv_event_cb_t event_cb, void * user_data); + /** * Get the input device passed as parameter to indev related events. * @param e pointer to an event diff --git a/src/display/lv_display.c b/src/display/lv_display.c index 71e9637fd..9b9aeae29 100644 --- a/src/display/lv_display.c +++ b/src/display/lv_display.c @@ -709,6 +709,25 @@ bool lv_display_delete_event(lv_display_t * disp, uint32_t index) return lv_event_remove(&disp->event_list, index); } +uint32_t lv_display_remove_event_cb_with_user_data(lv_display_t * disp, lv_event_cb_t event_cb, void * user_data) +{ + LV_ASSERT_NULL(disp); + + uint32_t event_cnt = lv_display_get_event_count(disp); + uint32_t removed_count = 0; + int32_t i; + + for(i = event_cnt - 1; i >= 0; i--) { + lv_event_dsc_t * dsc = lv_display_get_event_dsc(disp, i); + if(dsc && dsc->cb == event_cb && dsc->user_data == user_data) { + lv_display_delete_event(disp, i); + removed_count ++; + } + } + + return removed_count; +} + lv_result_t lv_display_send_event(lv_display_t * disp, lv_event_code_t code, void * param) { diff --git a/src/display/lv_display.h b/src/display/lv_display.h index 78fc559b3..2f94572f9 100644 --- a/src/display/lv_display.h +++ b/src/display/lv_display.h @@ -452,6 +452,15 @@ lv_event_dsc_t * lv_display_get_event_dsc(lv_display_t * disp, uint32_t index); */ bool lv_display_delete_event(lv_display_t * disp, uint32_t index); +/** + * Remove an event_cb with user_data + * @param disp pointer to a display + * @param event_cb the event_cb of the event to remove + * @param user_data user_data + * @return the count of the event removed + */ +uint32_t lv_display_remove_event_cb_with_user_data(lv_display_t * disp, lv_event_cb_t event_cb, void * user_data); + /** * Send an event to a display * @param disp pointer to a display diff --git a/src/indev/lv_indev.c b/src/indev/lv_indev.c index 8d1ab7e6e..aae4cf499 100644 --- a/src/indev/lv_indev.c +++ b/src/indev/lv_indev.c @@ -568,6 +568,25 @@ bool lv_indev_remove_event(lv_indev_t * indev, uint32_t index) return lv_event_remove(&indev->event_list, index); } +uint32_t lv_indev_remove_event_cb_with_user_data(lv_indev_t * indev, lv_event_cb_t event_cb, void * user_data) +{ + LV_ASSERT_NULL(indev); + + uint32_t event_cnt = lv_indev_get_event_count(indev); + uint32_t removed_count = 0; + int32_t i; + + for(i = event_cnt - 1; i >= 0; i--) { + lv_event_dsc_t * dsc = lv_indev_get_event_dsc(indev, i); + if(dsc && dsc->cb == event_cb && dsc->user_data == user_data) { + lv_indev_remove_event(indev, i); + removed_count ++; + } + } + + return removed_count; +} + lv_result_t lv_indev_send_event(lv_indev_t * indev, lv_event_code_t code, void * param) { diff --git a/src/indev/lv_indev.h b/src/indev/lv_indev.h index 7425eb0e3..1436726e2 100644 --- a/src/indev/lv_indev.h +++ b/src/indev/lv_indev.h @@ -293,6 +293,15 @@ lv_event_dsc_t * lv_indev_get_event_dsc(lv_indev_t * indev, uint32_t index); */ bool lv_indev_remove_event(lv_indev_t * indev, uint32_t index); +/** + * Remove an event_cb with user_data + * @param indev pointer to a indev + * @param event_cb the event_cb of the event to remove + * @param user_data user_data + * @return the count of the event removed + */ +uint32_t lv_indev_remove_event_cb_with_user_data(lv_indev_t * indev, lv_event_cb_t event_cb, void * user_data); + /** * Send an event to an indev * @param indev pointer to an indev