From 614134b59b4c22e2665e3df4693aad0bc1eb2180 Mon Sep 17 00:00:00 2001
From: yorhel <yorhel@ce56bc8d-f834-0410-b703-f827bd498a76>
Date: Fri, 27 Jul 2007 07:52:50 +0000
Subject: [PATCH] Items will not be unnecessarily resorted when they are
 already in the correct order

git-svn-id: svn://blicky.net/ncdu/trunk@14 ce56bc8d-f834-0410-b703-f827bd498a76
---
 src/browser.c | 20 +++++++++++++++-----
 src/ncdu.h    |  1 +
 2 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/src/browser.c b/src/browser.c
index db113c1..f17dcb6 100644
--- a/src/browser.c
+++ b/src/browser.c
@@ -151,9 +151,12 @@ void drawBrowser(int change) {
   mvhline(1, 0, '-', wincols);
   mvaddstr(1, 3, cropdir(getpath(bcur, tmp), wincols-5));
 
-/* make sure the items are in correct order */
-  bcur = sortFiles(bcur);
-  bcur->parent->sub = bcur;
+ /* make sure the items are in correct order */
+  if(!(bflags & BF_SORT)) {
+    bcur = sortFiles(bcur);
+    bcur->parent->sub = bcur;
+    bflags |= BF_SORT;
+  }
 
  /* get maximum size and selected item */
   for(n = bcur, selected = i = 0; n != NULL; n = n->next, i++) {
@@ -271,11 +274,12 @@ struct dir * selected(void) {
 
 
 #define toggle(x,y) if(x & y) x -=y; else x |= y
+#define resort if(bflags & BF_SORT) bflags -= BF_SORT
 
 void showBrowser(void) {
-  int ch, change;
+  int ch, change, oldflags;
   char tmp[PATH_MAX];
-  struct dir *n, *t, *d;
+  struct dir *n, *t, *d, *last;
   
   bcur = dat->sub;
   bgraph = 1;
@@ -287,6 +291,9 @@ void showBrowser(void) {
 
   while((ch = getch())) {
     change = 0;
+    last = bcur;
+    oldflags = bflags;
+    
     switch(ch) {
      /* selecting items */
       case KEY_UP:
@@ -411,6 +418,9 @@ void showBrowser(void) {
       case 'q':
         goto endloop;
     }
+    if((last != bcur || (oldflags | BF_HIDE) != (bflags | BF_HIDE)) && bflags & BF_SORT)
+      bflags -= BF_SORT;
+    
     drawBrowser(change);
     refresh();
   }
diff --git a/src/ncdu.h b/src/ncdu.h
index 38c08d2..b529c63 100644
--- a/src/ncdu.h
+++ b/src/ncdu.h
@@ -104,6 +104,7 @@
 #define BF_NDIRF 32 /* Normally, dirs before files, setting this disables it */
 #define BF_DESC  64
 #define BF_HIDE 128 /* don't show hidden files... */
+#define BF_SORT 256 /* no need to resort, list is already in correct order */
 
 
 /*
-- 
GitLab