fix(input): reset controls on focus loss

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Andrew Quenehen
2026-08-01 03:53:37 -03:00
parent 560ebc5997
commit da60f40dfc
2 changed files with 29 additions and 1 deletions
+5 -1
View File
@@ -406,6 +406,7 @@ end
function love.focus(f)
if editorMode or TouchEditor then return end
if Importer then
require("src.core.Input"):reset()
if Importer.focus then Importer:focus(f) end
return
end
@@ -415,7 +416,10 @@ end
-- v is true when the window becomes visible again, false on minimize.
function love.visible(v)
if editorMode or TouchEditor then return end
if Importer then return end
if Importer then
require("src.core.Input"):reset()
return
end
Game:visible(v)
end
+24
View File
@@ -0,0 +1,24 @@
-- Focus / visibility loss clears held directions (SWNX-18).
package.path = "./?.lua;./?/init.lua;" .. package.path
if not _G.love then _G.love = require("tests.love_stub") end
local T = require("tests.harness")
local check = T.check
local Input = require("src.core.Input")
local Game = require("src.core.Game")
Input:init()
Input:keypressed("left")
Input:step()
check(Input:isDown("left"), "left held before focus loss")
Game:focus(false)
check(not Input:isDown("left"), "focus loss clears held direction")
Input:keypressed("up")
Input:step()
Game:visible(false)
check(not Input:isDown("up"), "visibility loss clears held direction")
T.finish()