DirectoryContentsBrowser.st
changeset 11058 ab216c9278c6
parent 10559 e36369957676
child 11177 4b83b53c4b1b
--- a/DirectoryContentsBrowser.st	Sat Jan 07 12:53:28 2012 +0100
+++ b/DirectoryContentsBrowser.st	Sat Jan 07 18:09:40 2012 +0100
@@ -902,41 +902,44 @@
     "change the current directory and read the items
     "
 
-    directory notNil ifTrue:[
-        AbstractFileBrowser directoryHistory setPosition:(browser firstLineShown) for:(directory pathName).
-    ].
-    directory := aDirectory.
-    self wakeUpForDirectoryChanged.
+    aDirectory ~= directory ifTrue:[
+        directory notNil ifTrue:[
+            AbstractFileBrowser directoryHistory setPosition:(browser firstLineShown) for:(directory pathName).
+        ].
+        directory := aDirectory.
+        self wakeUpForDirectoryChanged.
+    ]
+
+    "Modified: / 07-01-2012 / 16:41:20 / cg"
 !
 
 directoryChangeFlag
-    directoryChangeFlag isNil ifTrue:[
-        directoryChangeFlag := false.
-    ].
     ^ directoryChangeFlag
 
-    "Modified: / 01-10-2007 / 19:22:31 / cg"
+    "Modified: / 07-01-2012 / 16:34:39 / cg"
 !
 
-directoryChangeFlag:something
-    directoryChangeFlag := something.
+directoryChangeFlag:aBoolean
+    directoryChangeFlag := aBoolean.
 
     "Modified: / 01-10-2007 / 19:22:35 / cg"
+    "Modified (format): / 07-01-2012 / 16:34:46 / cg"
 !
 
 directoryContentsChangeFlag
     "return the value of the instance variable 'directoryContentsChangeFlag' (automatically generated)"
 
-    directoryContentsChangeFlag isNil ifTrue:[
-        directoryContentsChangeFlag := false.
-    ].
     ^ directoryContentsChangeFlag
+
+    "Modified: / 07-01-2012 / 16:34:51 / cg"
 !
 
-directoryContentsChangeFlag:something
+directoryContentsChangeFlag:aBoolean
     "set the value of the instance variable 'directoryContentsChangeFlag' (automatically generated)"
 
-    directoryContentsChangeFlag := something.
+    directoryContentsChangeFlag := aBoolean.
+
+    "Modified (format): / 07-01-2012 / 16:35:01 / cg"
 !
 
 doubleClickAction
@@ -954,16 +957,17 @@
 filterChangeFlag
     "return the value of the instance variable 'filterChangeFlag' (automatically generated)"
 
-    filterChangeFlag isNil ifTrue:[
-        filterChangeFlag := false.
-    ].
     ^ filterChangeFlag
+
+    "Modified: / 07-01-2012 / 16:35:07 / cg"
 !
 
-filterChangeFlag:something
+filterChangeFlag:aBoolean
     "set the value of the instance variable 'filterChangeFlag' (automatically generated)"
 
-    filterChangeFlag := something.
+    filterChangeFlag := aBoolean.
+
+    "Modified (format): / 07-01-2012 / 16:35:12 / cg"
 !
 
 isBusy
@@ -1007,16 +1011,17 @@
 sortBlockChangeFlag
     "return the value of the instance variable 'sortBlockChangeFlag' (automatically generated)"
 
-    sortBlockChangeFlag isNil ifTrue:[
-        sortBlockChangeFlag := false.
-    ].
     ^ sortBlockChangeFlag
+
+    "Modified: / 07-01-2012 / 16:35:20 / cg"
 !
 
-sortBlockChangeFlag:something
+sortBlockChangeFlag:aBoolean
     "set the value of the instance variable 'sortBlockChangeFlag' (automatically generated)"
 
-    sortBlockChangeFlag := something.
+    sortBlockChangeFlag := aBoolean.
+
+    "Modified (format): / 07-01-2012 / 16:35:25 / cg"
 !
 
 updateContentsSelection
@@ -1790,9 +1795,15 @@
     changeSema := Semaphore new. 
     updateCycleSemaphore := Semaphore new.
     accessLock := RecursionLock new.
+
+    filterChangeFlag := false.
+    sortBlockChangeFlag := false.
+    directoryChangeFlag := false.
+    directoryContentsChangeFlag := false.
+
     super initialize.
 
-    "Modified: / 12-12-2006 / 17:10:05 / cg"
+    "Modified: / 07-01-2012 / 16:34:25 / cg"
 ! !
 
 !DirectoryContentsBrowser methodsFor:'menu accessing'!
@@ -2188,25 +2199,30 @@
         desc notNil ifTrue:[  
             icon := self getIconFor:desc.
             icon notNil ifTrue:[
+                icon ~= desc icon ifTrue:[
+                    desc icon:icon.
+                    (iconIndex ~~ 0) ifTrue:[
+                        browser invalidateVisibleRow:desc colAt:iconIndex
+                    ].
+                    self debugMessage:'icon for visible items ', desc baseName.
+                ].
+            ].
+                    ^ true
+        ].
+        "/ update icon for visible items by contents
+        desc := self findNextVisibleItemFor:
+                    [:n| 
+                        (n iconKey == #file 
+                        and:[(mime := n mimeTypeForContents asSymbol) ~= #unknown])
+                    ].
+        desc notNil ifTrue:[
+            icon := self getIconForMimeType:mime for:desc.
+"/            icon := self getIconForMimeTypeByContents:desc.
+            icon ~= desc icon ifTrue:[
                 desc icon:icon.
                 (icon notNil and:[iconIndex ~~ 0]) ifTrue:[
                     browser invalidateVisibleRow:desc colAt:iconIndex
                 ].
-                self debugMessage:'icon for visible items ', desc baseName.
-                ^ true
-            ].
-        ].
-        "/ update icon for visible items by contents
-        desc := self findNextVisibleItemFor:[:n| 
-            (n iconKey == #file 
-            and:[(mime := n mimeTypeForContents asSymbol) ~= #unknown])
-        ].
-        desc notNil ifTrue:[
-            icon := self getIconForMimeType:mime for:desc.
-"/            icon := self getIconForMimeTypeByContents:desc.
-            desc icon:icon.
-            (icon notNil and:[iconIndex ~~ 0]) ifTrue:[
-                browser invalidateVisibleRow:desc colAt:iconIndex
             ].
             ^ true
         ].
@@ -2285,18 +2301,20 @@
         ].
     ].
     ^ false
+
+    "Modified: / 07-01-2012 / 16:39:12 / cg"
 ! !
 
 !DirectoryContentsBrowser methodsFor:'update modification cycle'!
 
 modificationCycle
-
     | oldModificationTime  desc|
 
     directory isNil ifTrue:[^ self].
 
     directory exists ifFalse:[
-        self directoryChangeFlag:true.
+        "/ directory vanished
+        directoryContentsChangeFlag := true.
         ^ self
     ].
     directory isRootDirectory ifTrue:[
@@ -2307,7 +2325,8 @@
     modificationTime := directory modificationTime.
 
     oldModificationTime ~= modificationTime ifTrue:[
-        self wakeUpForDirectoryContentsChanged.
+        directoryContentsChangeFlag := true.
+"/        self wakeUpForDirectoryContentsChanged.
         ^ self
     ].
 
@@ -2319,6 +2338,8 @@
         self debugMessage:'item is modified ', desc baseName.
         ^ self.
     ].
+
+    "Modified: / 07-01-2012 / 16:42:40 / cg"
 ! !
 
 !DirectoryContentsBrowser methodsFor:'update task'!
@@ -2348,10 +2369,16 @@
 !
 
 debugMessage:aString
-
     Debug == true ifTrue:[
         Transcript showCR:aString
     ].
+
+    "
+     Debug := true
+     Debug := false
+    "
+
+    "Modified (comment): / 07-01-2012 / 16:30:25 / cg"
 !
 
 directoryChanged
@@ -2523,68 +2550,28 @@
     ].
 !
 
-updateStep
-    |timedOut sensor|
-
-    "/ Processor yield.
-
-    sensor := self windowGroup sensor.
-    (sensor anyButtonPressed or:[sensor shiftDown]) ifTrue:[
-        Processor yield.
-
-        "/ no update while scrolling
-        timedOut := ( changeSema waitWithTimeoutMs:(self class updateTaskCyleTime) ) isNil.
-        timedOut ifFalse:[changeSema signal].
-        ^ self 
-    ].
-
-    AbortOperationRequest handle:[
-        "if directory changed all running update flags must be reset"
-
-        self debugMessage:'got an abort signal'.
-        self directoryContentsChangeFlag:false.
-        self filterChangeFlag:false.
-        self sortBlockChangeFlag:false.
-    ] do:[
-        self debugMessage:'sema wait'.
-        timedOut := (changeSema waitWithTimeoutMs:(self class updateTaskCyleTime)) isNil.
-        self debugMessage:'timedOut:', timedOut asString.
-
-        (self filterChangeFlag 
-        or:[self sortBlockChangeFlag 
-        or:[self directoryChangeFlag
-        or:[self directoryContentsChangeFlag]]]) ifTrue:[
-            accessLock critical:[
-                self updateWithTimeout:timedOut.
-            ].
-        ].
-    ].
-
-    "Modified: / 02-03-2011 / 23:00:02 / cg"
-!
-
-updateWithTimeout:timeOut
+updateAfterTimeout:timeOut
 
 "/    Transcript showCR:'START'.
     self isBusy:true.
     [
-        self directoryChangeFlag ifTrue:[ 
-            self directoryChangeFlag:false.
+        directoryChangeFlag ifTrue:[ 
+            directoryChangeFlag := false.
             self debugMessage:'directoryChanged'.
             self directoryChanged.
         ].
-        self directoryContentsChangeFlag ifTrue:[
-            self directoryContentsChangeFlag:false.
+        directoryContentsChangeFlag ifTrue:[
+            directoryContentsChangeFlag := false.
             self debugMessage:'directoryContentsChanged'.
             self directoryContentsChanged.
         ].
-        self filterChangeFlag ifTrue:[
-            self filterChangeFlag:false.
+        filterChangeFlag ifTrue:[
+            filterChangeFlag := false.
             self debugMessage:'filterChanged'.
             self filterChanged.
         ].
-        self sortBlockChangeFlag ifTrue:[
-            self sortBlockChangeFlag:false.
+        sortBlockChangeFlag ifTrue:[
+            sortBlockChangeFlag := false.
             self debugMessage:'sortBlockChanged'.
             self sortBlockChanged.
         ].
@@ -2603,6 +2590,47 @@
         updateCycleSemaphore signalIf
     ].
 "/        Transcript showCR:'STOP'.
+
+    "Created: / 07-01-2012 / 16:27:50 / cg"
+!
+
+updateStep
+    |timedOut sensor|
+
+    "/ Processor yield.
+
+    sensor := self windowGroup sensor.
+    (sensor anyButtonPressed or:[sensor shiftDown]) ifTrue:[
+        Processor yield.
+
+        "/ no update while scrolling
+        timedOut := ( changeSema waitWithTimeoutMs:(self class updateTaskCyleTime) ) isNil.
+        timedOut ifFalse:[changeSema signal].
+        ^ self 
+    ].
+
+    AbortOperationRequest handle:[
+        "/ to get out of a debugger loop...
+        self debugMessage:'got an abort signal'.
+        self directoryContentsChangeFlag:false.
+        self filterChangeFlag:false.
+        self sortBlockChangeFlag:false.
+    ] do:[
+        self debugMessage:'sema wait'.
+        timedOut := (changeSema waitWithTimeoutMs:(self class updateTaskCyleTime)) isNil.
+        self debugMessage:'timedOut:', timedOut asString.
+
+        (filterChangeFlag 
+        or:[ sortBlockChangeFlag
+        or:[ directoryChangeFlag
+        or:[ directoryContentsChangeFlag ]]]) ifTrue:[
+            accessLock critical:[
+                self updateAfterTimeout:timedOut.
+            ].
+        ].
+    ].
+
+    "Modified: / 07-01-2012 / 16:36:53 / cg"
 ! !
 
 !DirectoryContentsBrowser methodsFor:'update task trigger'!
@@ -2618,13 +2646,14 @@
 !
 
 wakeUpForDirectoryChanged
-
     self isBusy ifTrue:[
         self isBusy:false.
         updateTask interruptWith:[AbortSignal raise].
     ].
-    self directoryChangeFlag:true.
+    directoryChangeFlag := true.
     self wakeUp.
+
+    "Modified: / 07-01-2012 / 16:43:12 / cg"
 !
 
 wakeUpForDirectoryContentsChanged
@@ -3343,9 +3372,9 @@
 !DirectoryContentsBrowser class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/DirectoryContentsBrowser.st,v 1.240 2011-08-09 16:21:14 vrany Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/DirectoryContentsBrowser.st,v 1.241 2012-01-07 17:09:40 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/DirectoryContentsBrowser.st,v 1.240 2011-08-09 16:21:14 vrany Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/DirectoryContentsBrowser.st,v 1.241 2012-01-07 17:09:40 cg Exp $'
 ! !