From 36c9742c0ac422b376e97486e801e36ec516ea9d Mon Sep 17 00:00:00 2001 From: siliconsniffer <97843108+siliconsniffer@users.noreply.github.com> Date: Thu, 6 Feb 2025 19:19:38 +0100 Subject: [PATCH] Main menu server list: Select first compatible search result (#15755) Fixes a bug where an incompatible server would be selected instead due to being the "first" result before grouping. --- builtin/mainmenu/tab_online.lua | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/builtin/mainmenu/tab_online.lua b/builtin/mainmenu/tab_online.lua index bd7f45342..329ca4102 100644 --- a/builtin/mainmenu/tab_online.lua +++ b/builtin/mainmenu/tab_online.lua @@ -423,8 +423,17 @@ local function search_server_list(input) return a.points > b.points end) menudata.search_result = search_result -end + -- Find first compatible server (favorite or public) + for _, server in ipairs(search_result) do + if is_server_protocol_compat(server.proto_min, server.proto_max) then + set_selected_server(server) + return + end + end + -- If no compatible server found, clear selection + set_selected_server(nil) +end local function main_button_handler(tabview, fields, name, tabdata) if fields.te_name then gamedata.playername = fields.te_name @@ -507,17 +516,13 @@ local function main_button_handler(tabview, fields, name, tabdata) if fields.btn_mp_clear then tabdata.search_for = "" menudata.search_result = nil + set_selected_server(nil) return true end if fields.btn_mp_search or fields.key_enter_field == "te_search" then tabdata.search_for = fields.te_search search_server_list(fields.te_search) - if menudata.search_result then - -- Note: This clears the selection if there are no results - set_selected_server(menudata.search_result[1]) - end - return true end