Index: binaries/data/mods/public/gui/session/menu.js =================================================================== --- binaries/data/mods/public/gui/session/menu.js +++ binaries/data/mods/public/gui/session/menu.js @@ -1199,6 +1199,8 @@ Engine.GetGUIObjectByName("pauseOverlay").hidden = !(g_Paused || g_PausingClients.length); Engine.GetGUIObjectByName("pauseOverlay").onPress = g_Paused ? togglePause : function() {}; + if (!g_IsObserver && !g_Paused && !g_PausingClients.length) + Engine.RaiseWindow(); } function openManual() Index: binaries/data/mods/public/gui/session/messages.js =================================================================== --- binaries/data/mods/public/gui/session/messages.js +++ binaries/data/mods/public/gui/session/messages.js @@ -666,6 +666,12 @@ let loadingClientsText = Engine.GetGUIObjectByName("loadingClientsText"); loadingClientsText.hidden = message.status != "waiting_for_players"; + if (g_GameStatus != message.status && message.status == "active") + { + Engine.RaiseWindow(); + g_GameStatus = message.status; + } + if (message.status == "disconnected") { // Hide the pause overlay, and pause animations. Index: binaries/data/mods/public/gui/session/session.js =================================================================== --- binaries/data/mods/public/gui/session/session.js +++ binaries/data/mods/public/gui/session/session.js @@ -10,6 +10,7 @@ const g_VictoryConditions = prepareForDropdown(g_Settings && g_Settings.VictoryConditions); const g_VictoryDurations = prepareForDropdown(g_Settings && g_Settings.VictoryDurations); var g_GameSpeeds; +var g_GameStatus = ""; /** * Colors to flash when pop limit reached. @@ -265,6 +266,9 @@ else if (g_IsReplay)// Needed for autostart loading option g_PlayerAssignments.local.player = -1; + if (!g_IsNetworked) + Engine.RaiseWindow(); + LoadModificationTemplates(); updatePlayerData(); Index: source/gui/scripting/JSInterface_GUIManager.h =================================================================== --- source/gui/scripting/JSInterface_GUIManager.h +++ source/gui/scripting/JSInterface_GUIManager.h @@ -30,6 +30,7 @@ JS::Value GetGUIObjectByName(ScriptInterface::CxPrivate* pCxPrivate, const std::string& name); std::wstring SetCursor(ScriptInterface::CxPrivate* pCxPrivate, const std::wstring& name); void ResetCursor(ScriptInterface::CxPrivate* pCxPrivate); + void RaiseWindow(ScriptInterface::CxPrivate* pCxPrivate); bool TemplateExists(ScriptInterface::CxPrivate* pCxPrivate, const std::string& templateName); CParamNode GetTemplate(ScriptInterface::CxPrivate* pCxPrivate, const std::string& templateName); Index: source/gui/scripting/JSInterface_GUIManager.cpp =================================================================== --- source/gui/scripting/JSInterface_GUIManager.cpp +++ source/gui/scripting/JSInterface_GUIManager.cpp @@ -23,6 +23,7 @@ #include "gui/IGUIObject.h" #include "scriptinterface/ScriptInterface.h" #include "ps/GameSetup/Config.h" +#include "ps/VideoMode.h" // Note that the initData argument may only contain clonable data. // Functions aren't supported for example! @@ -67,6 +68,11 @@ g_GUI->ResetCursor(); } +void JSI_GUIManager::RaiseWindow(ScriptInterface::CxPrivate* UNUSED(pCxPrivate)) +{ + g_VideoMode.RaiseWindow(); +} + bool JSI_GUIManager::TemplateExists(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), const std::string& templateName) { return g_GUI->TemplateExists(templateName); @@ -86,6 +92,7 @@ scriptInterface.RegisterFunction("GetGUIObjectByName"); scriptInterface.RegisterFunction("SetCursor"); scriptInterface.RegisterFunction("ResetCursor"); + scriptInterface.RegisterFunction("RaiseWindow"); scriptInterface.RegisterFunction("TemplateExists"); scriptInterface.RegisterFunction("GetTemplate"); } Index: source/ps/VideoMode.h =================================================================== --- source/ps/VideoMode.h +++ source/ps/VideoMode.h @@ -81,6 +81,7 @@ SDL_Window* GetWindow(); void SetWindowIcon(); + void RaiseWindow(); private: void ReadConfig(); Index: source/ps/VideoMode.cpp =================================================================== --- source/ps/VideoMode.cpp +++ source/ps/VideoMode.cpp @@ -525,3 +525,8 @@ SDL_SetWindowIcon(m_Window, iconSurface); SDL_FreeSurface(iconSurface); } + +void CVideoMode::RaiseWindow() +{ + SDL_RaiseWindow(m_Window); +}