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:
bjsylvia
2023-09-13 01:55:46 +08:00
committed by GitHub
parent 57d06dd5b4
commit 140369c5c0
4 changed files with 14 additions and 4 deletions
+1 -4
View File
@@ -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);
+1
View File
@@ -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;
+10
View File
@@ -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;
+2
View File
@@ -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