class: DirectoryContentsBrowser
changed:
#directoryContentsChanged
#updateAfterTimeout:
#updateColumnsCycle
#updateStep
category of: #modificationCycle
fixed update of modified directory (file added/removed by someone else)
--- 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 $'
! !