diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 1928531809..86570b36b9 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -2133,6 +2133,15 @@ private: BP_SHARED_ORDERS, ///< Show the normal caption. }; + void RefreshRouteOverlay() const + { + if (this->vli.type == VL_SHARED_ORDERS) { + const Vehicle *v = Vehicle::GetIfValid(this->vli.index); + MarkAllRoutePathsDirty(v); + MarkAllRouteStepsDirty(v); + } + } + public: VehicleListWindow(WindowDesc *desc, WindowNumber window_number) : BaseVehicleListWindow(desc, window_number) { @@ -2168,6 +2177,17 @@ public: ~VehicleListWindow() { *this->sorting = this->vehgroups.GetListing(); + this->RefreshRouteOverlay(); + } + + virtual void OnFocus(Window *previously_focused_window) override + { + this->RefreshRouteOverlay(); + } + + virtual void OnFocusLost(Window *newly_focused_window) override + { + this->RefreshRouteOverlay(); } void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override diff --git a/src/viewport.cpp b/src/viewport.cpp index c479927acf..78edb5469d 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -114,6 +114,7 @@ #include "infrastructure_func.h" #include "tracerestrict.h" #include "worker_thread.h" +#include "vehiclelist.h" #include #include @@ -2280,6 +2281,16 @@ static inline Vehicle *GetVehicleFromWindow(Window *w) case WC_VEHICLE_CARGO_TYPE_UNLOAD_ORDERS: if (wn != INVALID_VEHICLE) return Vehicle::Get(wn); break; + case WC_TRAINS_LIST: + case WC_ROADVEH_LIST: + case WC_SHIPS_LIST: + case WC_AIRCRAFT_LIST: { + VehicleListIdentifier vli = VehicleListIdentifier::UnPack(wn); + if (vli.type == VL_SHARED_ORDERS) { + return Vehicle::GetIfValid(vli.index); + } + break; + } default: break; }