summaryrefslogtreecommitdiff
path: root/src/ai
diff options
context:
space:
mode:
authorSamu <dj_samu@hotmail.com>2019-01-24 17:00:20 +0000
committerCharles Pigott <charlespigott@googlemail.com>2020-02-06 20:58:11 +0000
commit3089c625e403e59dec4d88707792551e567e6f89 (patch)
treec89d8a9be2b876dc95cffc45040066b2847e7222 /src/ai
parent492d2704f1503303b7eaea15559649c71b747c87 (diff)
downloadopenttd-3089c625e403e59dec4d88707792551e567e6f89.tar.xz
Fix #7088: close AI/GS textfile window when their data are invalid
Diffstat (limited to 'src/ai')
-rw-r--r--src/ai/ai_gui.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp
index a684e4a35..a0552628c 100644
--- a/src/ai/ai_gui.cpp
+++ b/src/ai/ai_gui.cpp
@@ -179,6 +179,7 @@ struct AIListWindow : public Window {
InvalidateWindowData(WC_GAME_OPTIONS, WN_GAME_OPTIONS_AI);
InvalidateWindowClassesData(WC_AI_SETTINGS);
DeleteWindowByClass(WC_QUERY_STRING);
+ InvalidateWindowClassesData(WC_TEXTFILE);
}
void OnClick(Point pt, int widget, int click_count) override
@@ -640,15 +641,24 @@ struct ScriptTextfileWindow : public TextfileWindow {
ScriptTextfileWindow(TextfileType file_type, CompanyID slot) : TextfileWindow(file_type), slot(slot)
{
- const char *textfile = GetConfig(slot)->GetTextfile(file_type, slot);
- this->LoadTextfile(textfile, (slot == OWNER_DEITY) ? GAME_DIR : AI_DIR);
+ this->OnInvalidateData();
}
void SetStringParameters(int widget) const override
{
if (widget == WID_TF_CAPTION) {
SetDParam(0, (slot == OWNER_DEITY) ? STR_CONTENT_TYPE_GAME_SCRIPT : STR_CONTENT_TYPE_AI);
- SetDParamStr(1, GetConfig(slot)->GetName());
+ SetDParamStr(1, GetConfig(slot)->GetInfo()->GetName());
+ }
+ }
+
+ void OnInvalidateData(int data = 0, bool gui_scope = true) override
+ {
+ const char *textfile = GetConfig(slot)->GetTextfile(file_type, slot);
+ if (textfile == nullptr) {
+ delete this;
+ } else {
+ this->LoadTextfile(textfile, (slot == OWNER_DEITY) ? GAME_DIR : AI_DIR);
}
}
};