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:
authorClément Foucault <foucault.clem@gmail.com>2020-01-14 19:59:32 +0300
committerClément Foucault <foucault.clem@gmail.com>2020-01-14 19:59:40 +0300
commite2724abc22d53f3a1f1552a6f40af3d47f7512e4 (patch)
treeafcacb15cd271ca58c9b78a0e13263d4dcf0166c /source/blender/draw/engines/overlay/overlay_engine.c
parentff430dea663521f742ff2f8f79b5d7f4978ecc04 (diff)
Fix T72490 Collections: Exclude From View toggle causes segment violation
Diffstat (limited to 'source/blender/draw/engines/overlay/overlay_engine.c')
-rw-r--r--source/blender/draw/engines/overlay/overlay_engine.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/source/blender/draw/engines/overlay/overlay_engine.c b/source/blender/draw/engines/overlay/overlay_engine.c
index 56b9ed8f54a..a6d1555a753 100644
--- a/source/blender/draw/engines/overlay/overlay_engine.c
+++ b/source/blender/draw/engines/overlay/overlay_engine.c
@@ -177,6 +177,30 @@ BLI_INLINE OVERLAY_DupliData *OVERLAY_duplidata_get(Object *ob, void *vedata, bo
return NULL;
}
+static bool overlay_object_is_edit_mode(const OVERLAY_PrivateData *pd, const Object *ob)
+{
+ if ((ob->mode & OB_MODE_EDIT) && BKE_object_is_in_editmode(ob)) {
+ /* Also check for context mode as the object mode is not 100% reliable. (see T72490) */
+ switch (ob->type) {
+ case OB_MESH:
+ return pd->ctx_mode == CTX_MODE_EDIT_MESH;
+ case OB_ARMATURE:
+ return pd->ctx_mode == CTX_MODE_EDIT_ARMATURE;
+ case OB_CURVE:
+ return pd->ctx_mode == CTX_MODE_EDIT_CURVE;
+ case OB_SURF:
+ return pd->ctx_mode == CTX_MODE_EDIT_SURFACE;
+ case OB_LATTICE:
+ return pd->ctx_mode == CTX_MODE_EDIT_LATTICE;
+ case OB_MBALL:
+ return pd->ctx_mode == CTX_MODE_EDIT_METABALL;
+ case OB_FONT:
+ return pd->ctx_mode == CTX_MODE_EDIT_TEXT;
+ }
+ }
+ return false;
+}
+
static void OVERLAY_cache_populate(void *vedata, Object *ob)
{
OVERLAY_Data *data = vedata;
@@ -185,7 +209,7 @@ static void OVERLAY_cache_populate(void *vedata, Object *ob)
const bool is_select = DRW_state_is_select();
const bool renderable = DRW_object_is_renderable(ob);
const bool in_pose_mode = ob->type == OB_ARMATURE && OVERLAY_armature_is_pose_mode(ob, draw_ctx);
- const bool in_edit_mode = (ob->mode & OB_MODE_EDIT) && BKE_object_is_in_editmode(ob);
+ const bool in_edit_mode = overlay_object_is_edit_mode(pd, ob);
const bool in_particle_edit_mode = ob->mode == OB_MODE_PARTICLE_EDIT;
const bool in_paint_mode = (ob == draw_ctx->obact) &&
(draw_ctx->object_mode & OB_MODE_ALL_PAINT);