Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacques Lucke <jacques@blender.org>2020-08-28 17:29:55 +0300
committerJacques Lucke <jacques@blender.org>2020-08-28 17:29:55 +0300
commit368f8f740409e5c8af40e341597e89e9e861b584 (patch)
tree6f6ca211a69262e921944a451560ed7bc4b39686 /source/blender/blenloader
parent7b2fe4c9ec683bb7da270a54c44d301016e1470d (diff)
Blenloader: new api function to check if reading is for undo
Diffstat (limited to 'source/blender/blenloader')
-rw-r--r--source/blender/blenloader/BLO_read_write.h4
-rw-r--r--source/blender/blenloader/intern/readfile.c31
2 files changed, 25 insertions, 10 deletions
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);