[Bf-blender-cvs] [da128c12b51] blender2.8: Fix error with Main.eval_ctx.object_mode being unset

Campbell Barton noreply at git.blender.org
Wed Feb 7 08:36:00 CET 2018


Commit: da128c12b513179e9fd9743aecb60824c221bb8e
Author: Campbell Barton
Date:   Wed Feb 7 18:33:19 2018 +1100
Branches: blender2.8
https://developer.blender.org/rBda128c12b513179e9fd9743aecb60824c221bb8e

Fix error with Main.eval_ctx.object_mode being unset

This made vertex/weight/sculpt crash.

Add BKE_workspace_update_object_mode which sets the object mode from the
workspace.

We may want to re-visit exactly when this is set, for now call within
wm_event_do_refresh_wm_and_depsgraph.

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

M	source/blender/blenkernel/BKE_workspace.h
M	source/blender/blenkernel/intern/workspace.c
M	source/blender/windowmanager/intern/wm_event_system.c

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

diff --git a/source/blender/blenkernel/BKE_workspace.h b/source/blender/blenkernel/BKE_workspace.h
index 9f989f7ae8f..1c1f15ec99a 100644
--- a/source/blender/blenkernel/BKE_workspace.h
+++ b/source/blender/blenkernel/BKE_workspace.h
@@ -149,6 +149,11 @@ void BKE_workspace_update_tagged(struct EvaluationContext *eval_ctx,
                                  struct WorkSpace *workspace,
                                  struct Scene *scene);
 
+void BKE_workspace_update_object_mode(
+        struct EvaluationContext *eval_ctx,
+        struct WorkSpace *workspace,
+        struct Scene *scene);
+
 #undef GETTER_ATTRS
 #undef SETTER_ATTRS
 
diff --git a/source/blender/blenkernel/intern/workspace.c b/source/blender/blenkernel/intern/workspace.c
index 8554cf0fb28..4b6bd3ac35b 100644
--- a/source/blender/blenkernel/intern/workspace.c
+++ b/source/blender/blenkernel/intern/workspace.c
@@ -45,6 +45,8 @@
 #include "DNA_screen_types.h"
 #include "DNA_workspace_types.h"
 
+#include "DEG_depsgraph.h"
+
 #include "MEM_guardedalloc.h"
 
 
@@ -521,3 +523,17 @@ void BKE_workspace_update_tagged(struct EvaluationContext *eval_ctx,
 	                                                      true);
 	BKE_scene_graph_update_tagged(eval_ctx, depsgraph, bmain, scene, view_layer);
 }
+
+void BKE_workspace_update_object_mode(
+        struct EvaluationContext *eval_ctx,
+        WorkSpace *workspace, Scene *scene)
+{
+	ViewLayer *view_layer = BKE_workspace_view_layer_get(workspace, scene);
+
+	/* TODO(campbell): Investigate how this should work exactly,
+	 * for now without this 'bmain->eval_ctx' is never set. */
+	{
+		Object *ob = view_layer->basact ? view_layer->basact->object : NULL;
+		eval_ctx->object_mode = ob ? (eObjectMode)ob->mode : OB_MODE_OBJECT;
+	}
+}
\ No newline at end of file
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index 133ac6564f8..5d34d0a7549 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -339,6 +339,9 @@ void wm_event_do_refresh_wm_and_depsgraph(bContext *C)
 			scene->customdata_mask |= scene->customdata_mask_modal;
 
 			WorkSpace *workspace = WM_window_get_active_workspace(win);
+
+			BKE_workspace_update_object_mode(bmain->eval_ctx, workspace, scene);
+
 			BKE_workspace_update_tagged(bmain->eval_ctx, bmain, workspace, scene);
 		}
 	}



More information about the Bf-blender-cvs mailing list