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 ) | ; +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 ) & ; -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