diff options
author | Yorhel <git@yorhel.nl> | 2009-04-18 15:45:26 +0200 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2009-04-18 15:45:58 +0200 |
commit | ddd8a639b764b377ac3adfd4aee0a06a9009abc6 (patch) | |
tree | f6a14788eaee20fe81127ddaff299ef98eb93c34 | |
parent | 33cd12619767466f5e07c6bdb6f4664246953af4 (diff) |
Only sort directory when necessary
-rw-r--r-- | src/browser.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/browser.c b/src/browser.c index b7b9fd3..8597b48 100644 --- a/src/browser.c +++ b/src/browser.c @@ -147,8 +147,11 @@ struct dir *browse_sort(struct dir *list) { p = q; } tail->next = NULL; - if(nmerges <= 1) + if(nmerges <= 1) { + if(list->parent) + list->parent->sub = list; return list; + } insize *= 2; } } @@ -255,10 +258,6 @@ int browse_draw() { if(!cur) 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 */ memset(&ref, 0, sizeof(struct dir)); if(cur->parent->parent) { @@ -337,6 +336,7 @@ void browse_key_sel(int change) { int browse_key(int ch) { char tmp[PATH_MAX]; + char sort = 0; struct dir *n; switch(ch) { @@ -368,6 +368,7 @@ int browse_key(int ch) { toggle(flags, BF_DESC); else flags = (flags & BF_HIDE) + (flags & BF_NDIRF) + BF_NAME; + sort++; break; case 's': hideinfo; @@ -375,6 +376,7 @@ int browse_key(int ch) { toggle(flags, BF_DESC); else flags = (flags & BF_HIDE) + (flags & BF_NDIRF) + BF_SIZE + BF_DESC; + sort++; break; case 'h': hideinfo; @@ -384,6 +386,7 @@ int browse_key(int ch) { case 't': hideinfo; toggle(flags, BF_NDIRF); + sort++; break; case 'a': hideinfo; @@ -401,17 +404,20 @@ int browse_key(int ch) { browse_dir = n->sub; if(n == NULL && browse_dir->parent->parent) browse_dir = browse_dir->parent->parent->sub; + sort++; break; case KEY_LEFT: hideinfo; if(browse_dir->parent->parent != NULL) browse_dir = browse_dir->parent->parent->sub; + sort++; break; /* refresh */ case 'r': hideinfo; calc_init(getpath(browse_dir, tmp), browse_dir->parent); + sort++; break; /* and other stuff */ @@ -440,6 +446,9 @@ int browse_key(int ch) { break; */ } + + if(sort) + browse_dir = browse_sort(browse_dir); return 0; } @@ -450,5 +459,6 @@ void browse_init(struct dir *cur) { browse_dir = cur->sub; else browse_dir = cur; + browse_dir = browse_sort(browse_dir); } |