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
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/blenkernel/intern/blendfile.c')
-rw-r--r--source/blender/blenkernel/intern/blendfile.c45
1 files changed, 34 insertions, 11 deletions
diff --git a/source/blender/blenkernel/intern/blendfile.c b/source/blender/blenkernel/intern/blendfile.c
index 980df05aca2..cc992a4a520 100644
--- a/source/blender/blenkernel/intern/blendfile.c
+++ b/source/blender/blenkernel/intern/blendfile.c
@@ -226,11 +226,9 @@ static void setup_app_data(
CTX_data_main_set(C, G.main);
if (bfd->user) {
-
/* only here free userdef themes... */
- BKE_blender_userdef_free_data(&U);
-
- U = *bfd->user;
+ BKE_blender_userdef_data_set_and_free(bfd->user);
+ bfd->user = NULL;
/* Security issue: any blend file could include a USER block.
*
@@ -241,8 +239,6 @@ static void setup_app_data(
* enable scripts auto-execution by loading a '.blend' file.
*/
U.flag |= USER_SCRIPT_AUTOEXEC_DISABLE;
-
- MEM_freeN(bfd->user);
}
/* case G_FILE_NO_UI or no screens in file */
@@ -497,21 +493,48 @@ UserDef *BKE_blendfile_userdef_read_from_memory(
}
-/* only write the userdef in a .blend */
-int BKE_blendfile_userdef_write(const char *filepath, ReportList *reports)
+/**
+ * Only write the userdef in a .blend
+ * \return success
+ */
+bool BKE_blendfile_userdef_write(const char *filepath, ReportList *reports)
{
Main *mainb = MEM_callocN(sizeof(Main), "empty main");
- int retval = 0;
+ bool ok = false;
if (BLO_write_file(mainb, filepath, G_FILE_USERPREFS, reports, NULL)) {
- retval = 1;
+ ok = true;
}
MEM_freeN(mainb);
- return retval;
+ return ok;
}
+/**
+ * Only write the userdef in a .blend, merging with the existing blend file.
+ * \return success
+ *
+ * \note In the future we should re-evaluate user preferences,
+ * possibly splitting out system/hardware specific prefs.
+ */
+bool BKE_blendfile_userdef_write_app_template(const char *filepath, ReportList *reports)
+{
+ /* if it fails, overwrite is OK. */
+ UserDef *userdef_default = BKE_blendfile_userdef_read(filepath, NULL);
+ if (userdef_default == NULL) {
+ return BKE_blendfile_userdef_write(filepath, reports);
+ }
+
+ BKE_blender_userdef_app_template_data_swap(&U, userdef_default);
+ bool ok = BKE_blendfile_userdef_write(filepath, reports);
+ BKE_blender_userdef_app_template_data_swap(&U, userdef_default);
+ BKE_blender_userdef_data_free(userdef_default, false);
+ MEM_freeN(userdef_default);
+ return ok;
+}
+
+
/** \} */