[Bf-blender-cvs] [0e268fb68b6] blender2.8: Fix topbar tool UI being lost on undo

Campbell Barton noreply at git.blender.org
Mon Oct 29 07:38:01 CET 2018


Commit: 0e268fb68b612e44a74a74631df206c8aaded97b
Author: Campbell Barton
Date:   Mon Oct 29 17:32:15 2018 +1100
Branches: blender2.8
https://developer.blender.org/rB0e268fb68b612e44a74a74631df206c8aaded97b

Fix topbar tool UI being lost on undo

Using operators to the object mode was resetting the tool.

See: T56865

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

M	source/blender/editors/include/ED_object.h
M	source/blender/editors/object/object_modes.c
M	source/blender/editors/undo/memfile_undo.c

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

diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h
index 1f58a6508b2..b71e7133c58 100644
--- a/source/blender/editors/include/ED_object.h
+++ b/source/blender/editors/include/ED_object.h
@@ -217,6 +217,7 @@ bool ED_object_mode_compat_test(const struct Object *ob, eObjectMode mode);
 bool ED_object_mode_compat_set(struct bContext *C, struct Object *ob, eObjectMode mode, struct ReportList *reports);
 void ED_object_mode_toggle(struct bContext *C, eObjectMode mode);
 void ED_object_mode_set(struct bContext *C, eObjectMode mode);
+void ED_object_mode_exit(struct bContext *C);
 
 bool ED_object_mode_generic_enter(
         struct bContext *C,
@@ -229,10 +230,6 @@ bool ED_object_mode_generic_has_data(
         struct Depsgraph *depsgraph,
         struct Object *ob);
 
-bool ED_object_mode_generic_exists(
-        struct wmWindowManager *wm, struct Object *ob,
-        eObjectMode object_mode);
-
 /* object_modifier.c */
 enum {
 	MODIFIER_APPLY_DATA = 1,
diff --git a/source/blender/editors/object/object_modes.c b/source/blender/editors/object/object_modes.c
index b9bfb44f680..ee075a94d29 100644
--- a/source/blender/editors/object/object_modes.c
+++ b/source/blender/editors/object/object_modes.c
@@ -38,6 +38,7 @@
 #include "BKE_object.h"
 #include "BKE_paint.h"
 #include "BKE_report.h"
+#include "BKE_layer.h"
 
 #include "WM_api.h"
 #include "WM_types.h"
@@ -176,6 +177,21 @@ void ED_object_mode_set(bContext *C, eObjectMode mode)
 	wm->op_undo_depth--;
 }
 
+void ED_object_mode_exit(bContext *C)
+{
+	Depsgraph *depsgraph = CTX_data_depsgraph(C);
+	struct Main *bmain = CTX_data_main(C);
+	Scene *scene = CTX_data_scene(C);
+	ViewLayer *view_layer = CTX_data_view_layer(C);
+	FOREACH_OBJECT_BEGIN(view_layer, ob)
+	{
+		if (ob->mode & OB_MODE_ALL_MODE_DATA) {
+			ED_object_mode_generic_exit(bmain, depsgraph, scene, ob);
+		}
+	}
+	FOREACH_OBJECT_END;
+}
+
 /** \} */
 
 /* -------------------------------------------------------------------- */
diff --git a/source/blender/editors/undo/memfile_undo.c b/source/blender/editors/undo/memfile_undo.c
index d45470ab0a1..4b38ab282a0 100644
--- a/source/blender/editors/undo/memfile_undo.c
+++ b/source/blender/editors/undo/memfile_undo.c
@@ -83,7 +83,7 @@ static bool memfile_undosys_step_encode(struct bContext *C, UndoStep *us_p)
 static void memfile_undosys_step_decode(struct bContext *C, UndoStep *us_p, int UNUSED(dir))
 {
 	/* Loading the content will correctly switch into compatible non-object modes. */
-	ED_object_mode_set(C, OB_MODE_OBJECT);
+	ED_object_mode_exit(C);
 
 	MemFileUndoStep *us = (MemFileUndoStep *)us_p;
 	BKE_memfile_undo_decode(us->data, C);



More information about the Bf-blender-cvs mailing list