If (open-window) or similar fails, don't enter an infinite loop of opening error windows, just try to open one and then give up
							parent
							
								
									ba61b82152
								
							
						
					
					
						commit
						6082a98c7c
					
				| 
						 | 
					@ -2,9 +2,9 @@
 | 
				
			||||||
! See http://factorcode.org/license.txt for BSD license.
 | 
					! See http://factorcode.org/license.txt for BSD license.
 | 
				
			||||||
USING: arrays assocs io kernel math models namespaces make dlists
 | 
					USING: arrays assocs io kernel math models namespaces make dlists
 | 
				
			||||||
deques sequences threads sequences words continuations init
 | 
					deques sequences threads sequences words continuations init
 | 
				
			||||||
combinators hashtables concurrency.flags sets accessors calendar fry
 | 
					combinators combinators.short-circuit hashtables concurrency.flags
 | 
				
			||||||
destructors ui.gadgets ui.gadgets.private ui.gadgets.worlds
 | 
					sets accessors calendar fry destructors ui.gadgets ui.gadgets.private
 | 
				
			||||||
ui.gadgets.tracks ui.gestures ui.backend ui.render ;
 | 
					ui.gadgets.worlds ui.gadgets.tracks ui.gestures ui.backend ui.render ;
 | 
				
			||||||
IN: ui
 | 
					IN: ui
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<PRIVATE
 | 
					<PRIVATE
 | 
				
			||||||
| 
						 | 
					@ -117,12 +117,10 @@ M: world ungraft*
 | 
				
			||||||
    gesture-queue [ send-queued-gesture notify-queued ] slurp-deque ;
 | 
					    gesture-queue [ send-queued-gesture notify-queued ] slurp-deque ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: update-ui ( -- )
 | 
					: update-ui ( -- )
 | 
				
			||||||
    [
 | 
					    notify-queued
 | 
				
			||||||
        notify-queued
 | 
					    layout-queued
 | 
				
			||||||
        layout-queued
 | 
					    redraw-worlds
 | 
				
			||||||
        redraw-worlds
 | 
					    send-queued-gestures ;
 | 
				
			||||||
        send-queued-gestures
 | 
					 | 
				
			||||||
    ] [ ui-error ] recover ;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
SYMBOL: ui-thread
 | 
					SYMBOL: ui-thread
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -133,8 +131,7 @@ SYMBOL: ui-thread
 | 
				
			||||||
PRIVATE>
 | 
					PRIVATE>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: find-window ( quot -- world )
 | 
					: find-window ( quot -- world )
 | 
				
			||||||
    windows get values
 | 
					    [ windows get values ] dip '[ gadget-child @ ] find-last nip ; inline
 | 
				
			||||||
    [ gadget-child swap call ] with find-last nip ; inline
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
: ui-running? ( -- ? )
 | 
					: ui-running? ( -- ? )
 | 
				
			||||||
    \ ui-running get-global ;
 | 
					    \ ui-running get-global ;
 | 
				
			||||||
| 
						 | 
					@ -142,9 +139,15 @@ PRIVATE>
 | 
				
			||||||
<PRIVATE
 | 
					<PRIVATE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: update-ui-loop ( -- )
 | 
					: update-ui-loop ( -- )
 | 
				
			||||||
    [ ui-running? ui-thread get-global self eq? and ]
 | 
					    #! Note the logic: if update-ui fails, we open an error window
 | 
				
			||||||
    [ ui-notify-flag get lower-flag update-ui ]
 | 
					    #! and run one iteration of update-ui. If that also fails, well,
 | 
				
			||||||
    while ;
 | 
					    #! the whole UI subsystem is broken so we exit out of the
 | 
				
			||||||
 | 
					    #! update-ui-loop.
 | 
				
			||||||
 | 
					    [ { [ ui-running? ] [ ui-thread get-global self eq? ] } 0&& ]
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					        ui-notify-flag get lower-flag
 | 
				
			||||||
 | 
					        [ update-ui ] [ ui-error update-ui ] recover
 | 
				
			||||||
 | 
					    ] while ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: start-ui-thread ( -- )
 | 
					: start-ui-thread ( -- )
 | 
				
			||||||
    [ self ui-thread set-global update-ui-loop ]
 | 
					    [ self ui-thread set-global update-ui-loop ]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue