[Bf-blender-cvs] [4461be1b722] master: Fix T55032: Redo w/ file saved in edit-mode failed

Campbell Barton noreply at git.blender.org
Tue May 15 19:37:43 CEST 2018


Commit: 4461be1b722a4f6e5af4854eb12023b3670a4c3d
Author: Campbell Barton
Date:   Tue May 15 19:30:59 2018 +0200
Branches: master
https://developer.blender.org/rB4461be1b722a4f6e5af4854eb12023b3670a4c3d

Fix T55032: Redo w/ file saved in edit-mode failed

It's important edit-mode has a step stored for redo to work,
file load now ensures this in a generic way.

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

M	source/blender/blenkernel/BKE_undo_system.h
M	source/blender/blenkernel/intern/undo_system.c
M	source/blender/windowmanager/intern/wm_files.c

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

diff --git a/source/blender/blenkernel/BKE_undo_system.h b/source/blender/blenkernel/BKE_undo_system.h
index 53ea8ddefe8..05093deec70 100644
--- a/source/blender/blenkernel/BKE_undo_system.h
+++ b/source/blender/blenkernel/BKE_undo_system.h
@@ -137,6 +137,7 @@ void            BKE_undosys_stack_destroy(UndoStack *ustack);
 void            BKE_undosys_stack_clear(UndoStack *ustack);
 bool            BKE_undosys_stack_has_undo(UndoStack *ustack, const char *name);
 void            BKE_undosys_stack_init_from_main(UndoStack *ustack, struct Main *bmain);
+void            BKE_undosys_stack_init_from_context(UndoStack *ustack, struct bContext *C);
 UndoStep       *BKE_undosys_stack_active_with_type(UndoStack *ustack, const UndoType *ut);
 UndoStep       *BKE_undosys_stack_init_or_active_with_type(UndoStack *ustack, const UndoType *ut);
 void            BKE_undosys_stack_limit_steps_and_memory(UndoStack *ustack, int steps, size_t memory_limit);
diff --git a/source/blender/blenkernel/intern/undo_system.c b/source/blender/blenkernel/intern/undo_system.c
index 5a0081bff16..7eaf42591f0 100644
--- a/source/blender/blenkernel/intern/undo_system.c
+++ b/source/blender/blenkernel/intern/undo_system.c
@@ -251,6 +251,15 @@ void BKE_undosys_stack_init_from_main(UndoStack *ustack, struct Main *bmain)
 	undosys_stack_push_main(ustack, "original", bmain);
 }
 
+/* called after 'BKE_undosys_stack_init_from_main' */
+void BKE_undosys_stack_init_from_context(UndoStack *ustack, bContext *C)
+{
+	const UndoType *ut = BKE_undosys_type_from_context(C);
+	if ((ut != NULL) && (ut != BKE_UNDOSYS_TYPE_MEMFILE) && (ut->mode == BKE_UNDOTYPE_MODE_STORE)) {
+		BKE_undosys_step_push_with_type(ustack, C, "original mode", ut);
+	}
+}
+
 /* name optional */
 bool BKE_undosys_stack_has_undo(UndoStack *ustack, const char *name)
 {
diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c
index da5ebd7abcd..1f85d764d45 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -516,14 +516,7 @@ static void wm_file_read_post(bContext *C, const bool is_startup_file, const boo
 	if (addons_loaded) {
 		wm_file_read_report(C);
 	}
-
-	if (!G.background) {
-		/* in background mode this makes it hard to load
-		 * a blend file and do anything since the screen
-		 * won't be set to a valid value again */
-		CTX_wm_window_set(C, NULL); /* exits queues */
-	}
-
+	
 	if (!G.background) {
 		if (wm->undo_stack == NULL) {
 			wm->undo_stack = BKE_undosys_stack_create();
@@ -532,6 +525,14 @@ static void wm_file_read_post(bContext *C, const bool is_startup_file, const boo
 			BKE_undosys_stack_clear(wm->undo_stack);
 		}
 		BKE_undosys_stack_init_from_main(wm->undo_stack, CTX_data_main(C));
+		BKE_undosys_stack_init_from_context(wm->undo_stack, C);
+	}
+
+	if (!G.background) {
+		/* in background mode this makes it hard to load
+		 * a blend file and do anything since the screen
+		 * won't be set to a valid value again */
+		CTX_wm_window_set(C, NULL); /* exits queues */
 	}
 }



More information about the Bf-blender-cvs mailing list