mirror of
https://github.com/lvgl/lvgl.git
synced 2026-05-20 21:35:19 +08:00
fix(disp): should clean up event_cb when deleting lv_disp and lv_obj (#4550)
Signed-off-by: YanXiaowei <yanxiaowei@xiaomi.com> Co-authored-by: YanXiaowei <yanxiaowei@xiaomi.com>
This commit is contained in:
@@ -385,10 +385,7 @@ static void obj_del_core(lv_obj_t * obj)
|
||||
}
|
||||
|
||||
/*Clean registered event_cb*/
|
||||
uint32_t event_cnt = lv_obj_get_event_count(obj);
|
||||
for(uint32_t i = 0; i < event_cnt; i++) {
|
||||
lv_obj_remove_event(obj, i);
|
||||
}
|
||||
if(obj->spec_attr) lv_event_remove_all(&(obj->spec_attr->event_list));
|
||||
|
||||
/*Recursively delete the children*/
|
||||
lv_obj_t * child = lv_obj_get_child(obj, 0);
|
||||
|
||||
@@ -138,6 +138,7 @@ void lv_disp_remove(lv_disp_t * disp)
|
||||
if(disp == lv_disp_get_default()) was_default = true;
|
||||
|
||||
lv_disp_send_event(disp, LV_EVENT_DELETE, NULL);
|
||||
lv_event_remove_all(&(disp->event_list));
|
||||
|
||||
/*Detach the input devices*/
|
||||
lv_indev_t * indev;
|
||||
|
||||
@@ -140,6 +140,16 @@ bool lv_event_remove(lv_event_list_t * list, uint32_t index)
|
||||
return true;
|
||||
}
|
||||
|
||||
void lv_event_remove_all(lv_event_list_t * list)
|
||||
{
|
||||
LV_ASSERT_NULL(list);
|
||||
if(list && list->dsc) {
|
||||
lv_free(list->dsc);
|
||||
list->dsc = NULL;
|
||||
list->cnt = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void * lv_event_get_current_target(lv_event_t * e)
|
||||
{
|
||||
return e->current_target;
|
||||
|
||||
@@ -163,6 +163,8 @@ void * lv_event_dsc_get_user_data(lv_event_dsc_t * dsc);
|
||||
|
||||
bool lv_event_remove(lv_event_list_t * list, uint32_t index);
|
||||
|
||||
void lv_event_remove_all(lv_event_list_t * list);
|
||||
|
||||
/**
|
||||
* Get the object originally targeted by the event. It's the same even if the event is bubbled.
|
||||
* @param e pointer to the event descriptor
|
||||
|
||||
Reference in New Issue
Block a user