diff options
author | Campbell Barton <ideasman42@gmail.com> | 2017-03-16 16:18:20 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2017-03-16 16:18:20 +0300 |
commit | aad9dd2f1bc2645885da4975985f413706b06c2e (patch) | |
tree | 46f2698e99a3b27de06428bc220f48b90331685d /source | |
parent | 1cad64900e3f052fa895a4ac2a994d87b0c3fce1 (diff) |
Support passing in UserDef for free function
Needed so we can load and free non-global user preferences.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/BKE_blender.h | 8 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/blender.c | 37 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/blendfile.c | 4 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_init_exit.c | 2 |
4 files changed, 28 insertions, 23 deletions
diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h index 1fe425b7e72..040df054ec5 100644 --- a/source/blender/blenkernel/BKE_blender.h +++ b/source/blender/blenkernel/BKE_blender.h @@ -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 */ diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c index bb69eac2924..0180e68faed 100644 --- a/source/blender/blenkernel/intern/blender.c +++ b/source/blender/blenkernel/intern/blender.c @@ -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; - - for (km = U.user_keymaps.first; km; km = km->next) { - for (kmdi = km->diff_items.first; kmdi; kmdi = kmdi->next) { +#define U _invalid_access_ /* ensure no accidental global access */ +#ifdef U /* quiet warning */ +#endif + + 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(&userdef->uistyles); + BLI_freelistN(&userdef->uifonts); + BLI_freelistN(&userdef->themes); + BLI_freelistN(&userdef->user_keymaps); - BLI_freelistN(&U.uistyles); - BLI_freelistN(&U.uifonts); - BLI_freelistN(&U.themes); - BLI_freelistN(&U.user_keymaps); +#undef U } /** diff --git a/source/blender/blenkernel/intern/blendfile.c b/source/blender/blenkernel/intern/blendfile.c index 354f392528f..8b472249939 100644 --- a/source/blender/blenkernel/intern/blendfile.c +++ b/source/blender/blenkernel/intern/blendfile.c @@ -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); diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c index 4b2369a1a7c..227e62d26d3 100644 --- a/source/blender/windowmanager/intern/wm_init_exit.c +++ b/source/blender/windowmanager/intern/wm_init_exit.c @@ -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 */ |