SubCanvas.st
changeset 2857 8bfa2eebfd2e
parent 2735 6999d16ef613
child 2912 ac740f182061
--- a/SubCanvas.st	Tue Oct 11 09:40:38 2005 +0200
+++ b/SubCanvas.st	Fri Oct 14 01:15:46 2005 +0200
@@ -78,6 +78,10 @@
     ^ builder
 !
 
+builder:aBuilder
+    builder := aBuilder 
+!
+
 client
     "return the value of the instance variable 'client' (automatically generated)"
 
@@ -186,14 +190,18 @@
 !
 
 clientHolder:aValueHolder
+    |oldClient|
 
     clientHolder notNil ifTrue:[
+        oldClient := clientHolder value.
         clientHolder removeDependent:self
     ].
     (clientHolder := aValueHolder) notNil ifTrue:[
         clientHolder addDependent:self
     ].
-    self updateFromChannels
+    oldClient ~~ clientHolder value ifTrue:[
+        self updateFromChannels
+    ]
 !
 
 clientView:aView
@@ -221,6 +229,28 @@
     oldSpec ~~ specHolder value ifTrue:[
         self updateFromChannels
     ]
+!
+
+specHolder:newSpecHolder clientHolder:newClientHolder
+    |oldSpec oldClient|
+
+    clientHolder notNil ifTrue:[
+        oldClient := clientHolder value.
+        clientHolder removeDependent:self
+    ].
+    specHolder notNil ifTrue:[
+        oldSpec := specHolder value.
+        specHolder removeDependent:self
+    ].
+    (specHolder := newSpecHolder) notNil ifTrue:[
+        specHolder addDependent:self
+    ].
+    (clientHolder := newClientHolder) notNil ifTrue:[
+        clientHolder addDependent:self
+    ].
+    ((oldSpec ~~ specHolder value) or:[oldClient ~~ clientHolder value]) ifTrue:[
+        self updateFromChannels
+    ]
 ! !
 
 !SubCanvas methodsFor:'building'!
@@ -444,30 +474,31 @@
 updateFromChannels
     "update canvas from channel
     "
-    |client spec bldr|
+    |newClient newSpec bldr|
 
     clientHolder isNil ifTrue:[
-        client := self application.
+        newClient := self application.
         bldr := UIBuilder new.
         bldr isSubBuilder:true.
     ] ifFalse:[
-        client := clientHolder value
+        newClient := clientHolder value
     ].
 
     specHolder isNil ifTrue:[
-        spec := #windowSpec
+        newSpec := #windowSpec
     ] ifFalse:[
-        spec := specHolder value
+        newSpec := specHolder value
     ].
-    (client notNil and:[spec notNil]) ifTrue:[
+
+    (newClient notNil and:[newSpec notNil]) ifTrue:[
     ] ifFalse:[
 "/        spec notNil ifTrue:[
 "/            self halt:'spec but no app'.
 "/        ].
-        client := nil.
-        spec := #windowSpec.  "/ is that true ?
+        newClient := nil.
+        newSpec := #windowSpec.  "/ is that true ?
     ].
-    self client:client spec:spec builder:bldr
+    self client:newClient spec:newSpec builder:bldr
 
     "Modified: / 5.8.1999 / 13:35:26 / cg"
 ! !
@@ -549,5 +580,5 @@
 !SubCanvas class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libwidg2/SubCanvas.st,v 1.52 2004-08-19 10:10:21 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libwidg2/SubCanvas.st,v 1.53 2005-10-13 23:15:46 cg Exp $'
 ! !