# HG changeset patch # Date 1363331681 0 # User sbr # Parent 1b02d7630c552a6df7367a5a348e68729252ac1e Try to not reset the previously selected object between BuildObjectWindow invocations. diff --git a/src/object_gui.cpp b/src/object_gui.cpp --- a/src/object_gui.cpp +++ b/src/object_gui.cpp @@ -46,7 +46,11 @@ this->FinishInitNested(desc, 0); - this->SelectFirstAvailableObject(true); + if (this->CanRestoreSelectedObject()) { + this->SelectOtherObject(_selected_object_index); + } else { + this->SelectFirstAvailableObject(true); + } assert(ObjectClass::Get(_selected_object_class)->GetUISpecCount() > 0); // object GUI should be disables elsewise this->EnsureSelectedObjectClassIsVisible(); this->GetWidget(WID_BO_OBJECT_MATRIX)->SetCount(4); @@ -398,6 +402,20 @@ } this->vscroll->ScrollTowards(pos); } + + /** + * Tests if the previously selected object can be selected + * @return \c true if the selected object is available, \c false otherwise. + */ + bool CanRestoreSelectedObject() + { + if (_selected_object_index == -1) return false; + + ObjectClass *sel_objclass = ObjectClass::Get(_selected_object_class); + if ((int) sel_objclass->GetUISpecCount() < _selected_object_index) return false; + + return sel_objclass->GetSpec(_selected_object_index)->IsAvailable(); + } }; static const NWidgetPart _nested_build_object_widgets[] = {