[Bf-blender-cvs] [7e49f960d3] app-templates: Support for template-local preferences

Campbell Barton noreply at git.blender.org
Thu Mar 16 17:05:17 CET 2017


Commit: 7e49f960d35785e43e55a600140c06d2495cc0cc
Author: Campbell Barton
Date:   Fri Mar 17 03:09:52 2017 +1100
Branches: app-templates
https://developer.blender.org/rB7e49f960d35785e43e55a600140c06d2495cc0cc

Support for template-local preferences

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

M	source/blender/blenkernel/BKE_blender.h
M	source/blender/blenkernel/intern/blender.c
M	source/blender/windowmanager/intern/wm_files.c

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

diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h
index 4bf2e31e5e..fed13cf16b 100644
--- a/source/blender/blenkernel/BKE_blender.h
+++ b/source/blender/blenkernel/BKE_blender.h
@@ -50,7 +50,9 @@ void BKE_blender_version_string(
 
 void BKE_blender_userdef_free_data(struct UserDef *userdef);
 void BKE_blender_userdef_refresh(void);
-	
+
+void BKE_blender_userdef_set_template(struct UserDef *userdef);
+
 /* 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 27784ea25f..6f9e5107ee 100644
--- a/source/blender/blenkernel/intern/blender.c
+++ b/source/blender/blenkernel/intern/blender.c
@@ -218,6 +218,30 @@ void BKE_blender_userdef_refresh(void)
 
 }
 
+/**
+ * Write U from userdef.
+ * This function defines which settings a template will override for the user preferences.
+ */
+void BKE_blender_userdef_set_template(UserDef *userdef)
+{
+	/* TODO:
+	 * - keymaps
+	 * - various minor settings (add as needed).
+	 */
+
+#define LIST_OVERRIDE(dst, src) { \
+	BLI_freelistN(dst); \
+	BLI_movelisttolist(dst, src); \
+} ((void)0)
+
+	LIST_OVERRIDE(&U.uistyles, &userdef->uistyles);
+	LIST_OVERRIDE(&U.uifonts, &userdef->uifonts);
+	LIST_OVERRIDE(&U.themes, &userdef->themes);
+	LIST_OVERRIDE(&U.addons, &userdef->addons);
+
+#undef LIST_OVERRIDE
+}
+
 /* *****************  testing for break ************* */
 
 static void (*blender_test_break_cb)(void) = NULL;
diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c
index a458c8be33..486329eacf 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -715,7 +715,7 @@ int wm_homefile_read(
 	if (!from_memory && BLI_exists(filepath_userdef)) {
 		UserDef *userdef = BKE_blendfile_userdef_read(filepath_userdef, NULL);
 		if (userdef != NULL) {
-			BKE_blendfile_userdef_assign(userdef);
+			BKE_blendfile_userdef_set(userdef);
 
 			read_userdef_from_memory = false;
 			skip_flags |= BLO_READ_SKIP_USERDEF;
@@ -760,6 +760,23 @@ int wm_homefile_read(
 		BLI_strncpy(U.app_template, custom_app_template, sizeof(U.app_template));
 	}
 
+	/* load template preferences */
+	if (U.app_template[0] != '\0') {
+		char temp_path[FILE_MAX];
+		BLI_join_dirfile(temp_path, sizeof(temp_path), "app_templates", U.app_template);
+		const char *filepath_userdef_template = BKE_appdir_folder_id(BLENDER_DATAFILES, temp_path);
+
+		if (filepath_userdef_template) {
+			BLI_join_dirfile(temp_path, sizeof(temp_path), filepath_userdef_template, BLENDER_USERPREF_FILE);
+			UserDef *userdef_template = BKE_blendfile_userdef_read(temp_path, NULL);
+			if (userdef_template) {
+				BKE_blender_userdef_set_template(userdef_template);
+				BKE_blender_userdef_free_data(userdef_template);
+				MEM_freeN(userdef_template);
+			}
+		}
+	}
+
 	/* prevent buggy files that had G_FILE_RELATIVE_REMAP written out by mistake. Screws up autosaves otherwise
 	 * can remove this eventually, only in a 2.53 and older, now its not written */
 	G.fileflags &= ~G_FILE_RELATIVE_REMAP;




More information about the Bf-blender-cvs mailing list