diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index 61636972f4..5d2f7efe69 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -457,7 +457,12 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con if (opt != nullptr) { if (opt->getInt() > filament_cnt) { DynamicPrintConfig new_conf = *config; - new_conf.set_key_value(key, new ConfigOptionInt(0)); + const DynamicPrintConfig *conf_temp = wxGetApp().plater()->config(); + int new_value = 0; + if (conf_temp != nullptr && conf_temp->has(key)) { + new_value = conf_temp->opt_int(key); + } + new_conf.set_key_value(key, new ConfigOptionInt(new_value)); apply(config, &new_conf); } } diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 652438c6fd..4a5d395903 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -752,14 +752,21 @@ struct DynamicFilamentList : DynamicList if (items.empty()) update(true); auto cb = dynamic_cast(c->window); - auto n = cb->GetSelection(); + wxString old_selection = cb->GetStringSelection(); + int old_index = cb->GetSelection(); cb->Clear(); cb->Append(_L("Default")); for (auto i : items) { cb->Append(i.first, i.second ? *i.second : wxNullBitmap); } - if ((unsigned int)n < cb->GetCount()) - cb->SetSelection(n); + int new_index = cb->FindString(old_selection); + if (new_index != wxNOT_FOUND) { + cb->SetSelection(new_index); + } else if ((unsigned int) old_index < cb->GetCount()) { + cb->SetSelection(old_index); + } else { + cb->SetSelection(0); + } } wxString get_value(int index) override {