diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 1b536baa8..54de6cd56 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -4188,6 +4188,8 @@ void Plater::priv::on_select_preset(wxCommandEvent &evt) wxGetApp().preset_bundle->set_filament_preset(idx, preset_name); } + std::string last_selected_ph_printer_name = combo->get_selected_ph_printer_name(); + bool select_preset = !combo->selection_is_changed_according_to_physical_printers(); // TODO: ? if (preset_type == Preset::TYPE_FILAMENT && sidebar->is_multifilament()) { @@ -4196,7 +4198,7 @@ void Plater::priv::on_select_preset(wxCommandEvent &evt) } else if (select_preset) { wxWindowUpdateLocker noUpdates(sidebar->presets_panel()); - wxGetApp().get_tab(preset_type)->select_preset(preset_name); + wxGetApp().get_tab(preset_type)->select_preset(preset_name, false, last_selected_ph_printer_name); } if (preset_type != Preset::TYPE_PRINTER || select_preset) { diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp index 6fcde3bf6..c4d0fc670 100644 --- a/src/slic3r/GUI/PresetComboBoxes.cpp +++ b/src/slic3r/GUI/PresetComboBoxes.cpp @@ -666,6 +666,18 @@ void PlaterPresetComboBox::OnSelect(wxCommandEvent &evt) evt.Skip(); } +std::string PlaterPresetComboBox::get_selected_ph_printer_name() const +{ + if (m_type != Preset::TYPE_PRINTER) + return {}; + + const PhysicalPrinterCollection& physical_printers = m_preset_bundle->physical_printers; + if (physical_printers.has_selection()) + return physical_printers.get_selected_full_printer_name(); + + return {}; +} + void PlaterPresetComboBox::switch_to_tab() { Tab* tab = wxGetApp().get_tab(m_type); diff --git a/src/slic3r/GUI/PresetComboBoxes.hpp b/src/slic3r/GUI/PresetComboBoxes.hpp index d0abbe203..2a477ac11 100644 --- a/src/slic3r/GUI/PresetComboBoxes.hpp +++ b/src/slic3r/GUI/PresetComboBoxes.hpp @@ -164,6 +164,8 @@ public: void sys_color_changed() override; void OnSelect(wxCommandEvent& evt) override; + std::string get_selected_ph_printer_name() const; + private: int m_extruder_idx = -1; }; diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 50de06ac9..cf3b96d80 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -3406,7 +3406,7 @@ void Tab::select_preset(std::string preset_name, bool delete_current /*=false*/, // If preset selection was canceled and previously was selected physical printer, we should select it back m_preset_bundle->physical_printers.select_printer(last_selected_ph_printer_name); } - if (m_preset_bundle->physical_printers.has_selection()) { + else if (m_preset_bundle->physical_printers.has_selection()) { // If preset selection was canceled and physical printer was selected // we must disable selection marker for the physical printers m_preset_bundle->physical_printers.unselect_printer();