From abb8e3d9b144c79bc14b3529d14ab94107fc70e7 Mon Sep 17 00:00:00 2001 From: Vojtech Bubnik <bubnikv@gmail.com> Date: Tue, 17 Jan 2023 13:08:44 +0100 Subject: [PATCH] Fixed update of UI when background slicing is stopped by Platter update function. The update used to be performed by sending EVT_PROCESS_COMPLETED wxCommandEvent to Plater, however the type of the event was refactored (enhanced) to SlicingProcessCompletedEvent long time ago, thus the message sent in this particular case was not being delivered. --- src/slic3r/GUI/Plater.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index ea168ba7f..79ce8e4b1 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -124,9 +124,14 @@ static const std::pair<unsigned int, unsigned int> THUMBNAIL_SIZE_3MF = { 256, 2 namespace Slic3r { namespace GUI { +// Trigger Plater::schedule_background_process(). wxDEFINE_EVENT(EVT_SCHEDULE_BACKGROUND_PROCESS, SimpleEvent); +// BackgroundSlicingProcess updates UI with slicing progress: Status bar / progress bar has to be updated, possibly scene has to be refreshed, +// see PrintBase::SlicingStatus for the content of the message. wxDEFINE_EVENT(EVT_SLICING_UPDATE, SlicingStatusEvent); +// FDM slicing finished, but G-code was not exported yet. Initial G-code preview shall be displayed by the UI. wxDEFINE_EVENT(EVT_SLICING_COMPLETED, wxCommandEvent); +// BackgroundSlicingProcess finished either with success or error. wxDEFINE_EVENT(EVT_PROCESS_COMPLETED, SlicingProcessCompletedEvent); wxDEFINE_EVENT(EVT_EXPORT_BEGAN, wxCommandEvent); @@ -3350,10 +3355,8 @@ unsigned int Plater::priv::update_background_process(bool force_validation, bool if (invalidated != Print::APPLY_STATUS_UNCHANGED && was_running && ! this->background_process.running() && (return_state & UPDATE_BACKGROUND_PROCESS_RESTART) == 0) { // The background processing was killed and it will not be restarted. - wxCommandEvent evt(EVT_PROCESS_COMPLETED); - evt.SetInt(-1); // Post the "canceled" callback message, so that it will be processed after any possible pending status bar update messages. - wxQueueEvent(GUI::wxGetApp().mainframe->m_plater, evt.Clone()); + wxQueueEvent(GUI::wxGetApp().mainframe->m_plater, new SlicingProcessCompletedEvent(EVT_PROCESS_COMPLETED, 0, SlicingProcessCompletedEvent::Cancelled, std::exception_ptr{})); } if ((return_state & UPDATE_BACKGROUND_PROCESS_INVALID) != 0)