[Bf-blender-cvs] [555d57dade8] temp-workspace-addons: Workspace addon reading

Campbell Barton noreply at git.blender.org
Thu Feb 1 04:43:23 CET 2018


Commit: 555d57dade831a18657e2d88055674db3f21318e
Author: Campbell Barton
Date:   Thu Feb 1 14:44:30 2018 +1100
Branches: temp-workspace-addons
https://developer.blender.org/rB555d57dade831a18657e2d88055674db3f21318e

Workspace addon reading

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

M	source/blender/blenkernel/BKE_blender.h
M	source/blender/blenkernel/intern/blender.c
M	source/blender/blenkernel/intern/workspace.c
M	source/blender/blenloader/intern/readfile.c

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

diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h
index 647291382ef..33e6621b282 100644
--- a/source/blender/blenkernel/BKE_blender.h
+++ b/source/blender/blenkernel/BKE_blender.h
@@ -60,6 +60,8 @@ void BKE_blender_userdef_data_duplicate(struct UserDef *userdef_dst, struct User
 
 void BKE_blender_userdef_data_free(struct UserDef *userdef, bool clear_fonts);
 
+void BKE_blender_addons_free_list(struct ListBase *addons_list);
+
 /* set this callback when a UI is running */
 void BKE_blender_callback_test_break_set(void (*func)(void));
 int  BKE_blender_test_break(void);
diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c
index 182b88c1c57..166e758c393 100644
--- a/source/blender/blenkernel/intern/blender.c
+++ b/source/blender/blenkernel/intern/blender.c
@@ -198,9 +198,9 @@ static void userdef_free_keymaps(UserDef *userdef)
 	BLI_listbase_clear(&userdef->user_keymaps);
 }
 
-static void userdef_free_addons(UserDef *userdef)
+void BKE_blender_addons_free_list(ListBase *addons_list)
 {
-	for (bAddon *addon = userdef->addons.first, *addon_next; addon; addon = addon_next) {
+	for (bAddon *addon = addons_list->first, *addon_next; addon; addon = addon_next) {
 		addon_next = addon->next;
 		if (addon->prop) {
 			IDP_FreeProperty(addon->prop);
@@ -208,7 +208,7 @@ static void userdef_free_addons(UserDef *userdef)
 		}
 		MEM_freeN(addon);
 	}
-	BLI_listbase_clear(&userdef->addons);
+	BLI_listbase_clear(addons_list);
 }
 
 /**
@@ -222,7 +222,7 @@ void BKE_blender_userdef_data_free(UserDef *userdef, bool clear_fonts)
 #endif
 
 	userdef_free_keymaps(userdef);
-	userdef_free_addons(userdef);
+	BKE_blender_addons_free_list(&userdef->addons);
 
 	if (clear_fonts) {
 		for (uiFont *font = userdef->uifonts.first; font; font = font->next) {
diff --git a/source/blender/blenkernel/intern/workspace.c b/source/blender/blenkernel/intern/workspace.c
index 8554cf0fb28..fb8a40a4a88 100644
--- a/source/blender/blenkernel/intern/workspace.c
+++ b/source/blender/blenkernel/intern/workspace.c
@@ -33,6 +33,7 @@
 #include "BLI_string_utils.h"
 #include "BLI_listbase.h"
 
+#include "BKE_blender.h"
 #include "BKE_global.h"
 #include "BKE_library.h"
 #include "BKE_main.h"
@@ -169,6 +170,8 @@ void BKE_workspace_free(WorkSpace *workspace)
 	BLI_freelistN(&workspace->layouts);
 	BLI_freelistN(&workspace->transform_orientations);
 
+	BKE_blender_addons_free_list(&workspace->addons);
+
 	BKE_viewrender_free(&workspace->view_render);
 }
 
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 236b14af8b0..b40b4684323 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -2898,12 +2898,21 @@ static void lib_link_workspaces(FileData *fd, Main *bmain)
 	}
 }
 
+static void direct_link_addon_list(FileData *fd, ListBase *addon_list)
+{
+	for (bAddon *addon = addon_list->first; addon; addon = addon->next) {
+		addon->prop = newdataadr(fd, addon->prop);
+		IDP_DirectLinkGroup_OrFree(&addon->prop, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd);
+	}
+}
+
 static void direct_link_workspace(FileData *fd, WorkSpace *workspace, const Main *main)
 {
 	link_list(fd, BKE_workspace_layouts_get(workspace));
 	link_list(fd, &workspace->hook_layout_relations);
 	link_list(fd, &workspace->scene_viewlayer_relations);
 	link_list(fd, BKE_workspace_transform_orientations_get(workspace));
+	link_list(fd, &workspace->addons);
 
 	for (WorkSpaceDataRelation *relation = workspace->hook_layout_relations.first;
 	     relation;
@@ -2929,6 +2938,8 @@ static void direct_link_workspace(FileData *fd, WorkSpace *workspace, const Main
 			}
 		}
 	}
+
+	direct_link_addon_list(fd, &workspace->addons);
 }
 
 static void lib_link_workspace_instance_hook(FileData *fd, WorkSpaceInstanceHook *hook, ID *id)
@@ -8856,7 +8867,6 @@ static BHead *read_userdef(BlendFileData *bfd, FileData *fd, BHead *bhead)
 	wmKeyMap *keymap;
 	wmKeyMapItem *kmi;
 	wmKeyMapDiffItem *kmdi;
-	bAddon *addon;
 	
 	bfd->user = user= read_struct(fd, bhead, "user def");
 	
@@ -8900,10 +8910,7 @@ static BHead *read_userdef(BlendFileData *bfd, FileData *fd, BHead *bhead)
 			direct_link_keymapitem(fd, kmi);
 	}
 
-	for (addon = user->addons.first; addon; addon = addon->next) {
-		addon->prop = newdataadr(fd, addon->prop);
-		IDP_DirectLinkGroup_OrFree(&addon->prop, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd);
-	}
+	direct_link_addon_list(fd, &user->addons);
 
 	// XXX
 	user->uifonts.first = user->uifonts.last= NULL;



More information about the Bf-blender-cvs mailing list