[Bf-blender-cvs] [368f8f74040] master: Blenloader: new api function to check if reading is for undo

Jacques Lucke noreply at git.blender.org
Fri Aug 28 16:30:09 CEST 2020


Commit: 368f8f740409e5c8af40e341597e89e9e861b584
Author: Jacques Lucke
Date:   Fri Aug 28 16:29:55 2020 +0200
Branches: master
https://developer.blender.org/rB368f8f740409e5c8af40e341597e89e9e861b584

Blenloader: new api function to check if reading is for undo

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

M	source/blender/blenloader/BLO_read_write.h
M	source/blender/blenloader/intern/readfile.c

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

diff --git a/source/blender/blenloader/BLO_read_write.h b/source/blender/blenloader/BLO_read_write.h
index 024b6a6c5e4..ff3a82f708a 100644
--- a/source/blender/blenloader/BLO_read_write.h
+++ b/source/blender/blenloader/BLO_read_write.h
@@ -195,6 +195,7 @@ void BLO_read_pointer_array(BlendDataReader *reader, void **ptr_p);
 
 /* Misc. */
 bool BLO_read_requires_endian_switch(BlendDataReader *reader);
+bool BLO_read_data_is_undo(BlendDataReader *reader);
 
 /* Blend Read Lib API
  * ===================
@@ -208,6 +209,9 @@ ID *BLO_read_get_new_id_address(BlendLibReader *reader, struct Library *lib, str
 #define BLO_read_id_address(reader, lib, id_ptr_p) \
   *(id_ptr_p) = (void *)BLO_read_get_new_id_address((reader), (lib), (ID *)*(id_ptr_p))
 
+/* Misc. */
+bool BLO_read_lib_is_undo(BlendLibReader *reader);
+
 /* Blend Expand API
  * ===================
  *
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index aec5a254750..e9dcd5dddae 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -2430,7 +2430,7 @@ static int direct_link_id_restore_recalc(const FileData *fd,
 static void direct_link_id_common(
     BlendDataReader *reader, Library *current_library, ID *id, ID *id_old, const int tag)
 {
-  if (reader->fd->memfile == NULL) {
+  if (!BLO_read_data_is_undo(reader)) {
     /* When actually reading a file , we do want to reset/re-generate session uuids.
      * In undo case, we want to re-use existing ones. */
     id->session_uuid = MAIN_ID_SESSION_UUID_UNSET;
@@ -2471,7 +2471,7 @@ static void direct_link_id_common(
    *
    * But for regular file load we clear the flag, since the flags might have been changed since
    * the version the file has been saved with. */
-  if (reader->fd->memfile == NULL) {
+  if (!BLO_read_data_is_undo(reader)) {
     id->recalc = 0;
     id->recalc_after_undo_push = 0;
   }
@@ -2948,7 +2948,7 @@ static void lib_link_ntree(BlendLibReader *reader, Library *lib, bNodeTree *ntre
 
   /* For nodes with static socket layout, add/remove sockets as needed
    * to match the static layout. */
-  if (reader->fd->memfile == NULL) {
+  if (!BLO_read_lib_is_undo(reader)) {
     LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
       node_verify_socket_templates(ntree, node);
     }
@@ -3228,7 +3228,7 @@ static void lib_link_pose(BlendLibReader *reader, Object *ob, bPose *pose)
   /* always rebuild to match proxy or lib changes, but on Undo */
   bool rebuild = false;
 
-  if (reader->fd->memfile == NULL) {
+  if (!BLO_read_lib_is_undo(reader)) {
     if (ob->proxy || ob->id.lib != arm->id.lib) {
       rebuild = true;
     }
@@ -3587,7 +3587,7 @@ static void direct_link_image(BlendDataReader *reader, Image *ima)
   BLO_read_list(reader, &ima->tiles);
 
   BLO_read_list(reader, &(ima->renderslots));
-  if (reader->fd->memfile == NULL) {
+  if (!BLO_read_data_is_undo(reader)) {
     /* We reset this last render slot index only when actually reading a file, not for undo. */
     ima->last_render_slot = ima->render_slot;
   }
@@ -4803,9 +4803,10 @@ static void direct_link_object(BlendDataReader *reader, Object *ob)
    * Also when linking in a file don't allow edit and pose modes.
    * See [#34776, #42780] for more information.
    */
-  if (reader->fd->memfile || (ob->id.tag & (LIB_TAG_EXTERN | LIB_TAG_INDIRECT))) {
+  const bool is_undo = BLO_read_data_is_undo(reader);
+  if (is_undo || (ob->id.tag & (LIB_TAG_EXTERN | LIB_TAG_INDIRECT))) {
     ob->mode &= ~(OB_MODE_EDIT | OB_MODE_PARTICLE_EDIT);
-    if (!reader->fd->memfile) {
+    if (!is_undo) {
       ob->mode &= ~OB_MODE_POSE;
     }
   }
@@ -4982,7 +4983,7 @@ static void direct_link_object(BlendDataReader *reader, Object *ob)
   if (ob->sculpt) {
     ob->sculpt = NULL;
     /* Only create data on undo, otherwise rely on editor mode switching. */
-    if (reader->fd->memfile && (ob->mode & OB_MODE_ALL_SCULPT)) {
+    if (BLO_read_data_is_undo(reader) && (ob->mode & OB_MODE_ALL_SCULPT)) {
       BKE_object_sculpt_data_create(ob);
     }
   }
@@ -5859,7 +5860,7 @@ static void direct_link_scene(BlendDataReader *reader, Scene *sce)
     direct_link_view_layer(reader, view_layer);
   }
 
-  if (reader->fd->memfile) {
+  if (BLO_read_data_is_undo(reader)) {
     /* If it's undo do nothing here, caches are handled by higher-level generic calling code. */
   }
   else {
@@ -7306,7 +7307,7 @@ static void direct_link_sound(BlendDataReader *reader, bSound *sound)
     sound->cache = NULL;
   }
 
-  if (reader->fd->memfile != NULL) {
+  if (BLO_read_data_is_undo(reader)) {
     sound->tags |= SOUND_TAGS_WAVEFORM_NO_RELOAD;
   }
 
@@ -11243,6 +11244,16 @@ void BLO_read_pointer_array(BlendDataReader *reader, void **ptr_p)
   *ptr_p = final_array;
 }
 
+bool BLO_read_data_is_undo(BlendDataReader *reader)
+{
+  return reader->fd->memfile != NULL;
+}
+
+bool BLO_read_lib_is_undo(BlendLibReader *reader)
+{
+  return reader->fd->memfile != NULL;
+}
+
 void BLO_expand_id(BlendExpander *expander, ID *id)
 {
   expand_doit(expander->fd, expander->main, id);



More information about the Bf-blender-cvs mailing list