mirror of
https://github.com/SeedSigner/seedsigner.git
synced 2026-10-05 23:18:25 +00:00
New toast now cancels an active Screensaver
This commit is contained in:
@@ -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():
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user