--- a/DeviceWorkstation.st Tue Apr 06 22:18:56 2004 +0200
+++ b/DeviceWorkstation.st Wed Apr 07 10:42:24 2004 +0200
@@ -6687,48 +6687,54 @@
This map is needed later (on event arrival) to get the view from
the views id (which is passed along with the devices event) quickly."
- |freeIdx newArr sz newSize wasBlocked|
+ |freeIdx newArr sz newSize wasBlocked knownIndex |
wasBlocked := OperatingSystem blockInterrupts.
knownViews isNil ifTrue:[
- knownViews := WeakArray new:50.
- knownIds := Array new:50.
- freeIdx := 1.
+ knownViews := WeakArray new:50.
+ knownIds := Array new:50.
+ freeIdx := 1.
] ifFalse:[
- freeIdx := knownViews identityIndexOf:nil.
- freeIdx == 0 ifTrue:[
- freeIdx := knownViews identityIndexOf:0.
- [freeIdx ~~ 0
- and:[(knownIds at:freeIdx) notNil]] whileTrue:[
- "/ mhmh - the view is already clear in the weakArray
- "/ but the id is not.
- "/ (i.e. its collected, but not yet finalized)
- "/ skip this entry.
- "/ 'XXX ' print. (knownIds at:freeIdx) displayString printCR.
- freeIdx := knownViews identityIndexOf:0 startingAt:(freeIdx + 1).
- ].
- ].
+ knownIndex := knownViews identityIndexOf: aView.
+ knownIndex ~~ 0 ifTrue:[
+ knownIds at:knownIndex put:aWindowID.
+ wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
+ ^self.
+ ].
+ freeIdx := knownViews identityIndexOf:nil.
+ freeIdx == 0 ifTrue:[
+ freeIdx := knownViews identityIndexOf:0.
+ [freeIdx ~~ 0
+ and:[(knownIds at:freeIdx) notNil]] whileTrue:[
+ "/ mhmh - the view is already clear in the weakArray
+ "/ but the id is not.
+ "/ (i.e. its collected, but not yet finalized)
+ "/ skip this entry.
+ "/ 'XXX ' print. (knownIds at:freeIdx) displayString printCR.
+ freeIdx := knownViews identityIndexOf:0 startingAt:(freeIdx + 1).
+ ].
+ ].
].
freeIdx == 0 ifTrue:[
- sz := knownViews size.
- newSize := sz * 2.
- newArr := WeakArray new:newSize.
- newArr replaceFrom:1 to:sz with:knownViews.
- knownViews := newArr.
-
- newArr := Array new:newSize.
- newArr replaceFrom:1 to:sz with:knownIds.
- knownIds := newArr.
- freeIdx := sz + 1.
+ sz := knownViews size.
+ newSize := sz * 2.
+ newArr := WeakArray new:newSize.
+ newArr replaceFrom:1 to:sz with:knownViews.
+ knownViews := newArr.
+
+ newArr := Array new:newSize.
+ newArr replaceFrom:1 to:sz with:knownIds.
+ knownIds := newArr.
+ freeIdx := sz + 1.
].
knownViews at:freeIdx put:aView.
knownIds at:freeIdx put:aWindowID.
wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
idToTableIndexMapping notNil ifTrue:[
- idToTableIndexMapping at:aWindowID put:freeIdx.
+ idToTableIndexMapping at:aWindowID put:freeIdx.
].
"/ dispatching ifFalse:[
@@ -7388,7 +7394,7 @@
!DeviceWorkstation class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libview/DeviceWorkstation.st,v 1.461 2004-03-10 16:21:19 ca Exp $'
+ ^ '$Header: /cvs/stx/stx/libview/DeviceWorkstation.st,v 1.462 2004-04-07 08:42:24 werner Exp $'
! !
DeviceWorkstation initialize!