diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-02-07 10:33:19 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-02-07 10:35:05 +0300 |
commit | da128c12b513179e9fd9743aecb60824c221bb8e (patch) | |
tree | 3125054be1b5d8cac29651fc6fcffa1f31e6edcb | |
parent | 17f5d7f3c53da2cd90470efe13c54dc708297f4b (diff) |
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.
-rw-r--r-- | source/blender/blenkernel/BKE_workspace.h | 5 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/workspace.c | 16 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_event_system.c | 3 |
3 files changed, 24 insertions, 0 deletions
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); } } |