From 66bdde41edb4a227049b8db3b681222d06e764c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Ritzl?= Date: Fri, 8 Mar 2019 09:08:34 +0100 Subject: [PATCH] Make sure to pcall when invoking callbacks --- monarch/monarch.lua | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/monarch/monarch.lua b/monarch/monarch.lua index b846166..774a007 100644 --- a/monarch/monarch.lua +++ b/monarch/monarch.lua @@ -61,6 +61,12 @@ local function tohash(s) return hash_lookup[s] end +local function pcallfn(fn, ...) + if fn then + local ok, err = pcall(fn, ...) + if not ok then print(err) end + end +end local function notify_transition_listeners(message_id, message) log("notify_transition_listeners()", message_id) for _,url in pairs(transition_listeners) do @@ -646,8 +652,8 @@ function M.hide(id, cb) else if M.is_visible(id) then back_out(screen, nil, cb) - elseif cb then - cb() + else + pcallfn(cb) end end return true @@ -713,7 +719,7 @@ function M.preload(id, cb) local screen = screens[id] log("preload()", screen.id) if screen.preloaded or screen.loaded then - if cb then cb() end + pcallfn(cb) return true end local co @@ -746,7 +752,7 @@ function M.unload(id, cb) local screen = screens[id] if not screen.preloaded and not screen.loaded then log("unload() screen is not loaded", tostring(id)) - if cb then cb() end + pcallfn(cb) return true end local co