From db1a1c5dd981c45d272472e7a322d00d06b462ab Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 22 Oct 2024 23:48:43 +0100 Subject: [PATCH] Change: Invalidate build toolbars when NewGRFs are changed. If NewGRFs are changed while a rail or road toolbar is open, the toolbar could refer to an invalid rail/road type. If so, close it. --- src/rail_gui.cpp | 6 ++++++ src/road_gui.cpp | 7 +++++++ src/saveload/afterload.cpp | 2 ++ 3 files changed, 15 insertions(+) diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 4dd7d39ada..d64b8b54f2 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -468,6 +468,12 @@ struct BuildRailToolbarWindow : Window { { if (!gui_scope) return; + if (!ValParamRailType(this->railtype)) { + /* Close toolbar if rail type is not available. */ + this->Close(); + return; + } + bool can_build = CanBuildVehicleInfrastructure(VEH_TRAIN); for (const WidgetID widget : can_build_widgets) this->SetWidgetDisabledState(widget, !can_build); if (!can_build) { diff --git a/src/road_gui.cpp b/src/road_gui.cpp index db299a53ad..40eb2795f5 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -377,6 +377,13 @@ struct BuildRoadToolbarWindow : Window { void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override { if (!gui_scope) return; + + if (!ValParamRoadType(this->roadtype)) { + /* Close toolbar if road type is not available. */ + this->Close(); + return; + } + RoadTramType rtt = GetRoadTramType(this->roadtype); bool can_build = CanBuildVehicleInfrastructure(VEH_ROAD, rtt); diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index e140cb5bb4..c0603da2c0 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -68,6 +68,7 @@ #include #include "../safeguards.h" +#include "window_func.h" extern Company *DoStartupNewCompany(bool is_ai, CompanyID company = INVALID_COMPANY); @@ -3377,6 +3378,7 @@ void ReloadNewGRFData() for (CompanyID i = COMPANY_FIRST; i < MAX_COMPANIES; i++) InvalidateWindowData(WC_COMPANY_COLOUR, i); /* Update company infrastructure counts. */ InvalidateWindowClassesData(WC_COMPANY_INFRASTRUCTURE); + InvalidateWindowClassesData(WC_BUILD_TOOLBAR); /* redraw the whole screen */ MarkWholeScreenDirty(); CheckTrainsLengths();