From d2318f2de177b9cfdd34cd7508c7b3252e7d87d8 Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Fri, 27 Feb 2026 18:26:45 -0800 Subject: [PATCH 1/2] fix --- selfdrive/ui/mici/layouts/main.py | 3 +-- .../ui/mici/layouts/settings/network/__init__.py | 4 ++-- system/ui/lib/application.py | 15 ++++++++++----- system/ui/mici_setup.py | 2 +- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/selfdrive/ui/mici/layouts/main.py b/selfdrive/ui/mici/layouts/main.py index e39a228daf5071..1a0c6bc0942e5e 100644 --- a/selfdrive/ui/mici/layouts/main.py +++ b/selfdrive/ui/mici/layouts/main.py @@ -49,6 +49,7 @@ def __init__(self): # Set callbacks self._setup_callbacks() + gui_app.add_nav_stack_tick(self._handle_transitions) gui_app.push_widget(self) # Start onboarding if terms or training not completed, make sure to push after self @@ -76,8 +77,6 @@ def _render(self, _): # Render super()._render(self._rect) - self._handle_transitions() - def _handle_transitions(self): # Don't pop if onboarding if gui_app.get_active_widget() == self._onboarding_window: diff --git a/selfdrive/ui/mici/layouts/settings/network/__init__.py b/selfdrive/ui/mici/layouts/settings/network/__init__.py index ce3f1a817eea3c..ae7d085e01d8a8 100644 --- a/selfdrive/ui/mici/layouts/settings/network/__init__.py +++ b/selfdrive/ui/mici/layouts/settings/network/__init__.py @@ -166,13 +166,13 @@ def show_event(self): self._wifi_manager.set_active(True) # Process wifi callbacks while at any point in the nav stack - gui_app.set_nav_stack_tick(self._wifi_manager.process_callbacks) + gui_app.add_nav_stack_tick(self._wifi_manager.process_callbacks) def hide_event(self): super().hide_event() self._wifi_manager.set_active(False) - gui_app.set_nav_stack_tick(None) + gui_app.remove_nav_stack_tick(self._wifi_manager.process_callbacks) def _toggle_roaming(self, checked: bool): self._wifi_manager.update_gsm_settings(checked, ui_state.params.get("GsmApn") or "", ui_state.params.get_bool("GsmMetered")) diff --git a/system/ui/lib/application.py b/system/ui/lib/application.py index 1640b0d0774758..91baa958959af9 100644 --- a/system/ui/lib/application.py +++ b/system/ui/lib/application.py @@ -220,7 +220,7 @@ def __init__(self, width: int | None = None, height: int | None = None): self._frame = 0 self._window_close_requested = False self._nav_stack: list[object] = [] - self._nav_stack_tick: Callable[[], None] | None = None + self._nav_stack_ticks: list[Callable[[], None]] = [] self._nav_stack_widgets_to_render = 1 if self.big_ui() else 2 self._mouse = MouseState(self._scale) @@ -411,8 +411,13 @@ def get_active_widget(self): return self._nav_stack[-1] return None - def set_nav_stack_tick(self, tick_function: Callable | None): - self._nav_stack_tick = tick_function + def add_nav_stack_tick(self, tick_function: Callable): + if tick_function not in self._nav_stack_ticks: + self._nav_stack_ticks.append(tick_function) + + def remove_nav_stack_tick(self, tick_function: Callable): + if tick_function in self._nav_stack_ticks: + self._nav_stack_ticks.remove(tick_function) def set_should_render(self, should_render: bool): self._should_render = should_render @@ -561,8 +566,8 @@ def render(self): rl.clear_background(rl.BLACK) # Allow a Widget to still run a function regardless of the stack depth - if self._nav_stack_tick is not None: - self._nav_stack_tick() + for tick in self._nav_stack_ticks: + tick() # Only render top widgets for widget in self._nav_stack[-self._nav_stack_widgets_to_render:]: diff --git a/system/ui/mici_setup.py b/system/ui/mici_setup.py index 6c73f14e3acd01..ca635444392901 100755 --- a/system/ui/mici_setup.py +++ b/system/ui/mici_setup.py @@ -508,7 +508,7 @@ def __init__(self): self._network_monitor = NetworkConnectivityMonitor() self._network_monitor.start() self._prev_has_internet = False - gui_app.set_nav_stack_tick(self._nav_stack_tick) + gui_app.add_nav_stack_tick(self._nav_stack_tick) self._start_page = StartPage() self._start_page.set_click_callback(self._getting_started_button_callback) From 9758289808ac9586086b56065f8820af8a9c15e7 Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Fri, 27 Feb 2026 18:29:52 -0800 Subject: [PATCH 2/2] type --- system/ui/lib/application.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/system/ui/lib/application.py b/system/ui/lib/application.py index 91baa958959af9..34aed4f6a6d7a0 100644 --- a/system/ui/lib/application.py +++ b/system/ui/lib/application.py @@ -411,11 +411,11 @@ def get_active_widget(self): return self._nav_stack[-1] return None - def add_nav_stack_tick(self, tick_function: Callable): + def add_nav_stack_tick(self, tick_function: Callable[[], None]): if tick_function not in self._nav_stack_ticks: self._nav_stack_ticks.append(tick_function) - def remove_nav_stack_tick(self, tick_function: Callable): + def remove_nav_stack_tick(self, tick_function: Callable[[], None]): if tick_function in self._nav_stack_ticks: self._nav_stack_ticks.remove(tick_function)