From f0777737af7511ddd4c9b1f8c06b42a3fb04a39f Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 13 Feb 2025 18:56:03 +0000 Subject: [PATCH] Fix #13459, Fix #13546: Crash when changing NewGRFs in game with picker window open. --- src/picker_func.h | 3 +++ src/picker_gui.cpp | 10 ++++++++++ src/saveload/afterload.cpp | 2 ++ 3 files changed, 15 insertions(+) diff --git a/src/picker_func.h b/src/picker_func.h index b3c1a8a16b..6d9df4f067 100644 --- a/src/picker_func.h +++ b/src/picker_func.h @@ -10,7 +10,10 @@ #ifndef PICKER_FUNC_H #define PICKER_FUNC_H +#include "ini_type.h" + void PickerLoadConfig(const IniFile &ini); void PickerSaveConfig(IniFile &ini); +void InvalidateAllPickerWindows(); #endif /* PICKER_FUNC_H */ diff --git a/src/picker_gui.cpp b/src/picker_gui.cpp index 88be976a77..d4a3e185ff 100644 --- a/src/picker_gui.cpp +++ b/src/picker_gui.cpp @@ -678,3 +678,13 @@ std::unique_ptr MakePickerTypeWidgets() return MakeNWidgets(picker_type_widgets, nullptr); } + +void InvalidateAllPickerWindows() +{ + InvalidateWindowClassesData(WC_BUS_STATION, PickerWindow::PICKER_INVALIDATION_ALL); + InvalidateWindowClassesData(WC_TRUCK_STATION, PickerWindow::PICKER_INVALIDATION_ALL); + InvalidateWindowClassesData(WC_SELECT_STATION, PickerWindow::PICKER_INVALIDATION_ALL); + InvalidateWindowClassesData(WC_BUILD_WAYPOINT, PickerWindow::PICKER_INVALIDATION_ALL); + InvalidateWindowClassesData(WC_BUILD_OBJECT, PickerWindow::PICKER_INVALIDATION_ALL); + InvalidateWindowClassesData(WC_BUILD_HOUSE, PickerWindow::PICKER_INVALIDATION_ALL); +} diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index bb15939789..d2ab7e9aa5 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -63,6 +63,7 @@ #include "../timer/timer_game_calendar.h" #include "../timer/timer_game_economy.h" #include "../timer/timer_game_tick.h" +#include "../picker_func.h" #include "saveload_internal.h" @@ -3418,6 +3419,7 @@ void ReloadNewGRFData() /* Update company infrastructure counts. */ InvalidateWindowClassesData(WC_COMPANY_INFRASTRUCTURE); InvalidateWindowClassesData(WC_BUILD_TOOLBAR); + InvalidateAllPickerWindows(); /* redraw the whole screen */ MarkWholeScreenDirty(); CheckTrainsLengths();