Commit: d46c9b876c99e0cc3e89d534f7c9c8f4c932064e
Author: Bastien Montagne
Date:   Wed Jan 7 12:05:23 2015 +0100
Branches: asset-experiments
https://developer.blender.org/rBd46c9b876c99e0cc3e89d534f7c9c8f4c932064e

Merge branch 'master' into asset-experiments

Conflicts:
        source/blender/editors/space_file/filelist.c

===================================================================



===================================================================

diff --cc source/blender/editors/interface/interface.c
index c80d474,0b1d1c8..599d104
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@@ -3071,28 -3083,8 +3103,22 @@@ static uiBut *ui_def_but(uiBlock *block
        but->retval = retval;
  
        slen = strlen(str);
-       if (slen >= UI_MAX_NAME_STR) {
-               but->str = MEM_mallocN(slen + 1, "ui_def_but str");
-       }
-       else {
-               but->str = but->strdata;
-       }
-       memcpy(but->str, str, slen + 1);
+       ui_but_string_set_internal(but, str, slen);
  
 +      if (tip) {
 +              slen = strlen(tip);
 +              if (slen >= UI_MAX_NAME_STR) {
 +                      but->tip = MEM_mallocN(slen + 1, "ui_def_but tip");
 +              }
 +              else {
 +                      but->tip = but->tipdata;
 +              }
 +              memcpy(but->tip, tip, slen + 1);
 +      }
 +      else {
 +              but->tip = NULL;
 +      }
 +
        but->rect.xmin = x;
        but->rect.ymin = y;
        but->rect.xmax = but->rect.xmin + width;
diff --cc source/blender/editors/space_file/filelist.c
index 9490028,bcef081..4cf13ed
--- a/source/blender/editors/space_file/filelist.c
+++ b/source/blender/editors/space_file/filelist.c
@@@ -337,41 -308,30 +333,37 @@@ static int compare_direntry_generic(con
        if (strcmp(entry2->relname, ".") == 0) return (1);
        if (strcmp(entry1->relname, "..") == 0) return (-1);
        if (strcmp(entry2->relname, "..") == 0) return (1);
+       
+       return 0;
+ }
+ 
+ static int compare_name(const void *a1, const void *a2)
+ {
+       const struct direntry *entry1 = a1, *entry2 = a2;
++      char dir1[FILE_MAX_LIBEXTRA], dir2[FILE_MAX_LIBEXTRA];
++      char *name1, *name2;
+       int ret;
+ 
+       if ((ret = compare_direntry_generic(entry1, entry2))) {
+               return ret;
+       }
  
 -      return (BLI_natstrcmp(entry1->relname, entry2->relname));
 +      name1 = fileentry_uiname(entry1, dir1);
 +      name2 = fileentry_uiname(entry2, dir2);
 +
 +      return BLI_natstrcmp(name1, name2);
  }
  
  static int compare_date(const void *a1, const void *a2)       
  {
        const struct direntry *entry1 = a1, *entry2 = a2;
 +      char dir1[FILE_MAX_LIBEXTRA], dir2[FILE_MAX_LIBEXTRA];
 +      char *name1, *name2;
+       int ret;
 -      
 +
-       /* type is equal to stat.st_mode */
- 
-       if (compare_is_directory(entry1)) {
-               if (compare_is_directory(entry2) == 0) return (-1);
-       }
-       else {
-               if (compare_is_directory(entry2)) return (1);
-       }
-       if (S_ISREG(entry1->type)) {
-               if (S_ISREG(entry2->type) == 0) return (-1);
+       if ((ret = compare_direntry_generic(entry1, entry2))) {
+               return ret;
        }
-       else {
-               if (S_ISREG(entry2->type)) return (1);
-       }
-       if ((entry1->type & S_IFMT) < (entry2->type & S_IFMT)) return (-1);
-       if ((entry1->type & S_IFMT) > (entry2->type & S_IFMT)) return (1);
- 
-       /* make sure "." and ".." are always first */
-       if (strcmp(entry1->relname, ".") == 0) return (-1);
-       if (strcmp(entry2->relname, ".") == 0) return (1);
-       if (strcmp(entry1->relname, "..") == 0) return (-1);
-       if (strcmp(entry2->relname, "..") == 0) return (1);
        
        if (entry1->s.st_mtime < entry2->s.st_mtime) return 1;
        if (entry1->s.st_mtime > entry2->s.st_mtime) return -1;
@@@ -385,31 -342,11 +377,13 @@@
  static int compare_size(const void *a1, const void *a2)       
  {
        const struct direntry *entry1 = a1, *entry2 = a2;
 +      char dir1[FILE_MAX_LIBEXTRA], dir2[FILE_MAX_LIBEXTRA];
 +      char *name1, *name2;
+       int ret;
  
-       /* type is equal to stat.st_mode */
- 
-       if (compare_is_directory(entry1)) {
-               if (compare_is_directory(entry2) == 0) return (-1);
+       if ((ret = compare_direntry_generic(entry1, entry2))) {
+               return ret;
        }
-       else {
-               if (compare_is_directory(entry2)) return (1);
-       }
-       if (S_ISREG(entry1->type)) {
-               if (S_ISREG(entry2->type) == 0) return (-1);
-       }
-       else {
-               if (S_ISREG(entry2->type)) return (1);
-       }
-       if ((entry1->type & S_IFMT) < (entry2->type & S_IFMT)) return (-1);
-       if ((entry1->type & S_IFMT) > (entry2->type & S_IFMT)) return (1);
- 
-       /* make sure "." and ".." are always first */
-       if (strcmp(entry1->relname, ".") == 0) return (-1);
-       if (strcmp(entry2->relname, ".") == 0) return (1);
-       if (strcmp(entry1->relname, "..") == 0) return (-1);
-       if (strcmp(entry2->relname, "..") == 0) return (1);
        
        if (entry1->s.st_size < entry2->s.st_size) return 1;
        if (entry1->s.st_size > entry2->s.st_size) return -1;
@@@ -433,58 -371,7 +412,34 @@@ static int compare_extension(const voi
        if (!sufix1) sufix1 = nil;
        if (!sufix2) sufix2 = nil;
  
-       /* type is equal to stat.st_mode */
- 
-       if (compare_is_directory(entry1)) {
-               if (compare_is_directory(entry2) == 0) return (-1);
-       }
-       else {
-               if (compare_is_directory(entry2)) return (1);
-       }
- 
-       if (S_ISREG(entry1->type)) {
-               if (S_ISREG(entry2->type) == 0) return (-1);
-       }
-       else {
-               if (S_ISREG(entry2->type)) return (1);
-       }
-       if ((entry1->type & S_IFMT) < (entry2->type & S_IFMT)) return (-1);
-       if ((entry1->type & S_IFMT) > (entry2->type & S_IFMT)) return (1);
- 
-       /* make sure "." and ".." are always first */
-       if (strcmp(entry1->relname, ".") == 0) return (-1);
-       if (strcmp(entry2->relname, ".") == 0) return (1);
-       if (strcmp(entry1->relname, "..") == 0) return (-1);
-       if (strcmp(entry2->relname, "..") == 0) return (1);
- 
 -      return (BLI_strcasecmp(sufix1, sufix2));
 +      if ((entry1->flags & FILE_TYPE_BLENDERLIB) && !(entry2->flags & 
FILE_TYPE_BLENDERLIB)) return -1;
 +      if (!(entry1->flags & FILE_TYPE_BLENDERLIB) && (entry2->flags & 
FILE_TYPE_BLENDERLIB)) return 1;
 +      if ((entry1->flags & FILE_TYPE_BLENDERLIB) && (entry2->flags & 
FILE_TYPE_BLENDERLIB)) {
 +              char lib1[FILE_MAX_LIBEXTRA], lib2[FILE_MAX_LIBEXTRA];
 +              char *group1, *group2, *name1, *name2;
 +              int grp_comp;
 +
 +              BLO_library_path_explode(entry1->path, lib1, &group1, &name1);
 +              BLO_library_path_explode(entry2->path, lib2, &group2, &name2);
 +
 +              BLI_assert(group1);
 +              BLI_assert(group2);
 +
 +              grp_comp = strcmp(group1, group2);
 +              if (grp_comp != 0 || (!name1 && !name2)) {
 +                      return grp_comp;
 +              }
 +
 +              if (!name1) {
 +                      return -1;
 +              }
 +              if (!name2) {
 +                      return 1;
 +              }
 +              return BLI_strcasecmp(name1, name2);
 +      }
 +
 +      return BLI_strcasecmp(sufix1, sufix2);
  }
  
  bool filelist_need_sorting(struct FileList *filelist)

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

Reply via email to