[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