diff --git a/monarch/transitions/gui.lua b/monarch/transitions/gui.lua index 5c7ab2b..a63a465 100644 --- a/monarch/transitions/gui.lua +++ b/monarch/transitions/gui.lua @@ -110,22 +110,28 @@ function M.create(node) delay = delay, in_progress = false, urls = {}, + id = nil } end + local function finish_transition(transition) + transition.in_progress = false + local message = { transition = transition.id } + while #transition.urls > 0 do + local url = table.remove(transition.urls) + msg.post(url, monarch.TRANSITION.DONE, message) + end + end + local function start_transition(transition, transition_id, url) table.insert(transition.urls, url) if not transition.in_progress then table.insert(transition.urls, msg.url()) - current_transition = transition transition.in_progress = true + transition.id = transition_id + current_transition = transition transition.fn(node, initial_data, transition.easing, transition.duration, transition.delay or 0, function() - transition.in_progress = false - local message = { transition = transition_id } - while #transition.urls > 0 do - local url = table.remove(transition.urls) - msg.post(url, monarch.TRANSITION.DONE, message) - end + finish_transition(transition) end) end end @@ -139,6 +145,9 @@ function M.create(node) -- were transitioned out if current_transition then current_transition.fn(node, initial_data, current_transition.easing, 0, 0) + if current_transition.in_progress then + finish_transition(current_transition) + end end else local transition = transitions[message_id]