Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorBastien Montagne <montagne29@wanadoo.fr>2015-11-09 16:44:53 +0300
committerBastien Montagne <montagne29@wanadoo.fr>2015-11-09 16:53:03 +0300
commit18ecc8a78f9eba45e513f7903989ef88cffbdb54 (patch)
treee57af8abbd2d1cd6cc10c25777a2dc48d880f9da /source
parentff3cf93405e63fa367f64412bcfe96b382b24b38 (diff)
Fix broken groupobject usercount handling.
As we can see in (original) read code, ob pointer in groupobject is actually a 'USER_ONE' case. This was not done in 'add object to group' code, probably because we can assume objects always have at least one user in that case? Made it explicit now. Also fixed foreach_ID_link looper. In general we have waaayyyyyy too much 'own handling' of ID->us count in code currently, will clean up that...
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/intern/group.c1
-rw-r--r--source/blender/blenkernel/intern/library_query.c2
-rw-r--r--source/blender/blenloader/intern/readfile.c13
3 files changed, 9 insertions, 7 deletions
diff --git a/source/blender/blenkernel/intern/group.c b/source/blender/blenkernel/intern/group.c
index 150226523f2..96cf0fe574a 100644
--- a/source/blender/blenkernel/intern/group.c
+++ b/source/blender/blenkernel/intern/group.c
@@ -182,6 +182,7 @@ static bool group_object_add_internal(Group *group, Object *ob)
BLI_addtail(&group->gobject, go);
go->ob = ob;
+ id_us_ensure_real(&go->ob->id);
return true;
}
diff --git a/source/blender/blenkernel/intern/library_query.c b/source/blender/blenkernel/intern/library_query.c
index a800b3d8834..002007e2a58 100644
--- a/source/blender/blenkernel/intern/library_query.c
+++ b/source/blender/blenkernel/intern/library_query.c
@@ -514,7 +514,7 @@ void BKE_library_foreach_ID_link(ID *id, LibraryIDLinkCallback callback, void *u
Group *group = (Group *) id;
GroupObject *gob;
for (gob = group->gobject.first; gob; gob = gob->next) {
- CALLBACK_INVOKE(gob->ob, IDWALK_NOP);
+ CALLBACK_INVOKE(gob->ob, IDWALK_USER_ONE);
}
break;
}
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 2060894dc30..6c6af2d1fc6 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -7268,25 +7268,26 @@ static void lib_link_group(FileData *fd, Main *main)
{
Group *group;
GroupObject *go;
- int add_us;
+ bool add_us;
for (group = main->group.first; group; group = group->id.next) {
if (group->id.flag & LIB_NEED_LINK) {
group->id.flag -= LIB_NEED_LINK;
- add_us = 0;
+ add_us = false;
for (go = group->gobject.first; go; go = go->next) {
go->ob= newlibadr(fd, group->id.lib, go->ob);
if (go->ob) {
go->ob->flag |= OB_FROMGROUP;
/* if group has an object, it increments user... */
- add_us = 1;
- if (go->ob->id.us == 0)
- go->ob->id.us = 1;
+ add_us = true;
+ id_us_ensure_real(&go->ob->id);
}
}
- if (add_us) group->id.us++;
+ if (add_us) {
+ id_us_ensure_real(&group->id);
+ }
BKE_group_object_unlink(group, NULL, NULL, NULL); /* removes NULL entries */
}
}