From f004e9194b648faee6e503b537e8c20ef709eb2c Mon Sep 17 00:00:00 2001 From: alves Date: Wed, 4 Mar 2026 17:48:36 +0800 Subject: [PATCH] fix win size bug on linux. --- src/slic3r/GUI/GUI_Utils.cpp | 6 ++++++ src/slic3r/GUI/Widgets/WebView.cpp | 12 ++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/slic3r/GUI/GUI_Utils.cpp b/src/slic3r/GUI/GUI_Utils.cpp index 43fac34f94..33e2bf649e 100644 --- a/src/slic3r/GUI/GUI_Utils.cpp +++ b/src/slic3r/GUI/GUI_Utils.cpp @@ -504,6 +504,12 @@ std::deque dialogStack; void fit_in_display(wxTopLevelWindow& window, wxSize desired_size) { + // GTK requires width >= -1 and height > 0 for gtk_window_resize/set_size_request + if (desired_size.GetWidth() < WINDOW_MIN_WIDTH) + desired_size.SetWidth(WINDOW_MIN_WIDTH); + if (desired_size.GetHeight() < WINDOW_MIN_HEIGHT) + desired_size.SetHeight(WINDOW_MIN_HEIGHT); + const auto display_size = wxDisplay(window.GetParent()).GetClientArea(); if (desired_size.GetWidth() > display_size.GetWidth()) { desired_size.SetWidth(display_size.GetWidth() * 4 / 5); diff --git a/src/slic3r/GUI/Widgets/WebView.cpp b/src/slic3r/GUI/Widgets/WebView.cpp index 8086bdd169..d3633ee40c 100644 --- a/src/slic3r/GUI/Widgets/WebView.cpp +++ b/src/slic3r/GUI/Widgets/WebView.cpp @@ -17,6 +17,11 @@ #endif #include "sentry_wrapper/SentryWrapper.hpp" + +#if defined(__linux__) +#include +#endif + #ifdef __WIN32__ #include #include @@ -278,12 +283,11 @@ wxWebView* WebView::CreateWebView(wxWindow * parent, wxString const & url) // 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) { + static std::once_flag s_wxfs_memory_handlers_once; + std::call_once(s_wxfs_memory_handlers_once, [webView]() { 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"))); webView->RegisterHandler(wxSharedPtr(new wxWebViewFSHandler("memory")));