diff options
author | Campbell Barton <ideasman42@gmail.com> | 2014-08-21 11:00:35 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2014-08-21 11:05:47 +0400 |
commit | e44cd30abbe9ae662fb2557f1a1f7a6e5c01498f (patch) | |
tree | f746293e80d9d5b083e1b4fa9b7355e7ce57130e /source/blender/editors/object/object_relations.c | |
parent | afa6d4e21f1968f24f8a1ca197cdeb75a70eeb28 (diff) |
Fix T41507: Empty prevents image deletion
Also allow assigning `Object.data = None` from Python
Diffstat (limited to 'source/blender/editors/object/object_relations.c')
-rw-r--r-- | source/blender/editors/object/object_relations.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/source/blender/editors/object/object_relations.c b/source/blender/editors/object/object_relations.c index f6d1df4e8d4..08e30447204 100644 --- a/source/blender/editors/object/object_relations.c +++ b/source/blender/editors/object/object_relations.c @@ -2399,3 +2399,55 @@ void OBJECT_OT_drop_named_material(wmOperatorType *ot) /* properties */ RNA_def_string(ot->srna, "name", "Material", MAX_ID_NAME - 2, "Name", "Material name to assign"); } + +static int object_unlink_data_exec(bContext *C, wmOperator *op) +{ + ID *id; + PropertyPointerRNA pprop; + + uiIDContextProperty(C, &pprop.ptr, &pprop.prop); + + if (pprop.prop == NULL) { + BKE_report(op->reports, RPT_ERROR, "Incorrect context for running object data unlink"); + return OPERATOR_CANCELLED; + } + + id = pprop.ptr.id.data; + + if (GS(id->name) == ID_OB) { + Object *ob = (Object *)id; + if (ob->data) { + ID *id_data = ob->data; + + if (GS(id_data->name) == ID_IM) { + id_us_min(id_data); + ob->data = NULL; + } + else { + BKE_report(op->reports, RPT_ERROR, "Can't unlink this object data"); + return OPERATOR_CANCELLED; + } + } + } + + RNA_property_update(C, &pprop.ptr, pprop.prop); + + return OPERATOR_FINISHED; +} + +/** + * \note Only for empty-image objects, this operator is needed + */ +void OBJECT_OT_unlink_data(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Unlink"; + ot->idname = "OBJECT_OT_unlink_data"; + ot->description = ""; + + /* api callbacks */ + ot->exec = object_unlink_data_exec; + + /* flags */ + ot->flag = OPTYPE_INTERNAL; +} |