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:
authorLukas Tönne <lukas.toenne@gmail.com>2018-08-12 14:52:49 +0300
committerLukas Tönne <lukas.toenne@gmail.com>2018-08-12 14:52:49 +0300
commitdc2d841b7c50565302af2986d62ddbd29c332acd (patch)
tree324f234e56fde77fb80dfdef0c7c21f01968f71b /source/blender/blenkernel/intern/undo_system.c
parent27b28e437d974ebbafa234205941c07aa0ab546c (diff)
parent4b6fa4d897a0bb3252b16383492b526d2cef3920 (diff)
Merge branch 'blender2.8' into hair_guideshair_guides
Diffstat (limited to 'source/blender/blenkernel/intern/undo_system.c')
-rw-r--r--source/blender/blenkernel/intern/undo_system.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/undo_system.c b/source/blender/blenkernel/intern/undo_system.c
index 173b459f442..0eb209cabeb 100644
--- a/source/blender/blenkernel/intern/undo_system.c
+++ b/source/blender/blenkernel/intern/undo_system.c
@@ -255,6 +255,7 @@ void BKE_undosys_stack_clear_active(UndoStack *ustack)
static bool undosys_stack_push_main(UndoStack *ustack, const char *name, struct Main *bmain)
{
UNDO_NESTED_ASSERT(false);
+ BLI_assert(ustack->step_init == NULL);
CLOG_INFO(&LOG, 1, "'%s'", name);
bContext *C_temp = CTX_create();
CTX_data_main_set(C_temp, bmain);
@@ -442,7 +443,13 @@ bool BKE_undosys_step_push_with_type(UndoStack *ustack, bContext *C, const char
Main *bmain = G.main;
if (bmain->is_memfile_undo_written == false) {
const char *name_internal = "MemFile Internal";
- if (undosys_stack_push_main(ustack, name_internal, bmain)) {
+ /* Don't let 'step_init' cause issues when adding memfile undo step. */
+ void *step_init = ustack->step_init;
+ ustack->step_init = NULL;
+ const bool ok = undosys_stack_push_main(ustack, name_internal, bmain);
+ /* Restore 'step_init'. */
+ ustack->step_init = step_init;
+ if (ok) {
UndoStep *us = ustack->steps.last;
BLI_assert(STREQ(us->name, name_internal));
us->skip = true;
@@ -865,7 +872,7 @@ ID *BKE_undosys_ID_map_lookup_with_prev(const UndoIDPtrMap *map, ID *id_src, ID
return id_prev_match[1];
}
else {
- ID *id_dst = BKE_undosys_ID_map_lookup(map, id_src);
+ ID *id_dst = (id_src->lib == NULL) ? BKE_undosys_ID_map_lookup(map, id_src) : id_src;
id_prev_match[0] = id_src;
id_prev_match[1] = id_dst;
return id_dst;