diff --git a/python_payload/st3m/ui/view.py b/python_payload/st3m/ui/view.py index eb042b6790b446e97f73e78d9e937228130d161d..a0b5f5bbe56a473d2092cae1b5e0df4469f1f0cc 100644 --- a/python_payload/st3m/ui/view.py +++ b/python_payload/st3m/ui/view.py @@ -21,11 +21,13 @@ class View(Responder): """ pass - def on_exit(self) -> None: + def on_exit(self) -> bool: """ Called when the View is about to become inactive. + If it returns True, think calls will continue to happen + until on_exit_done. """ - pass + return False def on_enter_done(self) -> None: """ @@ -199,6 +201,8 @@ class ViewManager(Responder): self._first_think = False self._fully_drawn = 0 + self._outgoing_wants_to_think = False + def _end_transition(self) -> None: if not self._transitioning: return @@ -225,7 +229,7 @@ class ViewManager(Responder): self._incoming = self._pending self._pending = None if self._outgoing is not None: - self._outgoing.on_exit() + self._outgoing_wants_to_think = self._outgoing.on_exit() self._incoming.on_enter(self) if self._outgoing is None: self._end_transition() @@ -251,7 +255,7 @@ class ViewManager(Responder): else: self.pop(ViewTransitionSwipeRight()) - if self._outgoing is not None: + if self._outgoing is not None and self._outgoing_wants_to_think: self._outgoing.think(ins, delta_ms) if self._incoming is not None: self._incoming.think(ins, delta_ms)