[Bf-blender-cvs] [19d7d99b4d] app-templates: Add BKE_blendfile_userdef_read_from_memory
Campbell Barton
noreply at git.blender.org
Thu Mar 16 20:42:32 CET 2017
Commit: 19d7d99b4d26eb68c6a01179119eebf546e9160e
Author: Campbell Barton
Date: Fri Mar 17 06:46:51 2017 +1100
Branches: app-templates
https://developer.blender.org/rB19d7d99b4d26eb68c6a01179119eebf546e9160e
Add BKE_blendfile_userdef_read_from_memory
Use so we can load user-preferences on their own from memory.
===================================================================
M source/blender/blenkernel/BKE_blendfile.h
M source/blender/blenkernel/intern/blendfile.c
M source/blender/windowmanager/intern/wm_files.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_blendfile.h b/source/blender/blenkernel/BKE_blendfile.h
index 9625a93ed0..7597812005 100644
--- a/source/blender/blenkernel/BKE_blendfile.h
+++ b/source/blender/blenkernel/BKE_blendfile.h
@@ -51,8 +51,13 @@ bool BKE_blendfile_read_from_memfile(
struct bContext *C, struct MemFile *memfile,
struct ReportList *reports, int skip_flag);
-struct UserDef *BKE_blendfile_userdef_read(const char *filepath, struct ReportList *reports);
-int BKE_blendfile_userdef_write(const char *filepath, struct ReportList *reports);
+struct UserDef *BKE_blendfile_userdef_read(
+ const char *filepath, struct ReportList *reports);
+struct UserDef *BKE_blendfile_userdef_read_from_memory(
+ const void *filebuf, int filelength,
+ struct ReportList *reports);
+
+int BKE_blendfile_userdef_write(const char *filepath, struct ReportList *reports);
/* partial blend file writing */
diff --git a/source/blender/blenkernel/intern/blendfile.c b/source/blender/blenkernel/intern/blendfile.c
index c549c138ef..6cb08d69fa 100644
--- a/source/blender/blenkernel/intern/blendfile.c
+++ b/source/blender/blenkernel/intern/blendfile.c
@@ -442,6 +442,30 @@ UserDef *BKE_blendfile_userdef_read(const char *filepath, ReportList *reports)
return userdef;
}
+
+UserDef *BKE_blendfile_userdef_read_from_memory(
+ const void *filebuf, int filelength,
+ ReportList *reports)
+{
+ BlendFileData *bfd;
+ UserDef *userdef = NULL;
+
+ bfd = BLO_read_from_memory(filebuf, filelength, reports, BLO_READ_SKIP_NONE);
+ if (bfd) {
+ if (bfd->user) {
+ userdef = bfd->user;
+ }
+ BKE_main_free(bfd->main);
+ MEM_freeN(bfd);
+ }
+ else {
+ BKE_reports_prepend(reports, "Loading failed: ");
+ }
+
+ return userdef;
+}
+
+
/* only write the userdef in a .blend */
int BKE_blendfile_userdef_write(const char *filepath, ReportList *reports)
{
diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c
index 0362fe2cf6..bd86eb32d0 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -770,6 +770,11 @@ int wm_homefile_read(
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 == NULL) {
+ /* we need to have preferences load to overwrite preferences from previous template */
+ userdef_template = BKE_blendfile_userdef_read_from_memory(
+ datatoc_startup_blend, datatoc_startup_blend_size, NULL);
+ }
if (userdef_template) {
BKE_blender_userdef_set_template(userdef_template);
BKE_blender_userdef_free_data(userdef_template);
More information about the Bf-blender-cvs
mailing list