     ! run one iteration of update-ui. If that also fails, well, the
     ! whole UI subsystem is broken so we throw the error to terminate
     ! the update-ui-loop.
-    [ { [ ui-running? ] [ ui-thread get-global self eq? ] } 0&& ]
+    [ ui-running? ]
     [
         ui-notify-flag get lower-flag
         [ update-ui ] [

    redraw-worlds
    send-queued-gestures ;

SYMBOL: ui-thread

: ui-running ( quot -- )
    t \ ui-running set-global
    [ f \ ui-running set-global ] [ ] cleanup ; inline

    ] while ;

: start-ui-thread ( -- )
    [ update-ui-loop ] "UI update" spawn drop ;

: start-ui ( quot -- )
    call( -- ) notify-ui-thread start-ui-thread ;
