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); + } + }]; +} + } }