# HG changeset patch # Date 1363331681 0 # User sbr # Parent 6620f17aa57f7256e73089401810829d3484f4ea 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 @@ -47,6 +47,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->GetSpecCount() < _selected_object_index) return false; + + return sel_objclass->GetSpec(_selected_object_index)->IsAvailable(); + } + public: BuildObjectWindow(const WindowDesc *desc, Window *w) : PickerWindowBase(w), info_height(1) { @@ -59,7 +73,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);