diff --git a/builtin/mainmenu/dlg_clients_list.lua b/builtin/mainmenu/dlg_clients_list.lua index 324d41efd..0298ac152 100644 --- a/builtin/mainmenu/dlg_clients_list.lua +++ b/builtin/mainmenu/dlg_clients_list.lua @@ -21,7 +21,7 @@ local function clients_list_formspec(dialogdata) "size[6,9.5]", TOUCH_GUI and "padding[0.01,0.01]" or "", "hypertext[0,0;6,1.5;;<global margin=5 halign=center valign=middle>", - fgettext("This is the list of clients connected to\n$1", + fgettext("Players connected to\n$1", "<b>" .. core.hypertext_escape(servername) .. "</b>") .. "]", "textlist[0.5,1.5;5,6.8;;" .. fmt_formspec_list(clients_list) .. "]", "button[1.5,8.5;3,0.8;quit;OK]" diff --git a/builtin/mainmenu/tab_online.lua b/builtin/mainmenu/tab_online.lua index 329ca4102..f3f19c50f 100644 --- a/builtin/mainmenu/tab_online.lua +++ b/builtin/mainmenu/tab_online.lua @@ -190,10 +190,10 @@ local function get_formspec(tabview, name, tabdata) local max_clients = 5 if #clients_list > max_clients then retval = retval .. "tooltip[btn_view_clients;" .. - fgettext("Clients:\n$1", table.concat(clients_list, "\n", 1, max_clients)) .. "\n..." .. "]" + fgettext("Players:\n$1", table.concat(clients_list, "\n", 1, max_clients)) .. "\n..." .. "]" else retval = retval .. "tooltip[btn_view_clients;" .. - fgettext("Clients:\n$1", table.concat(clients_list, "\n")) .. "]" + fgettext("Players:\n$1", table.concat(clients_list, "\n")) .. "]" end retval = retval .. "style[btn_view_clients;padding=6]" retval = retval .. "image_button[4.5,1.3;0.5,0.5;" .. core.formspec_escape(defaulttexturedir .. @@ -391,12 +391,15 @@ local function matches_query(server, query) return name_matches and 50 or description_matches and 0 end -local function search_server_list(input) +local function search_server_list(input, tabdata) menudata.search_result = nil if #serverlistmgr.servers < 2 then return end + + tabdata.pre_search_selection = tabdata.pre_search_selection or find_selected_server() + -- setup the search query local query = parse_search_input(input) if not query then @@ -419,11 +422,23 @@ local function search_server_list(input) return end + local current_server = find_selected_server() + table.sort(search_result, function(a, b) return a.points > b.points end) menudata.search_result = search_result + -- Keep current selection if it's in search results + if current_server then + for _, server in ipairs(search_result) do + if server.address == current_server.address and + server.port == current_server.port then + return + end + end + 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 @@ -434,6 +449,7 @@ local function search_server_list(input) -- 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 @@ -471,6 +487,7 @@ local function main_button_handler(tabview, fields, name, tabdata) end if event.type == "CHG" then set_selected_server(server) + tabdata.pre_search_selection = nil return true end end @@ -484,11 +501,9 @@ local function main_button_handler(tabview, fields, name, tabdata) if fields.btn_delete_favorite then local idx = core.get_table_index("servers") if not idx then return end - local server = tabdata.lookup[idx] - if not server then return end - serverlistmgr.delete_favorite(server) - set_selected_server(server) + serverlistmgr.delete_favorite(tabdata.lookup[idx]) + set_selected_server(tabdata.lookup[idx+1]) return true end @@ -516,13 +531,16 @@ 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) + if tabdata.pre_search_selection then + set_selected_server(tabdata.pre_search_selection) + tabdata.pre_search_selection = nil + end 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) + search_server_list(fields.te_search, tabdata) return true end