Support passing in UserDef for free function
Needed so we can load and free non-global user preferences.
This commit is contained in:
parent
1cad64900e
commit
aad9dd2f1b
@ -38,13 +38,17 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
struct UserDef;
|
||||
|
||||
void BKE_blender_free(void);
|
||||
|
||||
void BKE_blender_globals_init(void);
|
||||
void BKE_blender_globals_clear(void);
|
||||
void BKE_blender_version_string(char *version_str, size_t maxncpy, short version, short subversion, bool v_prefix, bool include_subversion);
|
||||
void BKE_blender_version_string(
|
||||
char *version_str, size_t maxncpy,
|
||||
short version, short subversion, bool v_prefix, bool include_subversion);
|
||||
|
||||
void BKE_blender_userdef_free(void);
|
||||
void BKE_blender_userdef_free(struct UserDef *userdef);
|
||||
void BKE_blender_userdef_refresh(void);
|
||||
|
||||
/* set this callback when a UI is running */
|
||||
|
@ -154,16 +154,14 @@ static void keymap_item_free(wmKeyMapItem *kmi)
|
||||
* When loading a new userdef from file,
|
||||
* or when exiting Blender.
|
||||
*/
|
||||
void BKE_blender_userdef_free(void)
|
||||
void BKE_blender_userdef_free(UserDef *userdef)
|
||||
{
|
||||
wmKeyMap *km;
|
||||
wmKeyMapItem *kmi;
|
||||
wmKeyMapDiffItem *kmdi;
|
||||
bAddon *addon, *addon_next;
|
||||
uiFont *font;
|
||||
#define U _invalid_access_ /* ensure no accidental global access */
|
||||
#ifdef U /* quiet warning */
|
||||
#endif
|
||||
|
||||
for (km = U.user_keymaps.first; km; km = km->next) {
|
||||
for (kmdi = km->diff_items.first; kmdi; kmdi = kmdi->next) {
|
||||
for (wmKeyMap *km = userdef->user_keymaps.first; km; km = km->next) {
|
||||
for (wmKeyMapDiffItem *kmdi = km->diff_items.first; kmdi; kmdi = kmdi->next) {
|
||||
if (kmdi->add_item) {
|
||||
keymap_item_free(kmdi->add_item);
|
||||
MEM_freeN(kmdi->add_item);
|
||||
@ -174,14 +172,15 @@ void BKE_blender_userdef_free(void)
|
||||
}
|
||||
}
|
||||
|
||||
for (kmi = km->items.first; kmi; kmi = kmi->next)
|
||||
for (wmKeyMapItem *kmi = km->items.first; kmi; kmi = kmi->next) {
|
||||
keymap_item_free(kmi);
|
||||
}
|
||||
|
||||
BLI_freelistN(&km->diff_items);
|
||||
BLI_freelistN(&km->items);
|
||||
}
|
||||
|
||||
for (addon = U.addons.first; addon; addon = addon_next) {
|
||||
|
||||
for (bAddon *addon = userdef->addons.first, *addon_next; addon; addon = addon_next) {
|
||||
addon_next = addon->next;
|
||||
if (addon->prop) {
|
||||
IDP_FreeProperty(addon->prop);
|
||||
@ -190,18 +189,20 @@ void BKE_blender_userdef_free(void)
|
||||
MEM_freeN(addon);
|
||||
}
|
||||
|
||||
for (font = U.uifonts.first; font; font = font->next) {
|
||||
for (uiFont *font = userdef->uifonts.first; font; font = font->next) {
|
||||
BLF_unload_id(font->blf_id);
|
||||
}
|
||||
|
||||
BLF_default_set(-1);
|
||||
|
||||
BLI_freelistN(&U.autoexec_paths);
|
||||
BLI_freelistN(&userdef->autoexec_paths);
|
||||
|
||||
BLI_freelistN(&U.uistyles);
|
||||
BLI_freelistN(&U.uifonts);
|
||||
BLI_freelistN(&U.themes);
|
||||
BLI_freelistN(&U.user_keymaps);
|
||||
BLI_freelistN(&userdef->uistyles);
|
||||
BLI_freelistN(&userdef->uifonts);
|
||||
BLI_freelistN(&userdef->themes);
|
||||
BLI_freelistN(&userdef->user_keymaps);
|
||||
|
||||
#undef U
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -227,7 +227,7 @@ static void setup_app_data(
|
||||
if (bfd->user) {
|
||||
|
||||
/* only here free userdef themes... */
|
||||
BKE_blender_userdef_free();
|
||||
BKE_blender_userdef_free(&U);
|
||||
|
||||
U = *bfd->user;
|
||||
|
||||
@ -436,7 +436,7 @@ int BKE_blendfile_read_userdef(const char *filepath, ReportList *reports)
|
||||
retval = BKE_BLENDFILE_READ_OK_USERPREFS;
|
||||
|
||||
/* only here free userdef themes... */
|
||||
BKE_blender_userdef_free();
|
||||
BKE_blender_userdef_free(&U);
|
||||
|
||||
U = *bfd->user;
|
||||
MEM_freeN(bfd->user);
|
||||
|
@ -572,7 +572,7 @@ void WM_exit_ext(bContext *C, const bool do_python)
|
||||
ED_file_exit(); /* for fsmenu */
|
||||
|
||||
UI_exit();
|
||||
BKE_blender_userdef_free();
|
||||
BKE_blender_userdef_free(&U);
|
||||
|
||||
RNA_exit(); /* should be after BPY_python_end so struct python slots are cleared */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user