# HG changeset patch # User bjarni # Date 2006-08-29 22:47:38 # Node ID 4952b1ac9ee4c770760a18c6d4b6db7c99b89497 # Parent 08eb8dc3465f5047066371b35b6bc550d0db9052 (svn r6228) -Fix: redrawing an empty list of shared vehicles will now close the window Since the order is no more, the player will not need that particular window anymore this could happen if the player opened the window and then sold all the vehicles (or crashed them) A crash could happen if a new order gets the same (now freed) OrderID and the vehicle using it is not of the same type as the window expect diff --git a/vehicle_gui.c b/vehicle_gui.c --- a/vehicle_gui.c +++ b/vehicle_gui.c @@ -1244,6 +1244,18 @@ void PlayerVehWndProc(Window *w, WindowE switch (window_type) { case VLW_SHARED_ORDERS: /* Shared Orders */ + if (vl->list_length == 0) { + /* The list is empty, so the last vehicle is sold or crashed */ + /* Delete the window because the order is now not in use anymore */ + switch (vehicle_type) { + case VEH_Train: DeleteWindowById(WC_TRAINS_LIST, w->window_number); break; + case VEH_Road: DeleteWindowById(WC_ROADVEH_LIST, w->window_number); break; + case VEH_Ship: DeleteWindowById(WC_SHIPS_LIST, w->window_number); break; + case VEH_Aircraft: DeleteWindowById(WC_AIRCRAFT_LIST, w->window_number); break; + default: NOT_REACHED(); break; + } + return; + } SetDParam(0, w->vscroll.count); w->widget[1].unkA = STR_VEH_WITH_SHARED_ORDERS_LIST; w->widget[9].unkA = STR_EMPTY;