summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/engine.cpp7
-rw-r--r--src/engine_gui.cpp8
2 files changed, 15 insertions, 0 deletions
diff --git a/src/engine.cpp b/src/engine.cpp
index 289549604..782f3f31a 100644
--- a/src/engine.cpp
+++ b/src/engine.cpp
@@ -749,6 +749,13 @@ static void AcceptEnginePreview(EngineID eid, CompanyID company)
/* Update the toolbar. */
if (e->type == VEH_ROAD) InvalidateWindowData(WC_BUILD_TOOLBAR, TRANSPORT_ROAD);
if (e->type == VEH_SHIP) InvalidateWindowData(WC_BUILD_TOOLBAR, TRANSPORT_WATER);
+
+ /* Notify preview window, that it might want to close.
+ * Note: We cannot directly close the window.
+ * In singleplayer this function is called from the preview window, so
+ * we have to use the GUI-scope scheduling of InvalidateWindowData.
+ */
+ InvalidateWindowData(WC_ENGINE_PREVIEW, eid);
}
/**
diff --git a/src/engine_gui.cpp b/src/engine_gui.cpp
index 3a1332367..a2f5b919c 100644
--- a/src/engine_gui.cpp
+++ b/src/engine_gui.cpp
@@ -110,6 +110,14 @@ struct EnginePreviewWindow : Window {
break;
}
}
+
+ virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
+ {
+ if (!gui_scope) return;
+
+ EngineID engine = this->window_number;
+ if (Engine::Get(engine)->preview_company != _local_company) delete this;
+ }
};
static const WindowDesc _engine_preview_desc(