diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index c22219fea..9991d98ea 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -270,16 +270,11 @@ void GUI_App::set_label_clr_sys(const wxColour& clr) { void GUI_App::recreate_GUI() { - std::cerr << "recreate_GUI" << std::endl; + // to make sure nobody accesses data from the soon-to-be-destroyed widgets: + tabs_list.clear(); + plater_ = nullptr; - clear_tabs_list(); - if (plater_) { - // before creating a new plater let's delete old one - plater_->Destroy(); - plater_ = nullptr; - } - - MainFrame* topwindow = dynamic_cast(GetTopWindow()); + MainFrame* topwindow = mainframe; mainframe = new MainFrame(); sidebar().obj_list()->init_objects(); // propagate model objects to object list @@ -691,15 +686,6 @@ void GUI_App::load_current_presets() } } -void GUI_App::clear_tabs_list() -{ - for (auto tab : tabs_list) { - tab->Destroy(); - tab = nullptr; - } - tabs_list.clear(); -} - #ifdef __APPLE__ // wxWidgets override to get an event on open files. void GUI_App::MacOpenFiles(const wxArrayString &fileNames) diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index a5b96598f..79da4531d 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -134,7 +134,6 @@ public: bool check_unsaved_changes(); bool checked_tab(Tab* tab); void load_current_presets(); - void clear_tabs_list(); #ifdef __APPLE__ // wxWidgets override to get an event on open files. diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index d47c7f4e8..2df3429fe 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -95,14 +95,10 @@ wxFrame(NULL, wxID_ANY, SLIC3R_BUILD, wxDefaultPosition, wxDefaultSize, wxDEFAUL _3DScene::remove_all_canvases(); // Slic3r::GUI::deregister_on_request_update_callback(); - // destroy and set to null tabs and a platter + // set to null tabs and a platter // to avoid any manipulations with them from App->wxEVT_IDLE after of the mainframe closing - wxGetApp().clear_tabs_list(); - if (wxGetApp().plater_) { - // before creating a new plater let's delete old one - wxGetApp().plater_->Destroy(); - wxGetApp().plater_ = nullptr; - } + wxGetApp().tabs_list.clear(); + wxGetApp().plater_ = nullptr; // propagate event event.Skip(); @@ -113,6 +109,7 @@ wxFrame(NULL, wxID_ANY, SLIC3R_BUILD, wxDefaultPosition, wxDefaultSize, wxDEFAUL update_ui_from_settings(); // FIXME (?) } + void MainFrame::init_tabpanel() { m_tabpanel = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNB_TOP | wxTAB_TRAVERSAL);