From 22c071778aa58e7e98d34ddd03f865dd7abe48a9 Mon Sep 17 00:00:00 2001
From: Sam Anklesaria <sam@Tintin.local>
Date: Sun, 24 May 2009 10:05:17 -0500
Subject: [PATCH] |-products work correctly

---
 extra/ui/frp/signals/signals.factor | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/extra/ui/frp/signals/signals.factor b/extra/ui/frp/signals/signals.factor
index 461b8f0732..184dd05365 100644
--- a/extra/ui/frp/signals/signals.factor
+++ b/extra/ui/frp/signals/signals.factor
@@ -66,16 +66,18 @@ M: action (model-changed) [ [ value>> ] [ quot>> ] bi* call( a -- b ) ] keep val
 
 TUPLE: | < multi-model ;
 : <|> ( models -- product ) | <multi-model> ;
+GENERIC: models-changed ( product -- )
+M: | models-changed drop ;
 M: | model-changed
     nip
     dup dependencies>> [ value>> ] all?
-    [ dup [ value>> ] product-value >>value notify-connections
-    ] [ drop ] if ;
+    [ [ dup [ value>> ] product-value >>value notify-connections ] keep models-changed ]
+    [ drop ] if ;
 M: | update-model
     dup value>> swap [ set-model ] set-product-value ;
 M: | model-activated dup model-changed ;
 
+! Only when everything's true does he make it false
 TUPLE: & < | ;
 : <&> ( models -- product ) & <multi-model> ;
-M: & model-changed [ call-next-method ] keep
-   [ dependencies>> [ f swap set-model ] each ] with-locked-model ;
\ No newline at end of file
+M: & models-changed dependencies>> [ f swap (>>value) ] each ;
\ No newline at end of file