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) {

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to