1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-16 03:23:15 +01:00

Close plugin's windows gracefully when stopped

When a plugin is stopped, close all windows created by that plugin.
Ensure the close event on the window can not open a new window if the plugin is being stopped.
This commit is contained in:
Ted John
2022-02-15 20:26:37 +00:00
parent 105009f3f8
commit 007a33404e
7 changed files with 63 additions and 17 deletions

View File

@@ -509,24 +509,18 @@ void ScriptEngine::StopPlugin(std::shared_ptr<Plugin> plugin)
{
if (plugin->HasStarted())
{
RemoveCustomGameActions(plugin);
RemoveIntervals(plugin);
RemoveSockets(plugin);
_hookEngine.UnsubscribeAll(plugin);
plugin->StopBegin();
for (const auto& callback : _pluginStoppedSubscriptions)
{
callback(plugin);
}
RemoveCustomGameActions(plugin);
RemoveIntervals(plugin);
RemoveSockets(plugin);
_hookEngine.UnsubscribeAll(plugin);
ScriptExecutionInfo::PluginScope scope(_execInfo, plugin, false);
try
{
plugin->Stop();
}
catch (const std::exception& e)
{
_console.WriteLineError(e.what());
}
plugin->StopEnd();
}
}