diff --git a/libobs/obs-properties.c b/libobs/obs-properties.c index 33d166a5ed1f7de8639de462c5c7b2dda860f247..0ec9089311cc226c2b85b0e6edd41e8c0910db72 100644 --- a/libobs/obs-properties.c +++ b/libobs/obs-properties.c @@ -85,6 +85,8 @@ struct obs_property { struct obs_properties { const char *locale; + void *param; + void (*destroy)(void *param); struct obs_property *first_property; struct obs_property **last; @@ -99,6 +101,32 @@ obs_properties_t obs_properties_create(const char *locale) return props; } +void obs_properties_set_param(obs_properties_t props, + void *param, void (*destroy)(void *param)) +{ + if (!props) + return; + + if (props->param && props->destroy) + props->destroy(props->param); + + props->param = param; + props->destroy = destroy; +} + +void *obs_properties_get_param(obs_properties_t props) +{ + return props ? props->param : NULL; +} + +obs_properties_t obs_properties_create_param(const char *locale, + void *param, void (*destroy)(void *param)) +{ + struct obs_properties *props = obs_properties_create(locale); + obs_properties_set_param(props, param, destroy); + return props; +} + static void obs_property_destroy(struct obs_property *property) { if (property->type == OBS_PROPERTY_LIST) { @@ -113,6 +141,10 @@ void obs_properties_destroy(obs_properties_t props) { if (props) { struct obs_property *p = props->first_property; + + if (props->destroy && props->param) + props->destroy(props->param); + while (p) { struct obs_property *next = p->next; obs_property_destroy(p); diff --git a/libobs/obs-properties.h b/libobs/obs-properties.h index 60114fb26096a4aab13853f4b7d3bd404c99f814..54e1bd828a3f6beae66bbbfebc502f215fc7ad21 100644 --- a/libobs/obs-properties.h +++ b/libobs/obs-properties.h @@ -61,8 +61,14 @@ typedef struct obs_property *obs_property_t; /* ------------------------------------------------------------------------- */ EXPORT obs_properties_t obs_properties_create(const char *locale); +EXPORT obs_properties_t obs_properties_create_param(const char *locale, + void *param, void (*destroy)(void *param)); EXPORT void obs_properties_destroy(obs_properties_t props); +EXPORT void obs_properties_set_param(obs_properties_t props, + void *param, void (*destroy)(void *param)); +EXPORT void *obs_properties_get_param(obs_properties_t props); + EXPORT const char *obs_properties_locale(obs_properties_t props); EXPORT obs_property_t obs_properties_first(obs_properties_t props);