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);
                }
        }

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to