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}.
This commit is contained in:
2022-03-28 17:34:36 +02:00
parent 354db59fb1
commit 5596f79821
45 changed files with 195 additions and 118 deletions

View File

@@ -40,12 +40,21 @@
/* ********************************************** */
/* Helper API's for RigidBody Constraint Editing */
static bool operator_rigidbody_constraints_editable_poll(Scene *scene)
{
if (scene == NULL || ID_IS_LINKED(scene) || ID_IS_OVERRIDE_LIBRARY(scene) ||
(scene->rigidbody_world != NULL && scene->rigidbody_world->constraints != NULL &&
(ID_IS_LINKED(scene->rigidbody_world->constraints) ||
ID_IS_OVERRIDE_LIBRARY(scene->rigidbody_world->constraints)))) {
return false;
}
return true;
}
static bool ED_operator_rigidbody_con_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->constraints != NULL &&
ID_IS_LINKED(&scene->rigidbody_world->constraints->id))) {
if (!operator_rigidbody_constraints_editable_poll(scene)) {
return false;
}
@@ -59,9 +68,7 @@ static bool ED_operator_rigidbody_con_active_poll(bContext *C)
static bool ED_operator_rigidbody_con_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->constraints != NULL &&
ID_IS_LINKED(&scene->rigidbody_world->constraints->id))) {
if (!operator_rigidbody_constraints_editable_poll(scene)) {
return false;
}
return ED_operator_object_active_editable(C);