New toast now cancels an active Screensaver

This commit is contained in:
kdmukai
2023-08-14 21:43:57 -05:00
parent fec8d212b7
commit 2e3004ed2d
3 changed files with 14 additions and 9 deletions
+1
View File
@@ -402,6 +402,7 @@ class Controller(Singleton):
"""
if self.is_screensaver_running:
# New toast notifications break out of the Screensaver
print("Controller: stopping screensaver")
self.screensaver.stop()
if self.toast_notification_thread and self.toast_notification_thread.is_alive():
+4 -3
View File
@@ -119,7 +119,7 @@ class BaseToastOverlayManagerThread(BaseThread):
print(f"{self.__class__.__name__}: started")
start = time.time()
has_rendered = False
self.previous_screen_state = None
previous_screen_state = None
if self.activation_delay > 0:
time.sleep(self.activation_delay)
@@ -151,7 +151,7 @@ class BaseToastOverlayManagerThread(BaseThread):
print(f"{self.__class__.__name__}: Lock re-acquired")
if not has_rendered:
self.previous_screen_state = self.renderer.canvas.copy()
previous_screen_state = self.renderer.canvas.copy()
print(f"{self.__class__.__name__}: Showing toast")
self.toast.render()
has_rendered = True
@@ -167,7 +167,8 @@ class BaseToastOverlayManagerThread(BaseThread):
print(f"{self.__class__.__name__}: exiting")
if has_rendered and self.renderer.lock.locked():
# As far as we know, we currently hold the Renderer.lock
self.renderer.show_image(self.previous_screen_state)
self.renderer.show_image(previous_screen_state)
print(f"{self.__class__.__name__}: restored previous screen state")
# We're done, release the lock
self.renderer.lock.release()
+9 -6
View File
@@ -140,9 +140,9 @@ class ScreensaverScreen(LogoScreen):
# never gives up the lock until it returns.
with self.renderer.lock:
try:
while True:
while self._is_running:
if self.buttons.has_any_input() or self.buttons.override_ind:
return self.stop()
break
# Must crop the image to the exact display size
crop = self.image.crop((
@@ -175,20 +175,23 @@ class ScreensaverScreen(LogoScreen):
self.increment_y = self.rand_increment()
if self.increment_y > 0.0:
self.increment_y *= -1.0
except KeyboardInterrupt as e:
# Exit triggered; close gracefully
print("Shutting down Screensaver")
self.stop()
# Have to let the interrupt bubble up to exit the main app
raise e
finally:
self._is_running = False
# Restore the original screen
self.renderer.show_image(self.last_screen)
def stop(self):
# Restore the original screen
self.renderer.show_image(self.last_screen)
self._is_running = False