From 4b4e70efcb7014c32957e785fc4f4657f65b1414 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Tue, 2 Aug 2022 17:59:28 +0800 Subject: [PATCH] FIX: async evaluateJavaScript on vebwiew on MacOS Change-Id: If4c34ef0e9b23622047842bada5a32efcee04498 --- src/slic3r/GUI/Widgets/WebView.cpp | 9 ++++++++- src/slic3r/Utils/MacDarkMode.hpp | 1 + src/slic3r/Utils/MacDarkMode.mm | 11 +++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/Widgets/WebView.cpp b/src/slic3r/GUI/Widgets/WebView.cpp index c0fadad0f..cd1ef7cb0 100644 --- a/src/slic3r/GUI/Widgets/WebView.cpp +++ b/src/slic3r/GUI/Widgets/WebView.cpp @@ -1,14 +1,15 @@ #include "WebView.hpp" #include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/Utils/MacDarkMode.hpp" #include #include #include #include +#include "wx/private/jsscriptwrapper.h" #ifdef __WIN32__ #include "../WebView2.h" -#include "wx/private/jsscriptwrapper.h" #endif class FakeWebView : public wxWebView @@ -124,6 +125,12 @@ bool WebView::RunScript(wxWebView *webView, wxString const &javascript) int count = 0; wxJSScriptWrapper wrapJS(javascript, &count); return webView2->ExecuteScript(wrapJS.GetWrappedCode(), NULL) == 0; +#elif defined __WXMAC__ + WKWebView * wkWebView = (WKWebView *) webView->GetNativeBackend(); + int count = 0; + wxJSScriptWrapper wrapJS(javascript, &count); + Slic3r::GUI::WKWebView_evaluateJavaScript(wkWebView, wrapJS.GetWrappedCode(), nullptr); + return true; #else wxString result; return webView->RunScript(javascript, &result); diff --git a/src/slic3r/Utils/MacDarkMode.hpp b/src/slic3r/Utils/MacDarkMode.hpp index 8a5dd30af..3ef1b6846 100644 --- a/src/slic3r/Utils/MacDarkMode.hpp +++ b/src/slic3r/Utils/MacDarkMode.hpp @@ -10,6 +10,7 @@ namespace GUI { extern bool mac_dark_mode(); extern double mac_max_scaling_factor(); extern void set_miniaturizable(void * window); +void WKWebView_evaluateJavaScript(void * web, wxString const & script, void (*callback)(wxString const &)); void initGestures(void * view, wxEvtHandler * handler); diff --git a/src/slic3r/Utils/MacDarkMode.mm b/src/slic3r/Utils/MacDarkMode.mm index 23c6cf006..ec349ec65 100644 --- a/src/slic3r/Utils/MacDarkMode.mm +++ b/src/slic3r/Utils/MacDarkMode.mm @@ -1,4 +1,5 @@ #import "MacDarkMode.hpp" +#include "wx/osx/core/cfstring.h" #import @@ -57,6 +58,16 @@ void set_miniaturizable(void * window) } } +void WKWebView_evaluateJavaScript(void * web, wxString const & script, void (*callback)(wxString const &)) +{ + [(WKWebView*)web evaluateJavaScript:wxCFStringRef(script).AsNSString() completionHandler: ^(id result, NSError *error) { + if (callback && error != nil) { + wxString err = wxCFStringRef(error.localizedFailureReason).AsString(); + callback(err); + } + }]; +} + } }