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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user