From c6f0c4121379efb43a767f2a65963d7e4c788ad3 Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Sun, 9 Oct 2022 09:40:38 +0800 Subject: [PATCH] Fix the random crash at the startup on Macos&&Linux don't do the post_init when adding script handler of webview Change-Id: I2c766c46bb67347286765dee539657b5efd7f64a --- src/slic3r/GUI/GUI_App.cpp | 2 +- src/slic3r/GUI/GUI_App.hpp | 4 ++++ src/slic3r/GUI/Widgets/WebView.cpp | 4 ++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 96dc21721..5aac8ede1 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -2307,7 +2307,7 @@ bool GUI_App::on_init_inner() //#ifdef __linux__ // if (!m_post_initialized && m_opengl_initialized) { //#else - if (!m_post_initialized) { + if (!m_post_initialized && !m_adding_script_handler) { //#endif m_post_initialized = true; #ifdef WIN32 diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index 209c1a75f..84565c8b9 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -269,6 +269,8 @@ private: boost::thread m_sync_update_thread; bool enable_sync = false; + bool m_adding_script_handler { false }; + public: bool OnInit() override; bool initialized() const { return m_initialized; } @@ -458,6 +460,8 @@ public: //BBS void load_url(wxString url); void run_script(wxString js); + bool is_adding_script_handler() { return m_adding_script_handler; } + void set_adding_script_handler(bool status) { m_adding_script_handler = status; } // Parameters extracted from the command line to be passed to GUI after initialization. GUI_InitParams* init_params { nullptr }; diff --git a/src/slic3r/GUI/Widgets/WebView.cpp b/src/slic3r/GUI/Widgets/WebView.cpp index 70b0134b6..d78552545 100644 --- a/src/slic3r/GUI/Widgets/WebView.cpp +++ b/src/slic3r/GUI/Widgets/WebView.cpp @@ -107,8 +107,12 @@ wxWebView* WebView::CreateWebView(wxWindow * parent, wxString const & url) #ifndef __WIN32__ Slic3r::GUI::wxGetApp().CallAfter([webView] { #endif + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": begin to add script message handler for wx."; + Slic3r::GUI::wxGetApp().set_adding_script_handler(true); if (!webView->AddScriptMessageHandler("wx")) wxLogError("Could not add script message handler"); + Slic3r::GUI::wxGetApp().set_adding_script_handler(false); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": finished add script message handler for wx."; #ifndef __WIN32__ }); #endif