DirectoryContentsBrowser.st
changeset 12324 315b83bfcf3d
parent 12113 239341521c07
child 12342 78b5ffcbccc3
child 12401 4714b9640528
--- a/DirectoryContentsBrowser.st	Sat Jan 19 14:26:14 2013 +0000
+++ b/DirectoryContentsBrowser.st	Sat Jan 19 15:24:23 2013 +0100
@@ -2225,7 +2225,6 @@
                         browser invalidateVisibleRow:desc colAt:iconIndex
                     ].
                     self debugMessage:'icon for visible items ', desc baseName.
-                    updatingColumns := true.
                     ^ true
                 ].
             ].
@@ -2326,43 +2325,6 @@
     "Modified: / 20-03-2012 / 13:05:28 / cg"
 ! !
 
-!DirectoryContentsBrowser methodsFor:'update modification cycle'!
-
-modificationCycle
-    | oldModificationTime  desc|
-
-    directory isNil ifTrue:[^ self].
-
-    directory exists ifFalse:[
-        "/ directory vanished
-        directoryContentsChangeFlag := true.
-        ^ self
-    ].
-    directory isRootDirectory ifTrue:[
-        ^ self
-    ].
-
-    oldModificationTime := modificationTime.
-    modificationTime := directory modificationTime.
-
-    oldModificationTime ~= modificationTime ifTrue:[
-        directoryContentsChangeFlag := true.
-        self wakeUpForDirectoryContentsChanged.
-        ^ self
-    ].
-
-    desc := self findNextItemFor:[:n| n hasBeenModified ].
-
-    desc notNil ifTrue:[
-        desc resetItem.
-        browser invalidateVisibleRow:desc.
-        self debugMessage:'item is modified ', desc baseName.
-        ^ self.
-    ].
-
-    "Modified: / 20-03-2012 / 12:24:38 / cg"
-! !
-
 !DirectoryContentsBrowser methodsFor:'update task'!
 
 createItemList
@@ -2429,7 +2391,7 @@
 
     directory isNil ifTrue:[^ self].
 
-    updatingColumns := true.
+    "/ updatingColumns := true.
 
     newAllItems := self readDirectoryItems.
     
@@ -2540,6 +2502,41 @@
     "Modified: / 20-11-2012 / 14:28:54 / cg"
 !
 
+modificationCycle
+    | oldModificationTime  desc|
+
+    directory isNil ifTrue:[^ self].
+
+    directory exists ifFalse:[
+        "/ directory vanished
+        directoryContentsChangeFlag := true.
+        ^ self
+    ].
+    directory isRootDirectory ifTrue:[
+        ^ self
+    ].
+
+    oldModificationTime := modificationTime.
+    modificationTime := directory modificationTime.
+
+    oldModificationTime ~= modificationTime ifTrue:[
+        directoryContentsChangeFlag := true.
+        self wakeUpForDirectoryContentsChanged.
+        ^ self
+    ].
+
+    desc := self findNextItemFor:[:n| n hasBeenModified ].
+
+    desc notNil ifTrue:[
+        desc resetItem.
+        browser invalidateVisibleRow:desc.
+        self debugMessage:'item is modified ', desc baseName.
+        ^ self.
+    ].
+
+    "Modified: / 20-03-2012 / 12:24:38 / cg"
+!
+
 readDirectoryItems
     |list contents itemClass|
 
@@ -2591,46 +2588,51 @@
     ].
 !
 
-updateAfterTimeout:timeOut
+updateAfterTimeout:hereDueToTimeOut
+    |mustCheckForModifiedDir|
+
+    mustCheckForModifiedDir := hereDueToTimeOut.
 
 "/    Transcript showCR:'START'.
     self isBusy:true.
+    self debugMessage:'update cycle'.
     [
-        directoryChangeFlag ifTrue:[ 
-            directoryChangeFlag := false.
-            self debugMessage:'directoryChanged'.
-            self directoryChanged.
-        ].
-        directoryContentsChangeFlag ifTrue:[
-            directoryContentsChangeFlag := false.
-            self debugMessage:'directoryContentsChanged'.
-            self directoryContentsChanged.
-        ].
-        filterChangeFlag ifTrue:[
-            filterChangeFlag := false.
-            self debugMessage:'filterChanged'.
-            self filterChanged.
-        ].
-        sortBlockChangeFlag ifTrue:[
-            sortBlockChangeFlag := false.
-            self debugMessage:'sortBlockChanged'.
-            self sortBlockChanged.
-        ].
-        timeOut ifTrue:[
-            self debugMessage:'evaluate modification'.
-            self modificationCycle
-        ].
-        self updateColumnsCycle ifTrue:[
-            self debugMessage:'next time another columns update'.
-            updatingColumns := true.
-            changeSema signal
-        ] ifFalse:[
-            self debugMessage:'next time no column update'.
-            updatingColumns := false.
-        ].
+        [
+            mustCheckForModifiedDir ifTrue:[
+                self debugMessage:'evaluate modification'.
+                mustCheckForModifiedDir := false.
+                self modificationCycle
+            ].
+            directoryChangeFlag ifTrue:[ 
+                directoryChangeFlag := false.
+                self debugMessage:'directoryChanged'.
+                self directoryChanged.
+            ].
+            directoryContentsChangeFlag ifTrue:[
+                directoryContentsChangeFlag := false.
+                self debugMessage:'directoryContentsChanged'.
+                self directoryContentsChanged.
+            ].
+            filterChangeFlag ifTrue:[
+                filterChangeFlag := false.
+                self debugMessage:'filterChanged'.
+                self filterChanged.
+            ].
+            sortBlockChangeFlag ifTrue:[
+                sortBlockChangeFlag := false.
+                self debugMessage:'sortBlockChanged'.
+                self sortBlockChanged.
+            ].
+            (updatingColumns := self updateColumnsCycle) ifTrue:[
+                self debugMessage:'next time another columns update'.
+                changeSema signal
+            ] ifFalse:[
+                self debugMessage:'next time no column update'.
+            ].
+        ] doWhile:[updatingColumns]
     ] ensure:[
         self isBusy:false.
-        updateCycleSemaphore signalIf
+        updateCycleSemaphore signalIf.
     ].
 "/        Transcript showCR:'STOP'.
 
@@ -2671,7 +2673,8 @@
         or:[ sortBlockChangeFlag
         or:[ directoryChangeFlag
         or:[ directoryContentsChangeFlag 
-        or:[ updatingColumns == true ]]]]) ifTrue:[
+        or:[ updatingColumns == true 
+        or:[ timedOut ]]]]]) ifTrue:[
             accessLock critical:[
                 self updateAfterTimeout:timedOut.
             ].
@@ -3420,10 +3423,10 @@
 !DirectoryContentsBrowser class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/DirectoryContentsBrowser.st,v 1.251 2013-01-17 11:16:28 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/DirectoryContentsBrowser.st,v 1.252 2013-01-19 14:24:23 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/DirectoryContentsBrowser.st,v 1.251 2013-01-17 11:16:28 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/DirectoryContentsBrowser.st,v 1.252 2013-01-19 14:24:23 cg Exp $'
 ! !