summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbjarni <bjarni@openttd.org>2006-12-05 22:40:42 +0000
committerbjarni <bjarni@openttd.org>2006-12-05 22:40:42 +0000
commitd15a4d7523adbd91fcc495205dc80768f1d5069a (patch)
tree7cde78aa4303c23647773e8bf85a100202213917
parent6d54dcdd249bd2189eab72dc782690fe3ebf05b1 (diff)
downloadopenttd-d15a4d7523adbd91fcc495205dc80768f1d5069a.tar.xz
(svn r7385) -Fix: FS#418 Deleting Train in depot with autoreplace failes
This turned out to be due to continue to drag the old vehicle, that autoreplace sold This could also be triggered if more than one player used the same company Now deleting a vehicle will remove all depot highlights of that vehicle
-rw-r--r--depot.h2
-rw-r--r--depot_gui.c18
-rw-r--r--vehicle.c2
3 files changed, 22 insertions, 0 deletions
diff --git a/depot.h b/depot.h
index c52c3292a..7cf25a1b1 100644
--- a/depot.h
+++ b/depot.h
@@ -107,4 +107,6 @@ Depot *GetDepotByTile(TileIndex tile);
void InitializeDepots(void);
Depot *AllocateDepot(void);
+void DeleteDepotHighlightOfVehicle(const Vehicle *v);
+
#endif /* DEPOT_H */
diff --git a/depot_gui.c b/depot_gui.c
index da879bb42..c0ee00ddc 100644
--- a/depot_gui.c
+++ b/depot_gui.c
@@ -1033,3 +1033,21 @@ void ShowDepotWindow(TileIndex tile, byte type)
ResizeDepotButtons(w);
}
}
+
+/** Removes the highlight of a vehicle in a depot window
+ * @param *v Vehicle to remove all highlights from
+ */
+void DeleteDepotHighlightOfVehicle(const Vehicle *v)
+{
+ Window* const *wz;
+
+ FOR_ALL_WINDOWS(wz) {
+ const Window *w = *wz;
+ if (w->window_class != WC_VEHICLE_DEPOT) continue;
+ if (w->window_number != v->tile) continue;
+ if (WP(w, depot_d).sel == v->index) {
+ WP(w, depot_d).sel = INVALID_VEHICLE;
+ ResetObjectToPlace();
+ }
+ }
+}
diff --git a/vehicle.c b/vehicle.c
index 9c657483c..0cf909efb 100644
--- a/vehicle.c
+++ b/vehicle.c
@@ -566,6 +566,8 @@ void DestroyVehicle(Vehicle *v)
InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
}
+ DeleteDepotHighlightOfVehicle(v);
+
UpdateVehiclePosHash(v, INVALID_COORD, 0);
v->next_hash = INVALID_VEHICLE;
if (v->orders != NULL) DeleteVehicleOrders(v);