Skip to content

Commit

Permalink
Change: Invalidate build toolbars when NewGRFs are changed.
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
PeterN committed Oct 31, 2024
1 parent 6d2b93d commit db1a1c5
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 0 deletions.
6 changes: 6 additions & 0 deletions src/rail_gui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
7 changes: 7 additions & 0 deletions src/road_gui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
2 changes: 2 additions & 0 deletions src/saveload/afterload.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@
#include <signal.h>

#include "../safeguards.h"
#include "window_func.h"

extern Company *DoStartupNewCompany(bool is_ai, CompanyID company = INVALID_COMPANY);

Expand Down Expand Up @@ -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();
Expand Down

0 comments on commit db1a1c5

Please sign in to comment.