From b2cc3d15320aabc9df0d6d90e22e7661099dbb8a Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Fri, 27 Jan 2023 15:57:28 +0100 Subject: [PATCH] Fix search not working after page flip --- callbacks.lua | 49 ++++++++++++++++++++++++++----------------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/callbacks.lua b/callbacks.lua index e949c7a..52cb710 100644 --- a/callbacks.lua +++ b/callbacks.lua @@ -63,24 +63,41 @@ local function apply_new_filter(player, search_text, new_dir) ui.set_inventory_formspec(player, ui.current_page[player_name]) end -minetest.register_on_player_receive_fields(function(player, formname, fields) +-- Search box handling +local function receive_fields_searchbox(player, formname, fields) local player_name = player:get_player_name() - local ui_peruser,draw_lite_mode = unified_inventory.get_per_player_formspec(player_name) + -- always take new search text, even if not searching on it yet + if fields.searchbox and fields.searchbox ~= ui.current_searchbox[player_name] then + ui.current_searchbox[player_name] = fields.searchbox + end + if fields.searchbutton + or fields.key_enter_field == "searchbox" then + + if ui.current_searchbox[player_name] ~= ui.activefilter[player_name] then + ui.apply_filter(player, ui.current_searchbox[player_name], "nochange") + ui.set_inventory_formspec(player, ui.current_page[player_name]) + minetest.sound_play("paperflip2", + {to_player=player_name, gain = 1.0}) + end + elseif fields.searchresetbutton then + if ui.activefilter[player_name] ~= "" then + apply_new_filter(player, "", "nochange") + end + end +end + +minetest.register_on_player_receive_fields(function(player, formname, fields) if formname ~= "" then return end - -- always take new search text, even if not searching on it yet - local dirty_search_filter = false + receive_fields_searchbox(player, formname, fields) - if fields.searchbox - and fields.searchbox ~= unified_inventory.current_searchbox[player_name] then - unified_inventory.current_searchbox[player_name] = fields.searchbox - dirty_search_filter = true - end + local player_name = player:get_player_name() + local ui_peruser,draw_lite_mode = unified_inventory.get_per_player_formspec(player_name) local clicked_category for name, value in pairs(fields) do @@ -201,20 +218,6 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end end - if fields.searchbutton - or fields.key_enter_field == "searchbox" then - if dirty_search_filter then - ui.apply_filter(player, ui.current_searchbox[player_name], "nochange") - ui.set_inventory_formspec(player, ui.current_page[player_name]) - minetest.sound_play("paperflip2", - {to_player=player_name, gain = 1.0}) - end - elseif fields.searchresetbutton then - if ui.activefilter[player_name] ~= "" then - apply_new_filter(player, "", "nochange") - end - end - -- alternate buttons if not (fields.alternate or fields.alternate_prev) then return