Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2017-03-16 16:18:20 +0300
committerCampbell Barton <ideasman42@gmail.com>2017-03-16 16:18:20 +0300
commitaad9dd2f1bc2645885da4975985f413706b06c2e (patch)
tree46f2698e99a3b27de06428bc220f48b90331685d /source
parent1cad64900e3f052fa895a4ac2a994d87b0c3fce1 (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.h8
-rw-r--r--source/blender/blenkernel/intern/blender.c37
-rw-r--r--source/blender/blenkernel/intern/blendfile.c4
-rw-r--r--source/blender/windowmanager/intern/wm_init_exit.c2
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 */