diff --git a/private/lib/windows/x86_64/rktwebview.dll b/private/lib/windows/x86_64/rktwebview.dll index 21a44db..49f11b4 100644 Binary files a/private/lib/windows/x86_64/rktwebview.dll and b/private/lib/windows/x86_64/rktwebview.dll differ diff --git a/private/lib/windows/x86_64/rktwebview_test.exe b/private/lib/windows/x86_64/rktwebview_test.exe index 2a1ab41..93ebe2c 100644 Binary files a/private/lib/windows/x86_64/rktwebview_test.exe and b/private/lib/windows/x86_64/rktwebview_test.exe differ diff --git a/private/racket-webview-qt.rkt b/private/racket-webview-qt.rkt index be8fbc2..3240ae3 100644 --- a/private/racket-webview-qt.rkt +++ b/private/racket-webview-qt.rkt @@ -4,6 +4,7 @@ ffi/unsafe/define ffi/unsafe/atomic ffi/unsafe/os-thread + ffi/unsafe/cvector racket/async-channel racket/runtime-path racket/port @@ -131,35 +132,6 @@ "QtWebEngineProcess.exe" "QtWebEngineProcess")) -(set! quiet-call - (when (or (eq? os 'windows) (eq? os 'linux)) - (putenv "QT_PLUGIN_PATH" - (path->string (build-path os-lib-dir))) - (putenv "QTWEBENGINEPROCESS_PATH" - (path->string (build-path os-lib-dir webengine-process))) - (putenv "QTWEBENGINE_RESOURCES_PATH" - (path->string (build-path os-lib-dir "resources"))) - (putenv "QTWEBENGINE_LOCALES_PATH" - (path->string (build-path os-lib-dir "translations" "qtwebengine_locales"))) - (putenv "RKT_WEBVIEW_PRG" - (let ((p - (path->string (build-path os-lib-dir rktwebview-prg))) - ) - (displayln p) - p - )) - (when (eq? os 'linux) - (putenv "QT_QPA_PLATFORM" "xcb") - (putenv "LD_LIBRARY_PATH" - (string-append - (path->string (build-path os-lib-dir)) ":" - (path->string (build-path os-lib-dir "platforms")) - ) - ) - ) - ) - ) - ;;; Preload libraries #| @@ -209,6 +181,8 @@ (define-ffi-definer define-rktwebview webview-lib) + + ;;; Callbacks from the OS library ;(define callback-box (box '())) @@ -300,6 +274,9 @@ ) ) +;RKTWEBVIEW_EXPORT void rkt_webview_env(const char *env_cmds[]); +(define-rktwebview rkt_webview_env + (_fun _cvector -> _void)) ;RKTWEBVIEW_QT_EXPORT void rkt_webview_init(int &argc, char **argv); (define-rktwebview rkt_webview_init @@ -458,6 +435,34 @@ ; 'done))))) ; (f))))) +(define rkt_env + (when (or (eq? os 'windows) (eq? os 'linux)) + (let ((env (list (string-append "QT_PLUGIN_PATH=" (path->string (build-path os-lib-dir))) + (string-append "QTWEBENGINEPROCESS_PATH=" (path->string (build-path os-lib-dir webengine-process))) + (string-append "QTWEBENGINE_RESOURCES_PATH=" (path->string (build-path os-lib-dir "resources"))) + (string-append "QTWEBENGINE_LOCALES_PATH=" (path->string (build-path os-lib-dir "translations" "qtwebengine_locales"))) + (string-append "RKT_WEBVIEW_PRG=" (path->string (build-path os-lib-dir rktwebview-prg)))))) + (when (eq? os 'linux) + (set! env (append + env + (list + (string-append "QT_QPA_PLATFORM=" "xcb") + (string-append "LD_LIBRARY_PATH=" + (string-append + (path->string (build-path os-lib-dir)) ":" + (path->string (build-path os-lib-dir "platforms")) + ))))) + ) + (append env (list #f))))) + +;(define env_array (_array _string/utf-8 (length rkt_env))) + +;(let ((i 0)) +; (while (< i (length rkt_env)) +; (array-set! env_array i (list-ref rkt_env i)) +; (set! i (+ i 1)))) + +(rkt_webview_env (list->cvector rkt_env _string/utf-8)) (rkt_webview_init) @@ -493,7 +498,7 @@ (set! waiting (- waiting 1)) ) ) - (sleep 0.001) + (sleep 0.005) (f)) )) (f))) diff --git a/rktwebview_qt/rktwebview.cpp b/rktwebview_qt/rktwebview.cpp index 3bba070..4d62fe5 100644 --- a/rktwebview_qt/rktwebview.cpp +++ b/rktwebview_qt/rktwebview.cpp @@ -526,3 +526,15 @@ rkt_data_t *rkt_webview_get_event() return nullptr; } } + +void rkt_webview_env(const char *env_cmds[]) +{ + int i; + for(i = 0; env_cmds[i] != nullptr && strcmp(env_cmds[i], "") != 0; i++) { +#ifdef WIN32 + _putenv(env_cmds[i]); +#else + putenv(env_cmds[i]); +#endif + } +} diff --git a/rktwebview_qt/rktwebview.h b/rktwebview_qt/rktwebview.h index 902a7d2..5bd8fd2 100644 --- a/rktwebview_qt/rktwebview.h +++ b/rktwebview_qt/rktwebview.h @@ -10,6 +10,7 @@ extern "C" { +RKTWEBVIEW_EXPORT void rkt_webview_env(const char *env_cmds[]); RKTWEBVIEW_EXPORT void rkt_webview_init(); RKTWEBVIEW_EXPORT void rkt_webview_cleanup(); //RKTWEBVIEW_EXPORT void rkt_webview_process_events(int for_ms);