trying to stop cleanly
This commit is contained in:
@@ -577,38 +577,47 @@
|
||||
) ; close without closing windows
|
||||
)
|
||||
|
||||
(define evt-guard-stop -93273)
|
||||
|
||||
(define (start-event-processing)
|
||||
(thread (λ ()
|
||||
(letrec
|
||||
((f
|
||||
(λ ()
|
||||
(let ((waiting (sync events-channel)))
|
||||
(set! waiting (rkt_webview_events_waiting))
|
||||
;(displayln (format "Events waiting: ~a" waiting))
|
||||
(while (> waiting 0)
|
||||
(let* ((rkt-evt (rkt_webview_get_event)))
|
||||
(if (eq? rkt-evt #f)
|
||||
(displayln (format "Unexpected: event = nullptr"))
|
||||
(let* ((data (rkt_data_t-data rkt-evt))
|
||||
(e (union-ref data 1))
|
||||
(wv (rkt_evt_t-w e))
|
||||
(evt (cast (rkt_evt_t-evt e)
|
||||
_pointer
|
||||
_string*/utf-8))
|
||||
)
|
||||
(rkt_webview_free_data rkt-evt)
|
||||
;(displayln (format "~a ~a" wv evt))
|
||||
(if (= wv alive-error-event)
|
||||
(close-down-on-alive-error)
|
||||
(let ((cb (hash-ref evt-cb-hash wv #f)))
|
||||
(unless (eq? cb #f)
|
||||
(cb evt)))))))
|
||||
(set! waiting (- waiting 1))
|
||||
)
|
||||
(if (= waiting evt-guard-stop)
|
||||
(begin
|
||||
(displayln "got evt-guard-stop, exiting event processing")
|
||||
evt-guard-stop)
|
||||
(begin
|
||||
(set! waiting (rkt_webview_events_waiting))
|
||||
(while (> waiting 0)
|
||||
(let* ((rkt-evt (rkt_webview_get_event)))
|
||||
(if (eq? rkt-evt #f)
|
||||
(displayln (format "Unexpected: event = nullptr"))
|
||||
(let* ((data (rkt_data_t-data rkt-evt))
|
||||
(e (union-ref data 1))
|
||||
(wv (rkt_evt_t-w e))
|
||||
(evt (cast (rkt_evt_t-evt e)
|
||||
_pointer
|
||||
_string*/utf-8))
|
||||
)
|
||||
(rkt_webview_free_data rkt-evt)
|
||||
;(displayln (format "~a ~a" wv evt))
|
||||
(if (= wv alive-error-event)
|
||||
(close-down-on-alive-error)
|
||||
(let ((cb (hash-ref evt-cb-hash wv #f)))
|
||||
(unless (eq? cb #f)
|
||||
(cb evt)))))))
|
||||
(set! waiting (- waiting 1))
|
||||
)
|
||||
(f))
|
||||
)
|
||||
)
|
||||
(f))
|
||||
)
|
||||
))
|
||||
(f)))))
|
||||
(f))))
|
||||
)
|
||||
|
||||
(define evt-processing-thread (start-event-processing))
|
||||
|
||||
@@ -813,6 +822,7 @@
|
||||
|
||||
|
||||
(define (rkt-webview-finalizer rkt-wv-store close-windows message)
|
||||
(displayln "rkt-webview-finalizer active")
|
||||
(when close-windows
|
||||
(let ((open-windows (hash->list rkt-wv-store)))
|
||||
(for-each (λ (kv)
|
||||
@@ -820,6 +830,7 @@
|
||||
(handle (cdr kv)))
|
||||
(rkt-webview-close handle)))
|
||||
open-windows)))
|
||||
(event-callback evt-guard-stop)
|
||||
(rkt_webview_cleanup)
|
||||
(unless (eq? message #f) (error message))
|
||||
(stop-event-processing)
|
||||
|
||||
Reference in New Issue
Block a user