diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 5d968ef586..01cbc43bc2 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -695,16 +695,16 @@ bool PresetBundle::use_bbl_network() } bool PresetBundle::use_bbl_device_tab() { - const auto cfg = printers.get_edited_preset().config; - - if (!is_bbl_vendor()) + if (!is_bbl_vendor()) { return false; + } if (use_bbl_network()) { return true; } - // Use bbl device tab if printhost webui url is not set + const auto cfg = printers.get_edited_preset().config; + // Use bbl device tab if printhost webui url is not set return cfg.opt_string("print_host_webui").empty(); } diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 7cdd832da5..06da4d4b8b 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -5404,7 +5404,7 @@ void GUI_App::on_user_login_handle(wxCommandEvent &evt) void GUI_App::check_track_enable() { - // Orca: alaways disable track event + // Orca: telemetry only exists on the BBL cloud agent; always disable it. if (m_agent) { m_agent->track_enable(false); m_agent->track_remove_files(); diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 1c944cef0f..f55ce7cebc 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -1,9 +1,5 @@ #include "MainFrame.hpp" -#include -#ifdef __WXGTK__ -#include -#endif #include #include #include diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 012e8ad7df..0f858e3c90 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -16761,14 +16761,15 @@ void Plater::reslice() if (get_view3D_canvas3D()->get_gizmos_manager().is_in_editing_mode(true)) return; - // Keep slicing blocked even if a toolbar/menu path has not refreshed its enabled state yet. - // validate_current_plate also refreshes the missing-plugin notifications and plate readiness. - bool model_fits = false; - bool validate_error = false; - validate_current_plate(model_fits, validate_error); - if (!model_fits || validate_error) { + // Enforce the missing-plugin block at the slicing choke point: menu/keyboard/queued triggers can + // carry a stale enabled state while plugins load asynchronously. refresh_missing_plugin_block + // rebuilds the missing sets and notifications from the active presets without running + // Print::validate; all other validation keeps upstream behavior and is surfaced by + // update_background_process() below. + if (refresh_missing_plugin_block()) { + p->partplate_list.get_curr_plate()->update_slice_ready_status(false); p->main_frame->update_slice_print_status(MainFrame::eEventPlateUpdate, false); - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << ": current plate validation failed; slicing blocked."; + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << ": required plugins missing; slicing blocked."; return; } @@ -18713,7 +18714,7 @@ void Plater::validate_current_plate(bool& model_fits, bool& validate_error) } PartPlate* part_plate = p->partplate_list.get_curr_plate(); - part_plate->update_slice_ready_status(model_fits && !validate_error); + part_plate->update_slice_ready_status(model_fits); // The toolbar Slice button is normally refreshed only by the canvas // (EVT_GLCANVAS_ENABLE_ACTION_BUTTONS) on geometry updates. When the missing-plugin block toggles @@ -18722,7 +18723,7 @@ void Plater::validate_current_plate(bool& model_fits, bool& validate_error) // can_slice() flag that get_enable_slice_status() reads — so the button doesn't lag until the // next bed click. if (plugins_block_changed && !p->background_process.running()) - p->main_frame->update_slice_print_status(MainFrame::eEventObjectUpdate, model_fits && !validate_error); + p->main_frame->update_slice_print_status(MainFrame::eEventObjectUpdate, model_fits); return; } diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 8a7a31573e..48037a9a9e 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -722,7 +722,7 @@ public: // Rebuild the missing-plugin sets from the active presets and (re)show/close their notifications. // Returns true when slicing must be blocked (a referenced plugin is still missing); sets // *block_toggled when the blocked state changed since the previous call (so the caller can refresh - // the Slice button). Helper for validate_current_plate. + // the Slice button). Helper for validate_current_plate and the reslice() gate. bool refresh_missing_plugin_block(bool* block_toggled = nullptr); // Re-run plate validation when a plugin finishes loading, but only while a missing-plugin // notification is active, so it clears automatically once the required plugin is available.