diff options
author | Campbell Barton <ideasman42@gmail.com> | 2017-11-22 19:26:00 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2017-11-22 19:26:00 +0300 |
commit | 73c4ba18d50bc03465927e22b5d0085bf7d523a2 (patch) | |
tree | 17d1877bd52ae5e3598e16cb52f42f3be17a9125 /source/blender/blenkernel/intern/blendfile.c | |
parent | 15a0ad602746bd8dd7dde3822d54979e72ca9de2 (diff) | |
parent | 326efb431971e668a41d9a331ccc3d11f9fd3e5f (diff) |
Merge branch 'master' into blender2.8
Diffstat (limited to 'source/blender/blenkernel/intern/blendfile.c')
-rw-r--r-- | source/blender/blenkernel/intern/blendfile.c | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/source/blender/blenkernel/intern/blendfile.c b/source/blender/blenkernel/intern/blendfile.c index 6df008e7ac9..f6dfb7f922c 100644 --- a/source/blender/blenkernel/intern/blendfile.c +++ b/source/blender/blenkernel/intern/blendfile.c @@ -243,9 +243,8 @@ static void setup_app_data( 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. * @@ -256,8 +255,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 */ @@ -539,6 +536,29 @@ bool BKE_blendfile_userdef_write(const char *filepath, ReportList *reports) 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; +} + WorkspaceConfigFileData *BKE_blendfile_workspace_config_read(const char *filepath, ReportList *reports) { BlendFileData *bfd; |