[Bf-blender-cvs] [3296d5619db] undo-experiments-swap-reread-datablocks: undoexp: tweak `setup_app_data()` to better handle undo case.

Bastien Montagne noreply at git.blender.org
Thu Jan 30 21:57:23 CET 2020


Commit: 3296d5619db40adb8e2cb9137393981b45cd9fee
Author: Bastien Montagne
Date:   Thu Jan 30 15:29:20 2020 +0100
Branches: undo-experiments-swap-reread-datablocks
https://developer.blender.org/rB3296d5619db40adb8e2cb9137393981b45cd9fee

undoexp: tweak `setup_app_data()` to better handle undo case.

The way we detected undo case there was somewhat weak, now we have a
stronger way to do it from `BlendFileReadParams`.

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

M	source/blender/blenkernel/intern/blendfile.c

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

diff --git a/source/blender/blenkernel/intern/blendfile.c b/source/blender/blenkernel/intern/blendfile.c
index 8c654b001ff..cd685ec67a6 100644
--- a/source/blender/blenkernel/intern/blendfile.c
+++ b/source/blender/blenkernel/intern/blendfile.c
@@ -134,26 +134,29 @@ static void setup_app_userdef(BlendFileData *bfd)
 static void setup_app_data(bContext *C,
                            BlendFileData *bfd,
                            const char *filepath,
-                           const bool is_startup,
+                           const struct BlendFileReadParams *params,
                            ReportList *reports)
 {
   Main *bmain = G_MAIN;
   Scene *curscene = NULL;
   const bool recover = (G.fileflags & G_FILE_RECOVER) != 0;
+  const bool is_startup = params->is_startup;
   enum {
     LOAD_UI = 1,
     LOAD_UI_OFF,
     LOAD_UNDO,
   } mode;
 
-  /* may happen with library files - UNDO file should never have NULL cursccene... */
-  if (ELEM(NULL, bfd->curscreen, bfd->curscene)) {
+  if (params->undo_direction != 0) {
+    BLI_assert(bfd->curscene != NULL);
+    mode = LOAD_UNDO;
+  }
+  /* may happen with library files - UNDO file should never have NULL curscene (but may have a
+   * NULL curscreen)... */
+  else if (ELEM(NULL, bfd->curscreen, bfd->curscene)) {
     BKE_report(reports, RPT_WARNING, "Library file, loading empty scene");
     mode = LOAD_UI_OFF;
   }
-  else if (BLI_listbase_is_empty(&bfd->main->screens)) {
-    mode = LOAD_UNDO;
-  }
   else if (G.fileflags & G_FILE_NO_UI) {
     mode = LOAD_UI_OFF;
   }
@@ -386,7 +389,7 @@ static void setup_app_blend_file_data(bContext *C,
     setup_app_userdef(bfd);
   }
   if ((params->skip_flags & BLO_READ_SKIP_DATA) == 0) {
-    setup_app_data(C, bfd, filepath, params->is_startup, reports);
+    setup_app_data(C, bfd, filepath, params, reports);
   }
 }



More information about the Bf-blender-cvs mailing list