WOs kludge for alien views (adding same view again with different id)
authorwerner
Wed, 07 Apr 2004 10:42:24 +0200
changeset 4147 2b602a0c33d1
parent 4146 4c46ae30bd64
child 4148 0a9c11fc8844
WOs kludge for alien views (adding same view again with different id)
DeviceWorkstation.st
--- 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!