Fix wrong proxy pointer hanging around after making all local

The issue was caused because of the following circumstances:

- Making All Local will just iterate all IDs and clear linked flags
- It will not do anything with objects which are already local (and
  since proxy rig is local nothing will be changing it).

This commit makes it so id_clear_lib_data() takes care of clearing
all related proxy pointers, avoiding situations when proxy rig will
point to a local armature.

Reviewers: campbellbarton

Reviewed By: campbellbarton

Differential Revision: https://developer.blender.org/D1276
This commit is contained in:
Sergey Sharybin 2015-06-11 23:47:00 +02:00
parent 3fad13d564
commit e3f07d1f17
2 changed files with 10 additions and 1 deletions

View File

@ -1421,6 +1421,15 @@ void id_clear_lib_data(Main *bmain, ID *id)
if (ntree) {
ntree->id.lib = NULL;
}
if (GS(id->name) == ID_OB) {
Object *object = (Object*)id;
if (object->proxy_from != NULL) {
object->proxy_from->proxy = NULL;
object->proxy_from->proxy_group = NULL;
}
object->proxy = object->proxy_from = object->proxy_group = NULL;
}
}
/* next to indirect usage in read/writefile also in editobject.c scene.c */

View File

@ -1609,7 +1609,7 @@ void BKE_object_make_local(Object *ob)
if (ob->id.lib == NULL) return;
ob->proxy = ob->proxy_from = NULL;
ob->proxy = ob->proxy_from = ob->proxy_group = NULL;
if (ob->id.us == 1) {
id_clear_lib_data(bmain, &ob->id);