From fddb774d4abbb9502c282af76e5d1ce8a70d93df Mon Sep 17 00:00:00 2001 From: alves Date: Wed, 4 Mar 2026 09:59:07 +0800 Subject: [PATCH] fix linux slice crash question --- src/slic3r/GUI/PresetComboBoxes.cpp | 3 +++ src/slic3r/GUI/Widgets/WebView.cpp | 13 +++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp index 18d7528336..d7682b8451 100644 --- a/src/slic3r/GUI/PresetComboBoxes.cpp +++ b/src/slic3r/GUI/PresetComboBoxes.cpp @@ -205,6 +205,9 @@ void PresetComboBox::update_selection() // A workaround for a set of issues related to text fitting into gtk widgets: #if defined(__WXGTK20__) || defined(__WXGTK3__) + // Guard: m_widget may not be a GtkCellLayout (e.g. not yet realized, or GtkComboBoxText in Flatpak/GTK3) + if (!m_widget || !GTK_IS_CELL_LAYOUT(m_widget)) + return; GList* cells = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(m_widget)); // 'cells' contains the GtkCellRendererPixBuf for the icon, diff --git a/src/slic3r/GUI/Widgets/WebView.cpp b/src/slic3r/GUI/Widgets/WebView.cpp index c388f39ed4..8086bdd169 100644 --- a/src/slic3r/GUI/Widgets/WebView.cpp +++ b/src/slic3r/GUI/Widgets/WebView.cpp @@ -275,10 +275,19 @@ wxWebView* WebView::CreateWebView(wxWindow * parent, wxString const & url) // And the memory: file system webView->RegisterHandler(wxSharedPtr(new wxWebViewFSHandler("memory"))); #else - // With WKWebView handlers need to be registered before creation + // Handlers must be registered before Create(). Linux (WebKit2): scheme is process-global, register once to avoid "Cannot register URI scheme ... more than once". + // macOS (WKWebView): scheme is per-view, each WebView needs its own handlers. +#if defined(__linux__) + static bool s_wxfs_memory_handlers_registered = false; + if (!s_wxfs_memory_handlers_registered) { + webView->RegisterHandler(wxSharedPtr(new wxWebViewArchiveHandler("wxfs"))); + webView->RegisterHandler(wxSharedPtr(new wxWebViewFSHandler("memory"))); + s_wxfs_memory_handlers_registered = true; + } +#else webView->RegisterHandler(wxSharedPtr(new wxWebViewArchiveHandler("wxfs"))); - // And the memory: file system webView->RegisterHandler(wxSharedPtr(new wxWebViewFSHandler("memory"))); +#endif webView->Create(parent, wxID_ANY, url2, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); webView->SetUserAgent(wxString::Format("SM-Slicer/v%s (%s) Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko)", SLIC3R_VERSION, Slic3r::GUI::wxGetApp().dark_mode() ? "dark" : "light"));