summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/object_gui.cpp20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/object_gui.cpp b/src/object_gui.cpp
index 35c395891..429f7a40f 100644
--- a/src/object_gui.cpp
+++ b/src/object_gui.cpp
@@ -44,6 +44,20 @@ class BuildObjectWindow : public PickerWindowBase {
this->vscroll->ScrollTowards(pos);
}
+ /**
+ * Tests whether 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)
{
@@ -56,7 +70,11 @@ public:
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<NWidgetMatrix>(WID_BO_OBJECT_MATRIX)->SetCount(4);