FIX: async evaluateJavaScript on vebwiew on MacOS
Change-Id: If4c34ef0e9b23622047842bada5a32efcee04498
This commit is contained in:
parent
9df3e7500a
commit
4b4e70efcb
|
@ -1,14 +1,15 @@
|
||||||
#include "WebView.hpp"
|
#include "WebView.hpp"
|
||||||
#include "slic3r/GUI/GUI_App.hpp"
|
#include "slic3r/GUI/GUI_App.hpp"
|
||||||
|
#include "slic3r/Utils/MacDarkMode.hpp"
|
||||||
|
|
||||||
#include <wx/webviewarchivehandler.h>
|
#include <wx/webviewarchivehandler.h>
|
||||||
#include <wx/webviewfshandler.h>
|
#include <wx/webviewfshandler.h>
|
||||||
#include <wx/msw/webview_edge.h>
|
#include <wx/msw/webview_edge.h>
|
||||||
#include <wx/uri.h>
|
#include <wx/uri.h>
|
||||||
|
#include "wx/private/jsscriptwrapper.h"
|
||||||
|
|
||||||
#ifdef __WIN32__
|
#ifdef __WIN32__
|
||||||
#include "../WebView2.h"
|
#include "../WebView2.h"
|
||||||
#include "wx/private/jsscriptwrapper.h"
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
class FakeWebView : public wxWebView
|
class FakeWebView : public wxWebView
|
||||||
|
@ -124,6 +125,12 @@ bool WebView::RunScript(wxWebView *webView, wxString const &javascript)
|
||||||
int count = 0;
|
int count = 0;
|
||||||
wxJSScriptWrapper wrapJS(javascript, &count);
|
wxJSScriptWrapper wrapJS(javascript, &count);
|
||||||
return webView2->ExecuteScript(wrapJS.GetWrappedCode(), NULL) == 0;
|
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
|
#else
|
||||||
wxString result;
|
wxString result;
|
||||||
return webView->RunScript(javascript, &result);
|
return webView->RunScript(javascript, &result);
|
||||||
|
|
|
@ -10,6 +10,7 @@ namespace GUI {
|
||||||
extern bool mac_dark_mode();
|
extern bool mac_dark_mode();
|
||||||
extern double mac_max_scaling_factor();
|
extern double mac_max_scaling_factor();
|
||||||
extern void set_miniaturizable(void * window);
|
extern void set_miniaturizable(void * window);
|
||||||
|
void WKWebView_evaluateJavaScript(void * web, wxString const & script, void (*callback)(wxString const &));
|
||||||
|
|
||||||
void initGestures(void * view, wxEvtHandler * handler);
|
void initGestures(void * view, wxEvtHandler * handler);
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#import "MacDarkMode.hpp"
|
#import "MacDarkMode.hpp"
|
||||||
|
#include "wx/osx/core/cfstring.h"
|
||||||
|
|
||||||
#import <algorithm>
|
#import <algorithm>
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue