diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 926242061..25dbfceb9 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -3956,7 +3956,7 @@ void DeviceManager::clean_user_info() userMachineList.clear(); } -bool DeviceManager::set_selected_machine(std::string dev_id) +bool DeviceManager::set_selected_machine(std::string dev_id, bool need_disconnect) { BOOST_LOG_TRIVIAL(info) << "set_selected_machine=" << dev_id; auto my_machine_list = get_my_machine_list(); @@ -3966,7 +3966,7 @@ bool DeviceManager::set_selected_machine(std::string dev_id) auto last_selected = my_machine_list.find(selected_machine); if (last_selected != my_machine_list.end()) { if (last_selected->second->connection_type() == "lan") { - if (last_selected->second->is_connecting()) + if (last_selected->second->is_connecting() && !need_disconnect) return false; m_agent->disconnect_printer(); } diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 13c066f94..5464309aa 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -816,7 +816,7 @@ public: void erase_user_machine(std::string dev_id); void clean_user_info(); - bool set_selected_machine(std::string dev_id); + bool set_selected_machine(std::string dev_id, bool need_disconnect = false); MachineObject* get_selected_machine(); /* return machine has access code and user machine if login*/ diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 53d0ec40f..11c5c2f52 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -2575,7 +2575,7 @@ void SelectMachineDialog::on_selection_changed(wxCommandEvent &event) if (obj && !obj->get_lan_mode_connection_state()) { obj->command_get_version(); obj->command_request_push_all(); - dev->set_selected_machine(m_printer_last_select); + dev->set_selected_machine(m_printer_last_select, true); // Has changed machine unrecoverably GUI::wxGetApp().sidebar().load_ams_list(obj->dev_id, obj->amsList); update_select_layout(obj);