diff --git a/src/BambuStudio.cpp b/src/BambuStudio.cpp index fd08cd5e7e..add0970320 100644 --- a/src/BambuStudio.cpp +++ b/src/BambuStudio.cpp @@ -2401,7 +2401,7 @@ bool CLI::setup(int argc, char **argv) #ifdef __APPLE__ // The application is packed in the .dmg archive as 'Slic3r.app/Contents/MacOS/Slic3r' // The resources are packed to 'Slic3r.app/Contents/Resources' - boost::filesystem::path path_resources = boost::filesystem::canonical(path_to_binary).parent_path() / "../Resources"; + boost::filesystem::path path_resources = boost::filesystem::canonical(path_to_binary).parent_path().parent_path() / "Resources"; #elif defined _WIN32 // The application is packed in the .zip archive in the root, // The resources are packed to 'resources' @@ -2415,7 +2415,7 @@ bool CLI::setup(int argc, char **argv) // The application is packed in the .tar.bz archive (or in AppImage) as 'bin/slic3r', // The resources are packed to 'resources' // Path from Slic3r binary to resources: - boost::filesystem::path path_resources = boost::filesystem::canonical(path_to_binary).parent_path() / "../resources"; + boost::filesystem::path path_resources = boost::filesystem::canonical(path_to_binary).parent_path().parent_path() / "resources"; #endif set_resources_dir(path_resources.string()); diff --git a/src/slic3r/GUI/PrivacyUpdateDialog.cpp b/src/slic3r/GUI/PrivacyUpdateDialog.cpp index e6addd373a..c2d19a9377 100644 --- a/src/slic3r/GUI/PrivacyUpdateDialog.cpp +++ b/src/slic3r/GUI/PrivacyUpdateDialog.cpp @@ -57,16 +57,16 @@ PrivacyUpdateDialog::PrivacyUpdateDialog(wxWindow* parent, wxWindowID id, const m_vebview_release_note->SetSize(wxSize(FromDIP(540), FromDIP(340))); m_vebview_release_note->SetMinSize(wxSize(FromDIP(540), FromDIP(340))); - fs::path ph(data_dir()); - ph /= "resources/tooltip/privacyupdate.html"; - if (!fs::exists(ph)) { - ph = resources_dir(); - ph /= "tooltip/privacyupdate.html"; - } - auto url = ph.string(); - std::replace(url.begin(), url.end(), '\\', '/'); - url = "file:///" + url; - m_vebview_release_note->LoadURL(from_u8(url)); + fs::path ph(data_dir()); + ph /= "resources/tooltip/privacyupdate.html"; + if (!fs::exists(ph)) { + ph = resources_dir(); + ph /= "tooltip/privacyupdate.html"; + } + m_host_url = ph.string(); + std::replace(m_host_url.begin(), m_host_url.end(), '\\', '/'); + m_host_url = "file:///" + m_host_url; + m_vebview_release_note->LoadURL(from_u8(m_host_url)); m_sizer_right->Add(m_vebview_release_note, 0, wxEXPAND | wxRIGHT | wxLEFT, FromDIP(15)); auto sizer_button = new wxBoxSizer(wxHORIZONTAL); @@ -84,8 +84,11 @@ PrivacyUpdateDialog::PrivacyUpdateDialog(wxWindow* parent, wxWindowID id, const if (!m_mkdown_text.empty()) { ShowReleaseNote(m_mkdown_text); } + e.Skip(); }); + m_vebview_release_note->Bind(wxEVT_WEBVIEW_NAVIGATING , &PrivacyUpdateDialog::OnNavigating, this); + m_button_ok = new Button(this, _L("Accept")); m_button_ok->SetBackgroundColor(btn_bg_green); m_button_ok->SetBorderColor(*wxWHITE); @@ -140,29 +143,24 @@ PrivacyUpdateDialog::PrivacyUpdateDialog(wxWindow* parent, wxWindowID id, const wxGetApp().UpdateDlgDarkUI(this); } -void PrivacyUpdateDialog::OnLoaded(wxWebViewEvent& event) -{ - event.Skip(); -} - -void PrivacyUpdateDialog::OnTitleChanged(wxWebViewEvent& event) -{ - event.Skip(); -} -void PrivacyUpdateDialog::OnError(wxWebViewEvent& event) -{ - event.Skip(); -} - wxWebView* PrivacyUpdateDialog::CreateTipView(wxWindow* parent) { wxWebView* tipView = WebView::CreateWebView(parent, ""); - tipView->Bind(wxEVT_WEBVIEW_LOADED, &PrivacyUpdateDialog::OnLoaded, this); - tipView->Bind(wxEVT_WEBVIEW_NAVIGATED, &PrivacyUpdateDialog::OnTitleChanged, this); - tipView->Bind(wxEVT_WEBVIEW_ERROR, &PrivacyUpdateDialog::OnError, this); return tipView; } +void PrivacyUpdateDialog::OnNavigating(wxWebViewEvent& event) +{ + wxString jump_url = event.GetURL(); + if (jump_url != m_host_url) { + event.Veto(); + wxLaunchDefaultBrowser(jump_url); + } + else { + event.Skip(); + } +} + bool PrivacyUpdateDialog::ShowReleaseNote(std::string content) { auto script = "window.showMarkdown('" + url_encode(content) + "', true);"; diff --git a/src/slic3r/GUI/PrivacyUpdateDialog.hpp b/src/slic3r/GUI/PrivacyUpdateDialog.hpp index 99c7165607..b737bcd486 100644 --- a/src/slic3r/GUI/PrivacyUpdateDialog.hpp +++ b/src/slic3r/GUI/PrivacyUpdateDialog.hpp @@ -31,9 +31,7 @@ public: long style = wxPD_APP_MODAL| wxCAPTION ); wxWebView* CreateTipView(wxWindow* parent); - void OnLoaded(wxWebViewEvent& event); - void OnTitleChanged(wxWebViewEvent& event); - void OnError(wxWebViewEvent& event); + void OnNavigating(wxWebViewEvent& event); bool ShowReleaseNote(std::string content); void RunScript(std::string script); void set_text(std::string str) { m_mkdown_text = str; }; @@ -50,6 +48,7 @@ public: Button* m_button_ok; Button* m_button_cancel; std::string m_mkdown_text; + std::string m_host_url; }; }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/WebUserLoginDialog.cpp b/src/slic3r/GUI/WebUserLoginDialog.cpp index b0df7d5029..1c324b8d3b 100644 --- a/src/slic3r/GUI/WebUserLoginDialog.cpp +++ b/src/slic3r/GUI/WebUserLoginDialog.cpp @@ -287,6 +287,15 @@ void ZUserLogin::OnScriptMessage(wxWebViewEvent &evt) wxLaunchDefaultBrowser(url); }); } + } + else if (strCmd == "new_webpage") { + if (j["data"].contains("url")) { + std::string jump_url = j["data"]["url"].get(); + CallAfter([this, jump_url] { + wxString url = wxString::FromUTF8(jump_url); + wxLaunchDefaultBrowser(url); + }); + } return; } } catch (std::exception &e) {