diff --git a/binaries/data/mods/public/gui/pregame/MainMenuItems.js b/binaries/data/mods/public/gui/pregame/MainMenuItems.js index 7d66c1523b..679e7998f9 100644 --- a/binaries/data/mods/public/gui/pregame/MainMenuItems.js +++ b/binaries/data/mods/public/gui/pregame/MainMenuItems.js @@ -222,10 +222,13 @@ export const mainMenuItems = [ (Engine.StartXmppClient ? "" : translate("Launch the multiplayer lobby. \\[DISABLED BY BUILD]")), "enabled": () => !!Engine.StartXmppClient, "hotkey": "lobby", - "onPress": () => + "onPress": async(closePageCallback) => { - if (Engine.StartXmppClient) - Engine.OpenChildPage("page_prelobby_entrance.xml"); + if (!Engine.StartXmppClient) + return; + const ret = await Engine.OpenChildPage("page_prelobby_entrance.xml"); + if (ret) + closePageCallback({ [Engine.openRequest]: ret }); } }, { diff --git a/binaries/data/mods/public/gui/prelobby/entrance/entrance.js b/binaries/data/mods/public/gui/prelobby/entrance/entrance.js index 19508023d8..c61797d4f3 100644 --- a/binaries/data/mods/public/gui/prelobby/entrance/entrance.js +++ b/binaries/data/mods/public/gui/prelobby/entrance/entrance.js @@ -1,17 +1,30 @@ function init() { - if (Engine.ConfigDB_GetValue("user", "lobby.login")) - loginButton(); + return Promise.race([loginButton(), cancelHandler()]); +} +function cancelHandler() +{ return new Promise(closePageCallback => { Engine.GetGUIObjectByName("cancel").onPress = closePageCallback; }); } -function loginButton() +async function loginButton() { - Engine.OpenChildPage("page_prelobby_login.xml"); + let skipEntrance = Engine.ConfigDB_GetValue("user", "lobby.login"); + while (true) + { + if (!skipEntrance) + await new Promise(resolve => { Engine.GetGUIObjectByName("login").onPress = resolve; }); + + const ret = await Engine.OpenChildPage("page_prelobby_login.xml"); + if (ret) + return ret; + + skipEntrance = false; + } } async function registerButton() diff --git a/binaries/data/mods/public/gui/prelobby/entrance/entrance.xml b/binaries/data/mods/public/gui/prelobby/entrance/entrance.xml index 94c5641497..7f390b5ccb 100644 --- a/binaries/data/mods/public/gui/prelobby/entrance/entrance.xml +++ b/binaries/data/mods/public/gui/prelobby/entrance/entrance.xml @@ -21,9 +21,8 @@ registerButton(); - + Login to an existing account - loginButton(); diff --git a/binaries/data/mods/public/gui/prelobby/login/login.js b/binaries/data/mods/public/gui/prelobby/login/login.js index 32c94b9315..7b0c13b9df 100644 --- a/binaries/data/mods/public/gui/prelobby/login/login.js +++ b/binaries/data/mods/public/gui/prelobby/login/login.js @@ -1,7 +1,5 @@ function init() { - g_LobbyMessages.connected = onLogin; - Engine.GetGUIObjectByName("continue").caption = translate("Connect"); // Shorten the displayed password for visual reasons only @@ -14,7 +12,7 @@ function init() updateFeedback(); - return cancelButton(); + return Promise.race([ onLoggedin(), cancelButton() ]); } function updateFeedback() @@ -42,15 +40,19 @@ function continueButton() Engine.ConnectXmppClient(); } -/** - * The data from Engine.SendGetBoardList() is used for the leaderboard, but also for autocompletion in the profile player search field. - */ -function onLogin(message) + +async function onLoggedin() { + await new Promise(resolve => { g_LobbyMessages.connected = resolve; }); saveCredentials(); - Engine.SwitchGuiPage("page_lobby.xml", { - "dialog": false - }); + // The data from Engine.SendGetBoardList() is used for the leaderboard, but also for + // autocompletion in the profile player search field. Engine.SendGetBoardList(); + return { + "page": "page_lobby.xml", + "argument": { + "dialog": false + } + }; } diff --git a/binaries/data/mods/public/gui/reference/civinfo/CivInfoPage.js b/binaries/data/mods/public/gui/reference/civinfo/CivInfoPage.js index d3fd4a4ea5..e5fe07d05a 100644 --- a/binaries/data/mods/public/gui/reference/civinfo/CivInfoPage.js +++ b/binaries/data/mods/public/gui/reference/civinfo/CivInfoPage.js @@ -25,12 +25,12 @@ class CivInfoPage extends ReferencePage switchToStructreePage() { - this.closePageCallback({ [Engine.openRequest] : { + this.closePageCallback({ [Engine.openRequest]: { "page": "page_structree.xml", "argument": { "civ": this.activeCiv } - }}); + } }); } closePage() diff --git a/binaries/data/mods/public/gui/reference/common/Buttons/CivInfoButton.js b/binaries/data/mods/public/gui/reference/common/Buttons/CivInfoButton.js index 9c55ae7977..3b5138deb6 100644 --- a/binaries/data/mods/public/gui/reference/common/Buttons/CivInfoButton.js +++ b/binaries/data/mods/public/gui/reference/common/Buttons/CivInfoButton.js @@ -12,12 +12,12 @@ class CivInfoButton onPress() { - this.parentPage.closePageCallback({ [Engine.openRequest] : { + this.parentPage.closePageCallback({ [Engine.openRequest]: { "page": "page_civinfo.xml", "argument": { "civ": this.parentPage.activeCiv } - }}); + } }); } } diff --git a/binaries/data/mods/public/gui/reference/common/Buttons/StructreeButton.js b/binaries/data/mods/public/gui/reference/common/Buttons/StructreeButton.js index 6377e7fc8b..73672c72f0 100644 --- a/binaries/data/mods/public/gui/reference/common/Buttons/StructreeButton.js +++ b/binaries/data/mods/public/gui/reference/common/Buttons/StructreeButton.js @@ -12,12 +12,12 @@ class StructreeButton onPress() { - this.parentPage.closePageCallback({ [Engine.openRequest] : { + this.parentPage.closePageCallback({ [Engine.openRequest]: { "page": "page_structree.xml", "argument": { "civ": this.parentPage.activeCiv } - }}); + } }); } }