Nav stack: clean up (#37484)

guards
This commit is contained in:
Shane Smiskol
2026-02-28 06:19:43 -08:00
committed by GitHub
parent 87c495b761
commit 2af7b3441e
4 changed files with 19 additions and 6 deletions
+11 -3
View File
@@ -77,7 +77,7 @@ class BigConfirmationDialogV2(BigDialogBase):
self._slider = RedBigSlider(title, icon_txt, confirm_callback=self._on_confirm)
else:
self._slider = BigSlider(title, icon_txt, confirm_callback=self._on_confirm)
self._slider.set_enabled(lambda: self.enabled and not self._dragging_down) # self.enabled for nav stack
self._slider.set_enabled(lambda: self.enabled and not self.is_dismissing) # for nav stack + NavWidget
def _on_confirm(self):
if self._exit_on_confirm:
@@ -87,7 +87,7 @@ class BigConfirmationDialogV2(BigDialogBase):
def _update_state(self):
super()._update_state()
if self._dragging_down and not self._slider.confirmed:
if self.is_dismissing and not self._slider.confirmed:
self._slider.reset()
def _render(self, _):
@@ -109,7 +109,7 @@ class BigInputDialog(BigDialogBase):
font_weight=FontWeight.MEDIUM)
self._keyboard = MiciKeyboard()
self._keyboard.set_text(default_text)
self._keyboard.set_enabled(lambda: self.enabled) # for nav stack
self._keyboard.set_enabled(lambda: self.enabled and not self.is_dismissing) # for nav stack + NavWidget
self._minimum_length = minimum_length
self._backspace_held_time: float | None = None
@@ -135,6 +135,10 @@ class BigInputDialog(BigDialogBase):
def _update_state(self):
super()._update_state()
if self.is_dismissing:
self._backspace_held_time = None
return
last_mouse_event = gui_app.last_mouse_event
if last_mouse_event.left_down and rl.check_collision_point_rec(last_mouse_event.pos, self._top_right_button_rect) and self._backspace_img_alpha.x > 1:
if self._backspace_held_time is None:
@@ -229,6 +233,10 @@ class BigInputDialog(BigDialogBase):
super()._handle_mouse_press(mouse_pos)
# TODO: need to track where press was so enter and back can activate on release rather than press
# or turn into icon widgets :eyes_open:
if self.is_dismissing:
return
# handle backspace icon click
if rl.check_collision_point_rec(mouse_pos, self._top_right_button_rect) and self._backspace_img_alpha.x > 254:
self._keyboard.backspace()
+1 -1
View File
@@ -322,7 +322,7 @@ class MiciKeyboard(Widget):
self._selected_key_filter.update(self._closest_key[0] is not None)
# unselect key after animation plays
if self._unselect_key_t is not None and rl.get_time() > self._unselect_key_t:
if (self._unselect_key_t is not None and rl.get_time() > self._unselect_key_t) or not self.enabled:
self._closest_key = (None, float('inf'))
self._unselect_key_t = None
self._selected_key_t = None
+5
View File
@@ -172,6 +172,10 @@ class NavWidget(Widget, abc.ABC):
return ret
@property
def is_dismissing(self) -> bool:
return self._dragging_down or self._playing_dismiss_animation
def show_event(self):
super().show_event()
self._nav_bar.show_event()
@@ -179,6 +183,7 @@ class NavWidget(Widget, abc.ABC):
# Reset state
self._drag_start_pos = None
self._dragging_down = False
self._playing_dismiss_animation = False
# Start NavWidget off-screen, no matter how tall it is
self._y_pos_filter.update_alpha(0.1)
self._y_pos_filter.x = gui_app.height
+2 -2
View File
@@ -443,7 +443,7 @@ class NavScroller(NavWidget, Scroller):
def __init__(self, **kwargs):
super().__init__(**kwargs)
# pass down enabled to child widget for nav stack + disable while swiping away NavWidget
self._scroller.set_enabled(lambda: self.enabled and not self._dragging_down)
self._scroller.set_enabled(lambda: self.enabled and not self.is_dismissing)
def _back_enabled(self) -> bool:
# Vertical scrollers need to be at the top to swipe away to prevent erroneous swipes
@@ -459,7 +459,7 @@ class NavRawScrollPanel(NavWidget):
def __init__(self):
super().__init__()
self._scroll_panel = GuiScrollPanel2(horizontal=False)
self._scroll_panel.set_enabled(lambda: self.enabled and not self._dragging_down)
self._scroll_panel.set_enabled(lambda: self.enabled and not self.is_dismissing)
def show_event(self):
super().show_event()