[Bf-blender-cvs] [aad9dd2f1b] master: Support passing in UserDef for free function

Campbell Barton noreply at git.blender.org
Thu Mar 16 14:14:28 CET 2017


Commit: aad9dd2f1bc2645885da4975985f413706b06c2e
Author: Campbell Barton
Date:   Fri Mar 17 00:18:20 2017 +1100
Branches: master
https://developer.blender.org/rBaad9dd2f1bc2645885da4975985f413706b06c2e

Support passing in UserDef for free function

Needed so we can load and free non-global user preferences.

===================================================================

M	source/blender/blenkernel/BKE_blender.h
M	source/blender/blenkernel/intern/blender.c
M	source/blender/blenkernel/intern/blendfile.c
M	source/blender/windowmanager/intern/wm_init_exit.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h
index 1fe425b7e7..040df054ec 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 bb69eac292..0180e68fae 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 354f392528..8b47224993 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 4b2369a1a7..227e62d26d 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 */




More information about the Bf-blender-cvs mailing list