From 472a539133578fdb14af3f47cde0b4f226a7970e Mon Sep 17 00:00:00 2001 From: Hans Dijkema Date: Sat, 18 Apr 2026 15:26:49 +0200 Subject: [PATCH] trying to stop cleanly --- racket-webview-qt.rkt | 59 +++++++++++++++++++++++++------------------ 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/racket-webview-qt.rkt b/racket-webview-qt.rkt index 996e307..c4b961e 100644 --- a/racket-webview-qt.rkt +++ b/racket-webview-qt.rkt @@ -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)