summaryrefslogtreecommitdiff
path: root/src/depot_gui.cpp
diff options
context:
space:
mode:
authorCharles Pigott <charlespigott@googlemail.com>2021-02-22 13:50:32 +0000
committerCharles Pigott <charlespigott@googlemail.com>2021-02-22 14:20:21 +0000
commit6af49b7885f618202995fd28fef8c30646a9f8de (patch)
treea3545e5c51b4815b2ccc6985ab8729bd33b2284c /src/depot_gui.cpp
parent80fb1c74f04be7a571f6a721d2f6d82ed95de9b6 (diff)
downloadopenttd-6af49b7885f618202995fd28fef8c30646a9f8de.tar.xz
Fix #8724: Got wrong DepotID/StationID for airports, causing crash
Diffstat (limited to 'src/depot_gui.cpp')
-rw-r--r--src/depot_gui.cpp25
1 files changed, 15 insertions, 10 deletions
diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp
index 4bc676268..8c018b73d 100644
--- a/src/depot_gui.cpp
+++ b/src/depot_gui.cpp
@@ -294,7 +294,7 @@ struct DepotWindow : Window {
~DepotWindow()
{
DeleteWindowById(WC_BUILD_VEHICLE, this->window_number);
- DeleteWindowById(GetWindowClassForVehicleType(this->type), VehicleListIdentifier(VL_DEPOT_LIST, this->type, this->owner, GetDepotIndex(this->window_number)).Pack(), false);
+ DeleteWindowById(GetWindowClassForVehicleType(this->type), VehicleListIdentifier(VL_DEPOT_LIST, this->type, this->owner, this->GetDepotIndex()).Pack(), false);
OrderBackup::Reset(this->window_number);
}
@@ -424,10 +424,8 @@ struct DepotWindow : Window {
{
if (widget != WID_D_CAPTION) return;
- /* locate the depot struct */
- TileIndex tile = this->window_number;
SetDParam(0, this->type);
- SetDParam(1, (this->type == VEH_AIRCRAFT) ? GetStationIndex(tile) : GetDepotIndex(tile));
+ SetDParam(1, this->GetDepotIndex());
}
struct GetDepotVehiclePtData {
@@ -810,11 +808,8 @@ struct DepotWindow : Window {
case WID_D_SELL_ALL:
/* Only open the confirmation window if there are anything to sell */
if (this->vehicle_list.size() != 0 || this->wagon_list.size() != 0) {
- TileIndex tile = this->window_number;
- byte vehtype = this->type;
-
- SetDParam(0, vehtype);
- SetDParam(1, (vehtype == VEH_AIRCRAFT) ? GetStationIndex(tile) : GetDepotIndex(tile));
+ SetDParam(0, this->type);
+ SetDParam(1, this->GetDepotIndex());
ShowQuery(
STR_DEPOT_CAPTION,
STR_DEPOT_SELL_CONFIRMATION_TEXT,
@@ -840,7 +835,7 @@ struct DepotWindow : Window {
if (str == nullptr) return;
/* Do depot renaming */
- DoCommandP(0, GetDepotIndex(this->window_number), 0, CMD_RENAME_DEPOT | CMD_MSG(STR_ERROR_CAN_T_RENAME_DEPOT), nullptr, str);
+ DoCommandP(0, this->GetDepotIndex(), 0, CMD_RENAME_DEPOT | CMD_MSG(STR_ERROR_CAN_T_RENAME_DEPOT), nullptr, str);
}
bool OnRightClick(Point pt, int widget) override
@@ -1077,6 +1072,16 @@ struct DepotWindow : Window {
return ES_NOT_HANDLED;
}
+
+ /**
+ * Gets the DepotID of the current window.
+ * In the case of airports, this is the station ID.
+ * @return Depot or station ID of this window.
+ */
+ inline uint16 GetDepotIndex() const
+ {
+ return (this->type == VEH_AIRCRAFT) ? ::GetStationIndex(this->window_number) : ::GetDepotIndex(this->window_number);
+ }
};
static void DepotSellAllConfirmationCallback(Window *win, bool confirmed)