diff --git a/frontend/ui/screensaver.lua b/frontend/ui/screensaver.lua index 8775c45cd..f782f853a 100644 --- a/frontend/ui/screensaver.lua +++ b/frontend/ui/screensaver.lua @@ -805,18 +805,6 @@ function Screensaver:show() self.screensaver_widget.modal = true self.screensaver_widget.dithered = true - -- NOTE: ScreenSaver itself is not a widget, so make sure we cleanup behind us... - self.screensaver_widget.onCloseWidget = function(this) - -- this is self.screensaver_widget (i.e., an object instantiated from ScreenSaverWidget) - local super = getmetatable(this) - -- super is the class object of self.screensaver_widget (i.e., ScreenSaverWidget) - if super.onCloseWidget then - super.onCloseWidget(this) - end - -- self is ScreenSaver (upvalue) - self:cleanup() - end - UIManager:show(self.screensaver_widget, "full") end @@ -824,17 +812,6 @@ function Screensaver:show() if with_gesture_lock then self.screensaver_lock_widget = ScreenSaverLockWidget:new{} - -- If we don't have a ScreenSaverWidget handling cleanup for us, it'll fall to us... - if not self.screensaver_widget then - self.screensaver_lock_widget.onCloseWidget = function(this) - local super = getmetatable(this) - if super.onCloseWidget then - super.onCloseWidget(this) - end - self:cleanup() - end - end - -- It's flagged as modal, so it'll stay on top UIManager:show(self.screensaver_lock_widget) end diff --git a/frontend/ui/widget/screensaverlockwidget.lua b/frontend/ui/widget/screensaverlockwidget.lua index 3a5615a26..37229b378 100644 --- a/frontend/ui/widget/screensaverlockwidget.lua +++ b/frontend/ui/widget/screensaverlockwidget.lua @@ -120,6 +120,9 @@ function ScreenSaverLockWidget:onCloseWidget() local Screensaver = require("ui/screensaver") if not Screensaver.screensaver_widget then UIManager:setDirty("all", "full") + + -- And take care of cleanup in its place, too + Screensaver:cleanup() end end diff --git a/frontend/ui/widget/screensaverwidget.lua b/frontend/ui/widget/screensaverwidget.lua index cf89c717c..aa817a5b0 100644 --- a/frontend/ui/widget/screensaverwidget.lua +++ b/frontend/ui/widget/screensaverwidget.lua @@ -97,6 +97,10 @@ function ScreenSaverWidget:onCloseWidget() -- Will come after the Resume event, iff screensaver_delay is set. -- Comes *before* it otherwise. UIManager:broadcastEvent(Event:new("OutOfScreenSaver")) + + -- NOTE: ScreenSaver itself is neither a Widget nor an instantiated object, so make sure we cleanup behind us... + local Screensaver = require("ui/screensaver") + Screensaver:cleanup() end function ScreenSaverWidget:onResume()