3
0
mirror of https://github.com/britzl/monarch.git synced 2025-11-26 19:00:53 +01:00

Compare commits

...

4 Commits
3.4.4 ... 3.5.0

Author SHA1 Message Date
Björn Ritzl
bcc6264cd4 Remove screen from stack when unregistered
Fixes #87
2022-05-29 14:47:34 +02:00
Björn Ritzl
1dec704047 Delay reset of timestep when going back from popup
Fixes #84
2022-02-23 12:46:04 +01:00
Björn Ritzl
9764c68475 Update callback_tracker.lua
Fixes #83
2022-01-27 12:16:43 +01:00
Björn Ritzl
d57d550859 Fixed issues with missing variables 2022-01-27 12:15:52 +01:00
2 changed files with 24 additions and 7 deletions

View File

@@ -298,6 +298,12 @@ function M.unregister(id)
log("unregister()", id)
local screen = screens[id]
screens[id] = nil
-- remove screen from stack
for i = #stack, 1, -1 do
if stack[i].id == id then
table.remove(stack, i)
end
end
end
local function acquire_input(screen)
@@ -650,10 +656,10 @@ local function back_out(screen, next_screen, wait_for_transition, cb)
change_context(screen)
release_input(screen, next_screen)
focus_lost(screen, next_screen)
transition(screen, M.TRANSITION.BACK_OUT, { next_screen = next_screen and next_screen.id }, wait_for_transition)
if next_screen and screen.popup then
reset_timestep(next_screen)
end
transition(screen, M.TRANSITION.BACK_OUT, { next_screen = next_screen and next_screen.id }, wait_for_transition)
screen.visible = false
unload(screen)
active_transition_count = active_transition_count - 1
@@ -879,7 +885,7 @@ function M.clear(cb)
local top = stack[#stack]
while top and top.visible do
stack[#stack] = nil
await(back_out, top, screen, WAIT_FOR_TRANSITION, resume)
await(back_out, top, stack[#stack - 1], WAIT_FOR_TRANSITION, resume)
top = stack[#stack]
end
@@ -921,9 +927,20 @@ function M.back(data, cb)
if data then
top.data = data
end
back_in(top, screen, DO_NOT_WAIT_FOR_TRANSITION, function()
back_out(screen, top, WAIT_FOR_TRANSITION, back_cb)
end)
-- if the screen we are backing out from is a popup and the screen we go
-- back to is not a popup we need to let the popup completely hide before
-- we start working on the screen we go back to
-- we do this to ensure that we do not reset the times step of the screen
-- we go back to until it is no longer obscured by the popup
if screen.popup and not top.popup then
back_out(screen, top, WAIT_FOR_TRANSITION, function()
back_in(top, screen, WAIT_FOR_TRANSITION, back_cb)
end)
else
back_in(top, screen, DO_NOT_WAIT_FOR_TRANSITION, function()
back_out(screen, top, WAIT_FOR_TRANSITION, back_cb)
end)
end
else
back_out(screen, top, WAIT_FOR_TRANSITION, back_cb)
end

View File

@@ -14,7 +14,7 @@ function M.create()
local function invoke_if_done()
if all_callbacks_done then
print("Warning: The same callback will be invoked twice from the callback tracker!", id or "")
print("Warning: The same callback will be invoked twice from the callback tracker!")
end
if callback_count == 0 and callback then
all_callbacks_done = true
@@ -52,6 +52,6 @@ end
return setmetatable(M, {
__call = function(_, ...)
return M.create(...)
return M.create()
end
})