From a2a280691c76d37ab1cbceb9571364d7551c0dea Mon Sep 17 00:00:00 2001 From: Muhammad Rifqi Priyo Susanto Date: Tue, 17 Jan 2023 02:16:08 +0700 Subject: [PATCH] Fix Enter key after creating a new world (#12997) Prevents Enter key or "double-click" event to play the world just after creating a new world --- builtin/mainmenu/dlg_create_world.lua | 6 ++++++ builtin/mainmenu/tab_local.lua | 11 +++++++++++ 2 files changed, 17 insertions(+) diff --git a/builtin/mainmenu/dlg_create_world.lua b/builtin/mainmenu/dlg_create_world.lua index 2f3ef596c..eb7a596a0 100644 --- a/builtin/mainmenu/dlg_create_world.lua +++ b/builtin/mainmenu/dlg_create_world.lua @@ -352,6 +352,12 @@ local function create_world_buttonhandler(this, fields) if fields["world_create_confirm"] or fields["key_enter"] then + if fields["key_enter"] then + -- HACK: This timestamp prevents double-triggering when pressing Enter on an input box + -- and releasing it on a button[] or textlist[] due to instant formspec updates. + this.parent.dlg_create_world_closed_at = core.get_us_time() + end + local worldname = fields["te_world_name"] local game, _ = pkgmgr.find_by_gameid(core.settings:get("menu_last_game")) diff --git a/builtin/mainmenu/tab_local.lua b/builtin/mainmenu/tab_local.lua index 7887039ab..eed373428 100644 --- a/builtin/mainmenu/tab_local.lua +++ b/builtin/mainmenu/tab_local.lua @@ -215,6 +215,10 @@ local function main_button_handler(this, fields, name, tabdata) assert(name == "local") + if this.dlg_create_world_closed_at == nil then + this.dlg_create_world_closed_at = 0 + end + local world_doubleclick = false if fields["sp_worlds"] ~= nil then @@ -269,6 +273,12 @@ local function main_button_handler(this, fields, name, tabdata) end if fields["play"] ~= nil or world_doubleclick or fields["key_enter"] then + local enter_key_duration = core.get_us_time() - this.dlg_create_world_closed_at + if world_doubleclick and enter_key_duration <= 200000 then -- 200 ms + this.dlg_create_world_closed_at = 0 + return true + end + local selected = core.get_textlist_index("sp_worlds") gamedata.selected_world = menudata.worldlist:get_raw_index(selected) @@ -316,6 +326,7 @@ local function main_button_handler(this, fields, name, tabdata) end if fields["world_create"] ~= nil then + this.dlg_create_world_closed_at = 0 local create_world_dlg = create_create_world_dlg() create_world_dlg:set_parent(this) this:hide()