Fix crash when deleting objects while ui job is running.

This commit is contained in:
tamasmeszaros 2021-11-30 11:29:30 +01:00
parent d0014c3aa4
commit a683745347

View File

@ -2916,6 +2916,7 @@ void Plater::priv::remove(size_t obj_idx)
if (view3D->is_layers_editing_enabled()) if (view3D->is_layers_editing_enabled())
view3D->enable_layers_editing(false); view3D->enable_layers_editing(false);
m_ui_jobs.cancel_all();
model.delete_object(obj_idx); model.delete_object(obj_idx);
update(); update();
// Delete object from Sidebar list. Do it after update, so that the GLScene selection is updated with the modified model. // Delete object from Sidebar list. Do it after update, so that the GLScene selection is updated with the modified model.
@ -2930,6 +2931,7 @@ void Plater::priv::delete_object_from_model(size_t obj_idx)
if (! model.objects[obj_idx]->name.empty()) if (! model.objects[obj_idx]->name.empty())
snapshot_label += ": " + wxString::FromUTF8(model.objects[obj_idx]->name.c_str()); snapshot_label += ": " + wxString::FromUTF8(model.objects[obj_idx]->name.c_str());
Plater::TakeSnapshot snapshot(q, snapshot_label); Plater::TakeSnapshot snapshot(q, snapshot_label);
m_ui_jobs.cancel_all();
model.delete_object(obj_idx); model.delete_object(obj_idx);
update(); update();
object_list_changed(); object_list_changed();
@ -2947,6 +2949,8 @@ void Plater::priv::delete_all_objects_from_model()
view3D->get_canvas3d()->reset_sequential_print_clearance(); view3D->get_canvas3d()->reset_sequential_print_clearance();
m_ui_jobs.cancel_all();
// Stop and reset the Print content. // Stop and reset the Print content.
background_process.reset(); background_process.reset();
model.clear_objects(); model.clear_objects();
@ -2977,6 +2981,8 @@ void Plater::priv::reset()
view3D->get_canvas3d()->reset_sequential_print_clearance(); view3D->get_canvas3d()->reset_sequential_print_clearance();
m_ui_jobs.cancel_all();
// Stop and reset the Print content. // Stop and reset the Print content.
this->background_process.reset(); this->background_process.reset();
model.clear_objects(); model.clear_objects();
@ -4546,7 +4552,7 @@ void Plater::priv::set_bed_shape(const Pointfs& shape, const double max_print_he
bool Plater::priv::can_delete() const bool Plater::priv::can_delete() const
{ {
return !get_selection().is_empty() && !get_selection().is_wipe_tower() && !m_ui_jobs.is_any_running(); return !get_selection().is_empty() && !get_selection().is_wipe_tower();
} }
bool Plater::priv::can_delete_all() const bool Plater::priv::can_delete_all() const
@ -5399,6 +5405,7 @@ void Plater::remove_selected()
return; return;
Plater::TakeSnapshot snapshot(this, _L("Delete Selected Objects")); Plater::TakeSnapshot snapshot(this, _L("Delete Selected Objects"));
p->m_ui_jobs.cancel_all();
p->view3D->delete_selected(); p->view3D->delete_selected();
} }