mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-10-14 11:21:18 +00:00
Restore the Tagged User-Agent on Linux with WebKitGTK's Own Prefix (#16466)
Linux webviews lost the BBL-Slicer, dark|light and BBL-Language tags with the stock WebKitGTK User-Agent, so the bundled pages stayed light and dropped every message to the host. The tags come back on Linux, now appended to the string WebKitGTK reports for itself instead of the Mac one. Windows and macOS are untouched.
This commit is contained in:
@@ -56,7 +56,12 @@ namespace fs = boost::filesystem;
|
||||
#define WEBKIT_API
|
||||
struct WebKitWebView;
|
||||
struct WebKitJavascriptResult;
|
||||
struct WebKitSettings;
|
||||
extern "C" {
|
||||
WEBKIT_API WebKitSettings *
|
||||
webkit_settings_new (void);
|
||||
WEBKIT_API const gchar *
|
||||
webkit_settings_get_user_agent (WebKitSettings *settings);
|
||||
WEBKIT_API void
|
||||
webkit_web_view_run_javascript (WebKitWebView *web_view,
|
||||
const gchar *script,
|
||||
@@ -284,6 +289,23 @@ static WebViewRef *webview_ref(wxWebView *webView)
|
||||
return webView ? static_cast<WebViewRef *>(webView->GetRefData()) : nullptr;
|
||||
}
|
||||
|
||||
#ifdef __linux__
|
||||
// WebKitGTK's own User-Agent with the tags the bundled pages (globalapi.js) and Bambu's cloud read
|
||||
// appended. wx's GTK backend cannot report the stock string, so it comes from a throwaway settings object.
|
||||
static wxString linux_user_agent()
|
||||
{
|
||||
static const wxString stock = [] {
|
||||
WebKitSettings *settings = webkit_settings_new();
|
||||
wxString ua = wxString::FromUTF8(webkit_settings_get_user_agent(settings));
|
||||
g_object_unref(settings);
|
||||
return ua;
|
||||
}();
|
||||
return wxString::Format("%s BBL-Slicer/v%s (%s) BBL-Language/%s", stock, Slic3r::GUI::wxGetApp().get_bbl_client_version(),
|
||||
Slic3r::GUI::wxGetApp().dark_mode() ? "dark" : "light",
|
||||
Slic3r::GUI::wxGetApp().current_language_code().BeforeFirst('_'));
|
||||
}
|
||||
#endif
|
||||
|
||||
wxWebView* WebView::CreateWebView(wxWindow * parent, wxString const & url)
|
||||
{
|
||||
#if wxUSE_WEBVIEW_EDGE
|
||||
@@ -336,7 +358,9 @@ wxWebView* WebView::CreateWebView(wxWindow * parent, wxString const & url)
|
||||
s_schemes_registered = true;
|
||||
}
|
||||
webView->Create(parent, wxID_ANY, url2, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE);
|
||||
#ifndef __linux__
|
||||
#ifdef __linux__
|
||||
webView->SetUserAgent(linux_user_agent());
|
||||
#else
|
||||
webView->SetUserAgent(wxString::Format("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) BBL-Slicer/v%s (%s) BBL-Language/%s",
|
||||
Slic3r::GUI::wxGetApp().get_bbl_client_version(), Slic3r::GUI::wxGetApp().dark_mode() ? "dark" : "light", language_code.mb_str()));
|
||||
#endif
|
||||
@@ -472,7 +496,9 @@ void WebView::RecreateAll()
|
||||
wxString language_code = Slic3r::GUI::wxGetApp().current_language_code().BeforeFirst('_');
|
||||
language_code = language_code.ToStdString();
|
||||
for (auto webView : g_webviews) {
|
||||
#ifndef __linux__
|
||||
#ifdef __linux__
|
||||
webView->SetUserAgent(linux_user_agent());
|
||||
#else
|
||||
webView->SetUserAgent(wxString::Format("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) BBL-Slicer/v%s (%s) BBL-Language/%s",
|
||||
Slic3r::GUI::wxGetApp().get_bbl_client_version(), dark ? "dark" : "light", language_code.mb_str()));
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user