diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.cpp b/src/slic3r/GUI/Jobs/ArrangeJob.cpp index 9b81736a6..dc2a5016c 100644 --- a/src/slic3r/GUI/Jobs/ArrangeJob.cpp +++ b/src/slic3r/GUI/Jobs/ArrangeJob.cpp @@ -750,6 +750,7 @@ void ArrangeJob::finalize() { m_plater->update(); Job::finalize(); + m_plater->m_arrange_running.store(false); } std::optional diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 79d4c322c..78a5e7e2c 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -11098,8 +11098,10 @@ int Plater::select_plate_by_hover_id(int hover_id, bool right_click) ret = select_plate(plate_index); if (!ret) { - set_prepare_state(Job::PREPARE_STATE_MENU); - arrange(); + if (last_arrange_job_is_finished()) { + set_prepare_state(Job::PREPARE_STATE_MENU); + arrange(); + } } else { diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 56d97d83a..f6c7420d2 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -678,6 +678,13 @@ public: std::string get_preview_only_filename() { return m_preview_only_filename; }; + bool last_arrange_job_is_finished() + { + bool prevRunning = false; + return m_arrange_running.compare_exchange_strong(prevRunning, true); + }; + std::atomic m_arrange_running{false}; + private: struct priv; std::unique_ptr p;