[Bf-blender-cvs] [3dfd063] id-remap: Merge branch 'master' into id-remap
Bastien Montagne
noreply at git.blender.org
Wed Feb 24 10:34:33 CET 2016
Commit: 3dfd063697428282a535b9e62fdb8436f5d3ca6b
Author: Bastien Montagne
Date: Wed Feb 24 10:26:50 2016 +0100
Branches: id-remap
https://developer.blender.org/rB3dfd063697428282a535b9e62fdb8436f5d3ca6b
Merge branch 'master' into id-remap
Conflicts:
source/blender/blenkernel/intern/library.c
===================================================================
===================================================================
diff --cc source/blender/blenkernel/intern/library.c
index 6b95b6c,c04eda0..983615f
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@@ -182,7 -182,8 +182,7 @@@ void id_us_ensure_real(ID *id
}
}
- static void id_us_clear_real(ID *id)
-/* Unused currently... */
+ void id_us_clear_real(ID *id)
{
if (id && (id->tag & LIB_TAG_EXTRAUSER)) {
if (id->tag & LIB_TAG_EXTRAUSER_SET) {
@@@ -206,13 -207,8 +206,8 @@@ void id_us_plus(ID *id
void id_us_min(ID *id)
{
if (id) {
- const int limit = ID_FAKE_USERS(id);
+ const int limit = ID_FAKE_USERS(id);
- if ((id->us == limit) && (id->tag & LIB_TAG_EXTRAUSER) && !(id->tag & LIB_TAG_EXTRAUSER_SET)) {
- /* We need an extra user here, but never actually incremented user count for it so far, do it now. */
- id_us_ensure_real(id);
- }
-
if (id->us <= limit) {
printf("ID user decrement error: %s (from '%s'): %d <= %d\n",
id->name, id->lib ? id->lib->filepath : "[Main]", id->us, limit);
@@@ -1642,8 -1298,22 +1642,18 @@@ void BKE_libblock_free_us(Main *bmain,
id_us_min(id);
+ /* XXX This is a temp (2.77) hack so that we keep same behavior as in 2.76 regarding groups when deleting an object.
+ * Since only 'user_one' usage of objects is groups, and only 'real user' usage of objects is scenes,
+ * removing that 'user_one' tag when there is no more real (scene) users of an object ensures it gets
+ * fully unlinked.
+ * Otherwise, there is no real way to get rid of an object anymore - better handling of this is TODO.
+ */
+ if ((GS(id->name) == ID_OB) && (id->us == 1)) {
+ id_us_clear_real(id);
+ }
+
if (id->us == 0) {
- switch (GS(id->name)) {
- case ID_OB:
- BKE_object_unlink(bmain, (Object *)id);
- break;
- }
+ BKE_libblock_unlink(bmain, id, false);
BKE_libblock_free(bmain, id);
}
More information about the Bf-blender-cvs
mailing list