Only sort directory when necessary

This commit is contained in:
Yorhel 2009-04-18 15:45:26 +02:00
parent 33cd126197
commit ddd8a639b7

View file

@ -147,8 +147,11 @@ struct dir *browse_sort(struct dir *list) {
p = q; p = q;
} }
tail->next = NULL; tail->next = NULL;
if(nmerges <= 1) if(nmerges <= 1) {
if(list->parent)
list->parent->sub = list;
return list; return list;
}
insize *= 2; insize *= 2;
} }
} }
@ -255,10 +258,6 @@ int browse_draw() {
if(!cur) if(!cur)
return 0; return 0;
/* TODO: don't sort when it's not necessary */
cur = browse_dir = browse_sort(cur);
cur->parent->sub = cur;
/* add reference to parent dir */ /* add reference to parent dir */
memset(&ref, 0, sizeof(struct dir)); memset(&ref, 0, sizeof(struct dir));
if(cur->parent->parent) { if(cur->parent->parent) {
@ -337,6 +336,7 @@ void browse_key_sel(int change) {
int browse_key(int ch) { int browse_key(int ch) {
char tmp[PATH_MAX]; char tmp[PATH_MAX];
char sort = 0;
struct dir *n; struct dir *n;
switch(ch) { switch(ch) {
@ -368,6 +368,7 @@ int browse_key(int ch) {
toggle(flags, BF_DESC); toggle(flags, BF_DESC);
else else
flags = (flags & BF_HIDE) + (flags & BF_NDIRF) + BF_NAME; flags = (flags & BF_HIDE) + (flags & BF_NDIRF) + BF_NAME;
sort++;
break; break;
case 's': case 's':
hideinfo; hideinfo;
@ -375,6 +376,7 @@ int browse_key(int ch) {
toggle(flags, BF_DESC); toggle(flags, BF_DESC);
else else
flags = (flags & BF_HIDE) + (flags & BF_NDIRF) + BF_SIZE + BF_DESC; flags = (flags & BF_HIDE) + (flags & BF_NDIRF) + BF_SIZE + BF_DESC;
sort++;
break; break;
case 'h': case 'h':
hideinfo; hideinfo;
@ -384,6 +386,7 @@ int browse_key(int ch) {
case 't': case 't':
hideinfo; hideinfo;
toggle(flags, BF_NDIRF); toggle(flags, BF_NDIRF);
sort++;
break; break;
case 'a': case 'a':
hideinfo; hideinfo;
@ -401,17 +404,20 @@ int browse_key(int ch) {
browse_dir = n->sub; browse_dir = n->sub;
if(n == NULL && browse_dir->parent->parent) if(n == NULL && browse_dir->parent->parent)
browse_dir = browse_dir->parent->parent->sub; browse_dir = browse_dir->parent->parent->sub;
sort++;
break; break;
case KEY_LEFT: case KEY_LEFT:
hideinfo; hideinfo;
if(browse_dir->parent->parent != NULL) if(browse_dir->parent->parent != NULL)
browse_dir = browse_dir->parent->parent->sub; browse_dir = browse_dir->parent->parent->sub;
sort++;
break; break;
/* refresh */ /* refresh */
case 'r': case 'r':
hideinfo; hideinfo;
calc_init(getpath(browse_dir, tmp), browse_dir->parent); calc_init(getpath(browse_dir, tmp), browse_dir->parent);
sort++;
break; break;
/* and other stuff */ /* and other stuff */
@ -440,6 +446,9 @@ int browse_key(int ch) {
break; break;
*/ */
} }
if(sort)
browse_dir = browse_sort(browse_dir);
return 0; return 0;
} }
@ -450,5 +459,6 @@ void browse_init(struct dir *cur) {
browse_dir = cur->sub; browse_dir = cur->sub;
else else
browse_dir = cur; browse_dir = cur;
browse_dir = browse_sort(browse_dir);
} }