diff --git a/lv_conf_template.h b/lv_conf_template.h index ca2760cc69..86e70f48b5 100644 --- a/lv_conf_template.h +++ b/lv_conf_template.h @@ -405,8 +405,17 @@ typedef void * lv_font_user_data_t; * LV_OBJ SETTINGS *==================*/ +#if LV_USE_USER_DATA /*Declare the type of the user data of object (can be e.g. `void *`, `int`, `struct`)*/ typedef void * lv_obj_user_data_t; +/*Provide a function to free user data*/ +#define LV_USE_USER_DATA_FREE 0 +#if LV_USE_USER_DATA_FREE +# define LV_USER_DATA_FREE_INCLUDE "something.h" /*Header for user data free function*/ +/* Function prototype : void user_data_free(lv_obj_t * obj); */ +# define LV_USER_DATA_FREE (user_data_free) /*Invoking for user data free function*/ +#endif +#endif /*1: enable `lv_obj_realaign()` based on `lv_obj_align()` parameters*/ #define LV_USE_OBJ_REALIGN 1 diff --git a/src/lv_core/lv_obj.c b/src/lv_core/lv_obj.c index d7f2f6ee63..09a91c082d 100644 --- a/src/lv_core/lv_obj.c +++ b/src/lv_core/lv_obj.c @@ -31,6 +31,11 @@ #include LV_GC_INCLUDE #endif /* LV_ENABLE_GC */ + +#if defined(LV_USER_DATA_FREE_INCLUDE) +#include LV_USER_DATA_FREE_INCLUDE +#endif /* LV_USE_USER_DATA_FREE */ + /********************* * DEFINES *********************/ @@ -372,6 +377,11 @@ lv_res_t lv_obj_del(lv_obj_t * obj) lv_anim_del(obj, NULL); #endif + /*Delete the user data*/ +#if LV_USE_USER_DATA_FREE + LV_USER_DATA_FREE(obj); +#endif + /*Recursively delete the children*/ lv_obj_t * i; lv_obj_t * i_next;