From c3dead719ae737a2e61f7e0e81cfc1b614790edd Mon Sep 17 00:00:00 2001
From: jp <jeanpatrick.guerrero@gmail.com>
Date: Sat, 4 Jul 2015 17:53:00 +0200
Subject: [PATCH] Fix remnant bugs on mainmenu

- Stop attempting to start a world when no world's created/selected in server tab
- Better world's indexes handling between subgames lists
---
 builtin/mainmenu/tab_server.lua       | 9 ++++++---
 builtin/mainmenu/tab_singleplayer.lua | 9 ++++++---
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/builtin/mainmenu/tab_server.lua b/builtin/mainmenu/tab_server.lua
index 62747c572..d08eecc21 100644
--- a/builtin/mainmenu/tab_server.lua
+++ b/builtin/mainmenu/tab_server.lua
@@ -113,12 +113,12 @@ local function main_button_handler(this, fields, name, tabdata)
 		world_doubleclick or
 		fields["key_enter"] then
 		local selected = core.get_textlist_index("srv_worlds")
-		if selected ~= nil then
+		gamedata.selected_world = menudata.worldlist:get_raw_index(selected)
+		if selected ~= nil and gamedata.selected_world ~= 0 then
 			gamedata.playername     = fields["te_playername"]
 			gamedata.password       = fields["te_passwd"]
 			gamedata.port           = fields["te_serverport"]
 			gamedata.address        = ""
-			gamedata.selected_world = menudata.worldlist:get_raw_index(selected)
 
 			core.setting_set("port",gamedata.port)
 			if fields["te_serveraddr"] ~= nil then
@@ -133,8 +133,11 @@ local function main_button_handler(this, fields, name, tabdata)
 			end
 			
 			core.start()
-			return true
+		else
+			gamedata.errormessage =
+				fgettext("No world created or selected!")
 		end
+		return true
 	end
 
 	if fields["world_create"] ~= nil then
diff --git a/builtin/mainmenu/tab_singleplayer.lua b/builtin/mainmenu/tab_singleplayer.lua
index 4ae4dde35..a40918af9 100644
--- a/builtin/mainmenu/tab_singleplayer.lua
+++ b/builtin/mainmenu/tab_singleplayer.lua
@@ -40,10 +40,13 @@ local function singleplayer_refresh_gamebar()
 					menudata.worldlist:set_filtercriteria(gamemgr.games[j].id)
 					local index = filterlist.get_current_index(menudata.worldlist,
 						tonumber(core.setting_get("mainmenu_last_selected_world")))
-					local selected = core.get_textlist_index("sp_worlds")
 					if not index or index < 1 then
-						index = math.min(core.get_textlist_index("sp_worlds"),
-							#menudata.worldlist:get_list())
+						local selected = core.get_textlist_index("sp_worlds")
+						if selected ~= nil and selected < #menudata.worldlist:get_list() then
+							index = selected
+						else
+							index = #menudata.worldlist:get_list()
+						end
 					end
 					menu_worldmt_legacy(index)
 					return true
-- 
GitLab