[Bf-blender-cvs] [8cd8b3e9bda] master: readfile: always run setup_app_data after updating defaults

Campbell Barton noreply at git.blender.org
Fri Oct 2 23:32:12 CEST 2020


Commit: 8cd8b3e9bda443ec8f560117d93a4f06fe91cb11
Author: Campbell Barton
Date:   Sat Oct 3 01:02:31 2020 +1000
Branches: master
https://developer.blender.org/rB8cd8b3e9bda443ec8f560117d93a4f06fe91cb11

readfile: always run setup_app_data after updating defaults

When blend files were loaded with app-templates,
setup_app_data was running before defaults were updated.

This is likely to cause problems with order of initialization
so always update the startup file beforehand.

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

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 94d203eeb2c..f73c4a70809 100644
--- a/source/blender/blenkernel/BKE_blendfile.h
+++ b/source/blender/blenkernel/BKE_blendfile.h
@@ -31,16 +31,32 @@ struct ReportList;
 struct UserDef;
 struct bContext;
 
-int BKE_blendfile_read(struct bContext *C,
-                       const char *filepath,
-                       const struct BlendFileReadParams *params,
-                       struct ReportList *reports);
+bool BKE_blendfile_read_ex(struct bContext *C,
+                           const char *filepath,
+                           const struct BlendFileReadParams *params,
+                           struct ReportList *reports,
+                           /* Extra args. */
+                           const bool startup_update_defaults,
+                           const char *startup_app_template);
+bool BKE_blendfile_read(struct bContext *C,
+                        const char *filepath,
+                        const struct BlendFileReadParams *params,
+                        struct ReportList *reports);
+
+bool BKE_blendfile_read_from_memory_ex(struct bContext *C,
+                                       const void *filebuf,
+                                       int filelength,
+                                       const struct BlendFileReadParams *params,
+                                       struct ReportList *reports,
+                                       /* Extra args. */
+                                       const bool startup_update_defaults,
+                                       const char *startup_app_template);
 bool BKE_blendfile_read_from_memory(struct bContext *C,
                                     const void *filebuf,
                                     int filelength,
-                                    bool update_defaults,
                                     const struct BlendFileReadParams *params,
                                     struct ReportList *reports);
+
 bool BKE_blendfile_read_from_memfile(struct bContext *C,
                                      struct MemFile *memfile,
                                      const struct BlendFileReadParams *params,
diff --git a/source/blender/blenkernel/intern/blendfile.c b/source/blender/blenkernel/intern/blendfile.c
index 4ea8ae555e3..fc1911d0394 100644
--- a/source/blender/blenkernel/intern/blendfile.c
+++ b/source/blender/blenkernel/intern/blendfile.c
@@ -428,10 +428,13 @@ static bool handle_subversion_warning(Main *main, ReportList *reports)
   return true;
 }
 
-int BKE_blendfile_read(bContext *C,
-                       const char *filepath,
-                       const struct BlendFileReadParams *params,
-                       ReportList *reports)
+bool BKE_blendfile_read_ex(bContext *C,
+                           const char *filepath,
+                           const struct BlendFileReadParams *params,
+                           ReportList *reports,
+                           /* Extra args. */
+                           const bool startup_update_defaults,
+                           const char *startup_app_template)
 {
   BlendFileData *bfd;
   bool success = false;
@@ -449,6 +452,11 @@ int BKE_blendfile_read(bContext *C,
       bfd = NULL;
     }
     else {
+      if (startup_update_defaults) {
+        if ((params->skip_flags & BLO_READ_SKIP_DATA) == 0) {
+          BLO_update_defaults_startup_blend(bfd->main, startup_app_template);
+        }
+      }
       setup_app_blend_file_data(C, bfd, filepath, params, reports);
       BLO_blendfiledata_free(bfd);
       success = true;
@@ -461,23 +469,32 @@ int BKE_blendfile_read(bContext *C,
   return success;
 }
 
-bool BKE_blendfile_read_from_memory(bContext *C,
-                                    const void *filebuf,
-                                    int filelength,
-                                    bool update_defaults,
-                                    const struct BlendFileReadParams *params,
-                                    ReportList *reports)
+bool BKE_blendfile_read(bContext *C,
+                        const char *filepath,
+                        const struct BlendFileReadParams *params,
+                        ReportList *reports)
+{
+  return BKE_blendfile_read_ex(C, filepath, params, reports, false, NULL);
+}
+
+bool BKE_blendfile_read_from_memory_ex(bContext *C,
+                                       const void *filebuf,
+                                       int filelength,
+                                       const struct BlendFileReadParams *params,
+                                       ReportList *reports,
+                                       /* Extra args. */
+                                       const bool startup_update_defaults,
+                                       const char *startup_app_template)
 {
   BlendFileData *bfd;
 
   bfd = BLO_read_from_memory(filebuf, filelength, params->skip_flags, reports);
   if (bfd) {
-    if (update_defaults) {
+    if (startup_update_defaults) {
       if ((params->skip_flags & BLO_READ_SKIP_DATA) == 0) {
-        BLO_update_defaults_startup_blend(bfd->main, NULL);
+        BLO_update_defaults_startup_blend(bfd->main, startup_app_template);
       }
     }
-
     setup_app_blend_file_data(C, bfd, "<memory2>", params, reports);
     BLO_blendfiledata_free(bfd);
   }
@@ -488,6 +505,15 @@ bool BKE_blendfile_read_from_memory(bContext *C,
   return (bfd != NULL);
 }
 
+bool BKE_blendfile_read_from_memory(bContext *C,
+                                    const void *filebuf,
+                                    int filelength,
+                                    const struct BlendFileReadParams *params,
+                                    ReportList *reports)
+{
+  return BKE_blendfile_read_from_memory_ex(C, filebuf, filelength, params, reports, false, NULL);
+}
+
 /* memfile is the undo buffer */
 bool BKE_blendfile_read_from_memfile(bContext *C,
                                      struct MemFile *memfile,
diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c
index 3f58ba9e5a0..44367969ed7 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -1034,20 +1034,17 @@ void wm_homefile_read(bContext *C,
 
   if (!use_factory_settings || (filepath_startup[0] != '\0')) {
     if (BLI_access(filepath_startup, R_OK) == 0) {
-      success = BKE_blendfile_read(C,
-                                   filepath_startup,
-                                   &(const struct BlendFileReadParams){
-                                       .is_startup = true,
-                                       .skip_flags = skip_flags | BLO_READ_SKIP_USERDEF,
-                                   },
-                                   NULL);
+      success = BKE_blendfile_read_ex(C,
+                                      filepath_startup,
+                                      &(const struct BlendFileReadParams){
+                                          .is_startup = true,
+                                          .skip_flags = skip_flags | BLO_READ_SKIP_USERDEF,
+                                      },
+                                      NULL,
+                                      update_defaults && use_data,
+                                      app_template);
     }
     if (success) {
-      if (update_defaults) {
-        if (use_data) {
-          BLO_update_defaults_startup_blend(CTX_data_main(C), app_template);
-        }
-      }
       is_factory_startup = filepath_startup_is_factory;
     }
   }
@@ -1066,15 +1063,16 @@ void wm_homefile_read(bContext *C,
   }
 
   if (success == false) {
-    success = BKE_blendfile_read_from_memory(C,
-                                             datatoc_startup_blend,
-                                             datatoc_startup_blend_size,
-                                             true,
-                                             &(const struct BlendFileReadParams){
-                                                 .is_startup = true,
-                                                 .skip_flags = skip_flags,
-                                             },
-                                             NULL);
+    success = BKE_blendfile_read_from_memory_ex(C,
+                                                datatoc_startup_blend,
+                                                datatoc_startup_blend_size,
+                                                &(const struct BlendFileReadParams){
+                                                    .is_startup = true,
+                                                    .skip_flags = skip_flags,
+                                                },
+                                                NULL,
+                                                true,
+                                                NULL);
 
     if (use_data && BLI_listbase_is_empty(&wmbase)) {
       wm_clear_default_size(C);



More information about the Bf-blender-cvs mailing list