[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [45449] trunk/blender/source/blender: Fix #30798: when linking a datablock, it got simply added to the back of the

Brecht Van Lommel brechtvanlommel at pandora.be
Fri Apr 6 18:19:30 CEST 2012


Revision: 45449
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45449
Author:   blendix
Date:     2012-04-06 16:19:30 +0000 (Fri, 06 Apr 2012)
Log Message:
-----------
Fix #30798: when linking a datablock, it got simply added to the back of the
list, now the linked datablocks are sorted by name too (but still appear after
the non-linked datablocks).

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_library.h
    trunk/blender/source/blender/blenkernel/intern/library.c
    trunk/blender/source/blender/blenloader/intern/readfile.c

Modified: trunk/blender/source/blender/blenkernel/BKE_library.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_library.h	2012-04-06 16:08:14 UTC (rev 45448)
+++ trunk/blender/source/blender/blenkernel/BKE_library.h	2012-04-06 16:19:30 UTC (rev 45449)
@@ -58,6 +58,7 @@
 int id_single_user(struct bContext *C, struct ID *id, struct PointerRNA *ptr, struct PropertyRNA *prop);
 int id_copy(struct ID *id, struct ID **newid, int test);
 int id_unlink(struct ID *id, int test);
+void id_sort_by_name(struct ListBase *lb, struct ID *id);
 
 int new_id(struct ListBase *lb, struct ID *id, const char *name);
 void id_clear_lib_data(struct Main *bmain, struct ID *id);

Modified: trunk/blender/source/blender/blenkernel/intern/library.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/library.c	2012-04-06 16:08:14 UTC (rev 45448)
+++ trunk/blender/source/blender/blenkernel/intern/library.c	2012-04-06 16:19:30 UTC (rev 45449)
@@ -1076,7 +1076,7 @@
 	BLI_dynstr_free(pupds);
 }
 
-static void sort_alpha_id(ListBase *lb, ID *id)
+void id_sort_by_name(ListBase *lb, ID *id)
 {
 	ID *idtest;
 	
@@ -1086,7 +1086,7 @@
 		
 		idtest= lb->first;
 		while (idtest) {
-			if (BLI_strcasecmp(idtest->name, id->name)>0 || idtest->lib) {
+			if (BLI_strcasecmp(idtest->name, id->name)>0 || (idtest->lib && !id->lib)) {
 				BLI_insertlinkbefore(lb, idtest, id);
 				break;
 			}
@@ -1270,10 +1270,10 @@
 	 * functions work, so sort every time */
 #if 0
 	if ( result )
-		sort_alpha_id(lb, id);
+		id_sort_by_name(lb, id);
 #endif
 
-	sort_alpha_id(lb, id);
+	id_sort_by_name(lb, id);
 	
 	return result;
 }
@@ -1415,7 +1415,7 @@
 
 						/* why sort alphabetically here but not in
 						 * id_clear_lib_data() ? - campbell */
-						sort_alpha_id(lbarray[a], id);
+						id_sort_by_name(lbarray[a], id);
 					}
 					else {
 						id->flag &= ~(LIB_EXTERN|LIB_INDIRECT|LIB_NEW);
@@ -1455,7 +1455,7 @@
 	/* search for id */
 	idtest= BLI_findstring(lb, name, offsetof(ID, name) + 2);
 
-	if (idtest) if ( new_id(lb, idtest, name)==0 ) sort_alpha_id(lb, idtest);
+	if (idtest) if ( new_id(lb, idtest, name)==0 ) id_sort_by_name(lb, idtest);
 }
 
 void text_idbutton(struct ID *id, char *text)

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2012-04-06 16:08:14 UTC (rev 45448)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2012-04-06 16:19:30 UTC (rev 45449)
@@ -14587,9 +14587,17 @@
 				found= 1;
 				id= is_yet_read(fd, mainl, bhead);
 				if (id==NULL) {
+					/* not read yet */
 					read_libblock(fd, mainl, bhead, LIB_TESTEXT, &id);
+
+					if (id) {
+						/* sort by name in list */
+						ListBase *lb= which_libbase(mainl, idcode);
+						id_sort_by_name(lb, id);
+					}
 				}
 				else {
+					/* already linked */
 					printf("append: already linked\n");
 					oldnewmap_insert(fd->libmap, bhead->old, id, 1);
 					if (id->flag & LIB_INDIRECT) {




More information about the Bf-blender-cvs mailing list