mirror of
https://github.com/lvgl/lvgl.git
synced 2026-05-27 11:57:48 +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*/
|
/*Clean registered event_cb*/
|
||||||
uint32_t event_cnt = lv_obj_get_event_count(obj);
|
if(obj->spec_attr) lv_event_remove_all(&(obj->spec_attr->event_list));
|
||||||
for(uint32_t i = 0; i < event_cnt; i++) {
|
|
||||||
lv_obj_remove_event(obj, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*Recursively delete the children*/
|
/*Recursively delete the children*/
|
||||||
lv_obj_t * child = lv_obj_get_child(obj, 0);
|
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;
|
if(disp == lv_disp_get_default()) was_default = true;
|
||||||
|
|
||||||
lv_disp_send_event(disp, LV_EVENT_DELETE, NULL);
|
lv_disp_send_event(disp, LV_EVENT_DELETE, NULL);
|
||||||
|
lv_event_remove_all(&(disp->event_list));
|
||||||
|
|
||||||
/*Detach the input devices*/
|
/*Detach the input devices*/
|
||||||
lv_indev_t * indev;
|
lv_indev_t * indev;
|
||||||
|
|||||||
@@ -140,6 +140,16 @@ bool lv_event_remove(lv_event_list_t * list, uint32_t index)
|
|||||||
return true;
|
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)
|
void * lv_event_get_current_target(lv_event_t * e)
|
||||||
{
|
{
|
||||||
return e->current_target;
|
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);
|
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.
|
* 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
|
* @param e pointer to the event descriptor
|
||||||
|
|||||||
Reference in New Issue
Block a user