Add module callbacks for loading locale data

The module callback obs_module_set_locale will be called after loading
the module, and any time the locale is manually changed via core API.

When this function is called, the module is expected to load new text
lookup values for all the text it uses based upon the current locale.
master
jp9000 2014-06-25 00:22:54 -07:00
parent 0b4a259e56
commit 1abf91577e
4 changed files with 19 additions and 7 deletions

View File

@ -52,6 +52,7 @@ struct draw_callback {
struct obs_module {
char *name;
void *module;
void (*set_locale)(const char *locale);
};
extern void free_module(struct obs_module *mod);

View File

@ -73,7 +73,12 @@ int obs_load_module(const char *path)
return errorcode;
}
mod.name = bstrdup(path);
mod.name = bstrdup(path);
mod.set_locale = os_dlsym(mod.module, "obs_module_set_locale");
if (mod.set_locale)
mod.set_locale(obs->locale);
da_push_back(obs->modules, &mod);
return MODULE_SUCCESS;
}

View File

@ -50,6 +50,9 @@ MODULE_EXPORT bool obs_module_load(uint32_t libobs_version);
/** Optional: Called when the module is unloaded. */
MODULE_EXPORT void obs_module_unload(void);
/** Called to set the current locale data for the module. */
MODULE_EXPORT void obs_module_set_locale(const char *locale);
/**
* Optional: Declares the author(s) of the module
*
@ -59,9 +62,5 @@ MODULE_EXPORT void obs_module_unload(void);
MODULE_EXPORT const char *obs_module_author(void); \
const char *obs_module_author(void) {return name;}
/**
* Optional: Declares the author of the module
*
* @param locale Locale to look up the description for.
*/
MODULE_EXPORT const char *obs_module_description(const char *locale);
/** Optional: Returns a description of the module */
MODULE_EXPORT const char *obs_module_description(void);

View File

@ -578,6 +578,13 @@ void obs_set_locale(const char *locale)
if (obs->locale)
bfree(obs->locale);
obs->locale = bstrdup(locale);
for (size_t i = 0; i < obs->modules.num; i++) {
struct obs_module *module = obs->modules.array+i;
if (module->set_locale)
module->set_locale(locale);
}
}
const char *obs_get_locale(void)