diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 6906614f8..15820c68a 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -5060,8 +5060,8 @@ void Plater::send_gcode() void Plater::eject_drive() { RemovableDriveManager::get_instance().update(0, true); - //RemovableDriveManager::get_instance().erase_callbacks(); - //RemovableDriveManager::get_instance().add_callback(std::bind(&Plater::drive_ejected_callback, this)); + RemovableDriveManager::get_instance().erase_callbacks(); + RemovableDriveManager::get_instance().add_remove_callback(std::bind(&Plater::drive_ejected_callback, this)); RemovableDriveManager::get_instance().eject_drive(RemovableDriveManager::get_instance().get_last_save_path()); } @@ -5070,7 +5070,7 @@ void Plater::drive_ejected_callback() if (RemovableDriveManager::get_instance().get_did_eject()) { RemovableDriveManager::get_instance().set_did_eject(false); - wxString message = "Unmounting successful. The device " + RemovableDriveManager::get_instance().get_last_save_name() + "(" + RemovableDriveManager::get_instance().get_last_save_path() + ")" + " can now be safely removed from the computer."; + wxString message = "Unmounting successful. The device " + RemovableDriveManager::get_instance().get_ejected_name() + "(" + RemovableDriveManager::get_instance().get_ejected_path() + ")" + " can now be safely removed from the computer."; wxMessageBox(message); } p->show_action_buttons(false); diff --git a/src/slic3r/GUI/RemovableDriveManager.cpp b/src/slic3r/GUI/RemovableDriveManager.cpp index 74197d677..76e028994 100644 --- a/src/slic3r/GUI/RemovableDriveManager.cpp +++ b/src/slic3r/GUI/RemovableDriveManager.cpp @@ -109,6 +109,8 @@ void RemovableDriveManager::eject_drive(const std::string &path) CloseHandle(handle); m_did_eject = true; m_current_drives.erase(it); + m_ejected_path = m_last_save_path; + m_ejected_name = m_last_save_name; break; } } @@ -373,7 +375,8 @@ void RemovableDriveManager::eject_drive(const std::string &path) m_did_eject = true; m_current_drives.erase(it); - + m_ejected_path = m_last_save_path; + m_ejected_name = m_last_save_name; break; } @@ -415,7 +418,9 @@ RemovableDriveManager::RemovableDriveManager(): m_last_save_path_verified(false), m_is_writing(false), m_did_eject(false), - m_plater_ready_to_slice(true) + m_plater_ready_to_slice(true), + m_ejected_path(""), + m_ejected_name("") #if __APPLE__ , m_rdmmm(new RDMMMWrapper()) #endif @@ -452,7 +457,10 @@ bool RemovableDriveManager::update(const long time,const bool check) search_for_drives(); if (m_drives_count != m_current_drives.size()) { - if (check)check_and_notify(); + if (check) + { + check_and_notify(); + } m_drives_count = m_current_drives.size(); } return !m_current_drives.empty(); @@ -500,7 +508,8 @@ void RemovableDriveManager::check_and_notify() { m_drive_count_changed_callback(m_plater_ready_to_slice); } - if(m_callbacks.size() != 0 && m_drives_count > m_current_drives.size() && m_last_save_path_verified && !is_drive_mounted(m_last_save_path)) + std::cout << m_callbacks.size() << m_last_save_path_verified << !is_drive_mounted(m_last_save_path) << std::endl; + if(m_callbacks.size() != 0 && m_drives_count > m_current_drives.size() /*&& m_last_save_path_verified */&& !is_drive_mounted(m_last_save_path)) { for (auto it = m_callbacks.begin(); it != m_callbacks.end(); ++it) { @@ -526,8 +535,17 @@ void RemovableDriveManager::set_plater_ready_to_slice(bool b) } void RemovableDriveManager::set_last_save_path(const std::string& path) { - m_last_save_path_verified = false; - m_last_save_path = path; + if(m_last_save_path_verified)// if old path is on drive + { + if(get_drive_from_path(path) != "") //and new is too, rewrite the path + { + m_last_save_path_verified = false; + m_last_save_path = path; + }//else do nothing + }else + { + m_last_save_path = path; + } } void RemovableDriveManager::verify_last_save_path() { @@ -604,4 +622,12 @@ size_t RemovableDriveManager::get_drives_count() { return m_current_drives.size(); } +std::string RemovableDriveManager::get_ejected_path() +{ + return m_ejected_path; +} +std::string RemovableDriveManager::get_ejected_name() +{ + return m_ejected_name; +} }}//namespace Slicer::Gui diff --git a/src/slic3r/GUI/RemovableDriveManager.hpp b/src/slic3r/GUI/RemovableDriveManager.hpp index 8ba2bc64d..6bd90e98c 100644 --- a/src/slic3r/GUI/RemovableDriveManager.hpp +++ b/src/slic3r/GUI/RemovableDriveManager.hpp @@ -64,6 +64,8 @@ public: void set_did_eject(const bool b); std::string get_drive_name(const std::string& path); size_t get_drives_count(); + std::string get_ejected_path(); + std::string get_ejected_name(); private: RemovableDriveManager(); void search_for_drives(); @@ -84,6 +86,8 @@ private: bool m_is_writing;//on device bool m_did_eject; bool m_plater_ready_to_slice; + std::string m_ejected_path; + std::string m_ejected_name; #if _WIN32 //registers for notifications by creating invisible window void register_window();