diff --git a/example1/example.rkt b/example1/example.rkt index f272120..112a7f9 100644 --- a/example1/example.rkt +++ b/example1/example.rkt @@ -6,6 +6,7 @@ simple-ini/class racket/string net/url + simple-log ) (provide @@ -306,6 +307,9 @@ ) (webview-set-loglevel 'debug) +(define log-file (build-path (find-system-path 'temp-dir) "example1.log")) +(displayln (format "logging to ~a" log-file)) +(sl-log-to-file log-file) (define (run-example) (let* ((ini (new ini% [file 'web-racket-example1])) diff --git a/racket-webview-qt.rkt b/racket-webview-qt.rkt index c9ca30b..996e307 100644 --- a/racket-webview-qt.rkt +++ b/racket-webview-qt.rkt @@ -345,7 +345,7 @@ ;RKTWEBVIEW_QT_EXPORT rkt_wv_context_t rkt_webview_new_context(const char *boilerplate_js, ; const char *optional_server_cert_pem); (define-rktwebview rkt_webview_new_context - (_fun _string/utf-8 _bytes -> _int)) + (_fun _string/utf-8 _string/utf-8 -> _int)) ;RKTWEBVIEW_QT_EXPORT void rkt_webview_process_events(int for_ms); ;(define-rktwebview rkt_webview_process_events @@ -647,6 +647,8 @@ |# (define (rkt-webview-new-context boilerplate-js server-cert) + ;(dbg-webview (format "boilerplate js: ~a" boilerplate-js)) + ;(dbg-webview (format "server-cert : ~a" server-cert)) (let ((r (rkt_webview_new_context boilerplate-js server-cert))) r)) @@ -809,6 +811,20 @@ #f #t))) + +(define (rkt-webview-finalizer rkt-wv-store close-windows message) + (when close-windows + (let ((open-windows (hash->list rkt-wv-store))) + (for-each (λ (kv) + (let ((win (car kv)) + (handle (cdr kv))) + (rkt-webview-close handle))) + open-windows))) + (rkt_webview_cleanup) + (unless (eq? message #f) (error message)) + (stop-event-processing) + ) + (define (rkt-webview-exit . args) (let ((cl-w (if (null? args) #t (car args))) (msg (if (null? args) #f @@ -816,28 +832,25 @@ #f (cadr args)))) ) - (when cl-w - (let ((open-windows (hash->list rkt-wv-store))) - (for-each (λ (kv) - (let ((win (car kv)) - (handle (cdr kv))) - (rkt-webview-close handle))) - open-windows))) - (rkt_webview_cleanup) - (unless (eq? msg #f) - (error msg)) - ) - (stop-event-processing) - ) + (rkt-webview-finalizer rkt-wv-store cl-w msg))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Cleanup on exit ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +#| (set! quiet-call (plumber-add-flush! (current-plumber) (λ (handle) (rkt-webview-exit)))) +|# + +(define custodian-finalizer + (register-custodian-shutdown rkt-wv-store + (λ (rkt-wv-store) + (rkt-webview-finalizer rkt-wv-store #t #f)) + #:at-exit? #t) + ) diff --git a/racket-webview.rkt b/racket-webview.rkt index c1b58b7..7ceda24 100644 --- a/racket-webview.rkt +++ b/racket-webview.rkt @@ -458,9 +458,7 @@ #:ou (wv-context-cert-ou-token h))) (server-cert (certificate cert)) (channel (make-async-channel)) - (server (let ((s (start-web-server h channel cert))) - (sleep 3) ;;; ToDO Check if server is up - s)) + (server (start-web-server h channel cert)) (port-nr (let ((pn (async-channel-get channel))) (set-wv-context-port! h pn) pn))