From b8f79001797ffc7c4972bdec4a36da392e3d6862 Mon Sep 17 00:00:00 2001 From: siliconsniffer Date: Tue, 31 Dec 2024 15:35:41 +0100 Subject: [PATCH 1/8] move selection down when "unfaving" server --- builtin/mainmenu/tab_online.lua | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/builtin/mainmenu/tab_online.lua b/builtin/mainmenu/tab_online.lua index 329ca4102a19..d3fa44c65bae 100644 --- a/builtin/mainmenu/tab_online.lua +++ b/builtin/mainmenu/tab_online.lua @@ -484,11 +484,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 From 0f415ed620fc063da3343716d9d20066d2dfd102 Mon Sep 17 00:00:00 2001 From: siliconsniffer Date: Wed, 29 Jan 2025 14:04:58 +0100 Subject: [PATCH 2/8] select first compatible server if selection is not a search result --- builtin/mainmenu/tab_online.lua | 35 ++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/builtin/mainmenu/tab_online.lua b/builtin/mainmenu/tab_online.lua index d3fa44c65bae..e917c518cafa 100644 --- a/builtin/mainmenu/tab_online.lua +++ b/builtin/mainmenu/tab_online.lua @@ -419,20 +419,37 @@ 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 - -- 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) + -- Keep current selection if it's in search results + local found_current = false + if current_server then + for _, server in ipairs(search_result) do + if server.address == current_server.address and + server.port == current_server.port then + found_current = true + break + end + end + end + + -- If current selection isn't in results, select first compatible server + if not found_current then + -- 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 end local function main_button_handler(tabview, fields, name, tabdata) if fields.te_name then From eb8790463dcf1f9806fd84fb7eeca29a3f1e5850 Mon Sep 17 00:00:00 2001 From: siliconsniffer Date: Wed, 29 Jan 2025 16:50:57 +0100 Subject: [PATCH 3/8] select pre-search-selection when clearing the search --- builtin/mainmenu/tab_online.lua | 57 +++++++++++++++++++-------------- 1 file changed, 33 insertions(+), 24 deletions(-) diff --git a/builtin/mainmenu/tab_online.lua b/builtin/mainmenu/tab_online.lua index e917c518cafa..24d1f4cc4b80 100644 --- a/builtin/mainmenu/tab_online.lua +++ b/builtin/mainmenu/tab_online.lua @@ -391,12 +391,18 @@ local function matches_query(server, query) return name_matches and 50 or description_matches and 0 end +local pre_search_selection = nil + local function search_server_list(input) menudata.search_result = nil if #serverlistmgr.servers < 2 then return end + if not pre_search_selection then + pre_search_selection = find_selected_server() + end + -- setup the search query local query = parse_search_input(input) if not query then @@ -427,29 +433,29 @@ local function search_server_list(input) menudata.search_result = search_result -- Keep current selection if it's in search results - local found_current = false - if current_server then - for _, server in ipairs(search_result) do - if server.address == current_server.address and - server.port == current_server.port then - found_current = true - break - end - end - end - - -- If current selection isn't in results, select first compatible server - if not found_current then - -- 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 found_current = false + if current_server then + for _, server in ipairs(search_result) do + if server.address == current_server.address and + server.port == current_server.port then + found_current = true + break + end + end + end + + -- If current selection isn't in results, select first compatible server + if not found_current then + -- 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 end local function main_button_handler(tabview, fields, name, tabdata) if fields.te_name then @@ -531,7 +537,10 @@ 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 pre_search_selection then + set_selected_server(pre_search_selection) + pre_search_selection = nil + end return true end From cfd227338df0fd2d4c6988f040a7fc3d53f09813 Mon Sep 17 00:00:00 2001 From: siliconsniffer Date: Fri, 7 Feb 2025 19:19:03 +0100 Subject: [PATCH 4/8] apply suggestions --- builtin/mainmenu/tab_online.lua | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/builtin/mainmenu/tab_online.lua b/builtin/mainmenu/tab_online.lua index 24d1f4cc4b80..b96966f6a47c 100644 --- a/builtin/mainmenu/tab_online.lua +++ b/builtin/mainmenu/tab_online.lua @@ -399,9 +399,7 @@ local function search_server_list(input) return end - if not pre_search_selection then - pre_search_selection = find_selected_server() - end + pre_search_selection = pre_search_selection or find_selected_server() -- setup the search query local query = parse_search_input(input) @@ -433,29 +431,24 @@ local function search_server_list(input) menudata.search_result = search_result -- Keep current selection if it's in search results - local found_current = false if current_server then for _, server in ipairs(search_result) do if server.address == current_server.address and - server.port == current_server.port then - found_current = true - break + server.port == current_server.port then + return end end end - -- If current selection isn't in results, select first compatible server - if not found_current then - -- 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 + -- 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 - -- If no compatible server found, clear selection - set_selected_server(nil) 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 From 153d7289368416bc18cc24c2122e731c29b8d813 Mon Sep 17 00:00:00 2001 From: siliconsniffer Date: Fri, 7 Feb 2025 20:19:40 +0100 Subject: [PATCH 5/8] keep selection if user manually selects result --- builtin/mainmenu/tab_online.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/builtin/mainmenu/tab_online.lua b/builtin/mainmenu/tab_online.lua index b96966f6a47c..afd0b40d0d75 100644 --- a/builtin/mainmenu/tab_online.lua +++ b/builtin/mainmenu/tab_online.lua @@ -487,6 +487,7 @@ local function main_button_handler(tabview, fields, name, tabdata) end if event.type == "CHG" then set_selected_server(server) + pre_search_selection = nil return true end end From d48f0ba7ab9029f0db166f24e10847e9d9f3aea3 Mon Sep 17 00:00:00 2001 From: Lars Mueller Date: Sun, 9 Feb 2025 15:52:14 +0100 Subject: [PATCH 6/8] Improve some mainmenu server list strings --- builtin/mainmenu/dlg_clients_list.lua | 2 +- builtin/mainmenu/tab_online.lua | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/builtin/mainmenu/dlg_clients_list.lua b/builtin/mainmenu/dlg_clients_list.lua index 324d41efd4ff..0298ac152de5 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;;", - fgettext("This is the list of clients connected to\n$1", + fgettext("Players connected to\n$1", "" .. core.hypertext_escape(servername) .. "") .. "]", "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 afd0b40d0d75..bf7970450297 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 .. From 57820803f4a270db7932b382cb3926a005f7d6ca Mon Sep 17 00:00:00 2001 From: Lars Mueller Date: Sun, 9 Feb 2025 15:52:14 +0100 Subject: [PATCH 7/8] Improve some mainmenu server list strings --- builtin/mainmenu/dlg_clients_list.lua | 2 +- builtin/mainmenu/tab_online.lua | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/builtin/mainmenu/dlg_clients_list.lua b/builtin/mainmenu/dlg_clients_list.lua index 324d41efd4ff..0298ac152de5 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;;", - fgettext("This is the list of clients connected to\n$1", + fgettext("Players connected to\n$1", "" .. core.hypertext_escape(servername) .. "") .. "]", "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 afd0b40d0d75..bf7970450297 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 .. From 9976eb888cf92618a1ae7f06f472deffc1ed49af Mon Sep 17 00:00:00 2001 From: siliconsniffer Date: Mon, 10 Feb 2025 12:13:26 +0100 Subject: [PATCH 8/8] did I get this right --- builtin/mainmenu/tab_online.lua | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/builtin/mainmenu/tab_online.lua b/builtin/mainmenu/tab_online.lua index bf7970450297..f3f19c50fa4c 100644 --- a/builtin/mainmenu/tab_online.lua +++ b/builtin/mainmenu/tab_online.lua @@ -391,15 +391,14 @@ local function matches_query(server, query) return name_matches and 50 or description_matches and 0 end -local pre_search_selection = nil - -local function search_server_list(input) +local function search_server_list(input, tabdata) menudata.search_result = nil if #serverlistmgr.servers < 2 then return end - pre_search_selection = pre_search_selection or find_selected_server() + + tabdata.pre_search_selection = tabdata.pre_search_selection or find_selected_server() -- setup the search query local query = parse_search_input(input) @@ -450,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 @@ -487,7 +487,7 @@ local function main_button_handler(tabview, fields, name, tabdata) end if event.type == "CHG" then set_selected_server(server) - pre_search_selection = nil + tabdata.pre_search_selection = nil return true end end @@ -531,16 +531,16 @@ local function main_button_handler(tabview, fields, name, tabdata) if fields.btn_mp_clear then tabdata.search_for = "" menudata.search_result = nil - if pre_search_selection then - set_selected_server(pre_search_selection) - pre_search_selection = 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