Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2018-02-07 10:33:19 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-02-07 10:35:05 +0300
commitda128c12b513179e9fd9743aecb60824c221bb8e (patch)
tree3125054be1b5d8cac29651fc6fcffa1f31e6edcb
parent17f5d7f3c53da2cd90470efe13c54dc708297f4b (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.h5
-rw-r--r--source/blender/blenkernel/intern/workspace.c16
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c3
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);
}
}