diff options
author | Bastien Montagne <bastien@blender.org> | 2022-03-28 18:34:36 +0300 |
---|---|---|
committer | Bastien Montagne <bastien@blender.org> | 2022-03-29 18:59:55 +0300 |
commit | 5596f79821caae3d4c1eb608ce77371904f74b80 (patch) | |
tree | 92dbb06728dd7bbecfa71d17dbe25cde49dfdeb5 /source/blender/editors/physics/rigidbody_object.c | |
parent | 354db59fb12a5ee595ae650ac3a736e3cc6df39d (diff) |
LibOverride: Massive edits to 'editable' IDs checks in editors code.
Add new `BKE_id_is_editable` helper in `BKE_lib_id.h`, that supercedes
previous check (simple `ID_IS_LINKED()` macro) for many editing cases.
This allows to also take into account 'system override' (aka
non-editable override) case.
Ref: {T95707}.
Diffstat (limited to 'source/blender/editors/physics/rigidbody_object.c')
-rw-r--r-- | source/blender/editors/physics/rigidbody_object.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/source/blender/editors/physics/rigidbody_object.c b/source/blender/editors/physics/rigidbody_object.c index 8f69947ceb0..5ff687bce1a 100644 --- a/source/blender/editors/physics/rigidbody_object.c +++ b/source/blender/editors/physics/rigidbody_object.c @@ -44,12 +44,21 @@ /* ********************************************** */ /* Helper API's for RigidBody Objects Editing */ +static bool operator_rigidbody_editable_poll(Scene *scene) +{ + if (scene == NULL || ID_IS_LINKED(scene) || ID_IS_OVERRIDE_LIBRARY(scene) || + (scene->rigidbody_world != NULL && scene->rigidbody_world->group != NULL && + (ID_IS_LINKED(scene->rigidbody_world->group) || + ID_IS_OVERRIDE_LIBRARY(scene->rigidbody_world->group)))) { + return false; + } + return true; +} + static bool ED_operator_rigidbody_active_poll(bContext *C) { Scene *scene = CTX_data_scene(C); - if (scene == NULL || ID_IS_LINKED(&scene->id) || - (scene->rigidbody_world != NULL && scene->rigidbody_world->group != NULL && - ID_IS_LINKED(&scene->rigidbody_world->group->id))) { + if (!operator_rigidbody_editable_poll(scene)) { return false; } @@ -57,15 +66,14 @@ static bool ED_operator_rigidbody_active_poll(bContext *C) Object *ob = ED_object_active_context(C); return (ob && ob->rigidbody_object); } - return 0; + + return false; } static bool ED_operator_rigidbody_add_poll(bContext *C) { Scene *scene = CTX_data_scene(C); - if (scene == NULL || ID_IS_LINKED(&scene->id) || - (scene->rigidbody_world != NULL && scene->rigidbody_world->group != NULL && - ID_IS_LINKED(&scene->rigidbody_world->group->id))) { + if (!operator_rigidbody_editable_poll(scene)) { return false; } @@ -73,6 +81,7 @@ static bool ED_operator_rigidbody_add_poll(bContext *C) Object *ob = ED_object_active_context(C); return (ob && ob->type == OB_MESH); } + return false; } |