Add single-escape navigation: back from signup/lobby, leave room
- Single Esc: goes back one step (signup→login, lobby→connect, room→lobby) - Double Esc: still quits the app - Footer bar shows [Esc] Back and [Esc][Esc] Quit hints on all screens Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
13e98d330a
commit
7001232658
@ -75,12 +75,16 @@ class GolfApp(App):
|
|||||||
handler(msg)
|
handler(msg)
|
||||||
|
|
||||||
def action_esc_pressed(self) -> None:
|
def action_esc_pressed(self) -> None:
|
||||||
"""Double-escape to hard quit. Single escape does nothing."""
|
"""Single escape goes back, double-escape quits."""
|
||||||
now = time.monotonic()
|
now = time.monotonic()
|
||||||
if now - self._last_escape < 0.5:
|
if now - self._last_escape < 0.5:
|
||||||
self.exit()
|
self.exit()
|
||||||
else:
|
else:
|
||||||
self._last_escape = now
|
self._last_escape = now
|
||||||
|
# Let the active screen handle single escape
|
||||||
|
handler = getattr(self.screen, "handle_escape", None)
|
||||||
|
if handler:
|
||||||
|
handler()
|
||||||
|
|
||||||
def _update_keymap(self) -> None:
|
def _update_keymap(self) -> None:
|
||||||
"""Update the keymap bar based on current screen."""
|
"""Update the keymap bar based on current screen."""
|
||||||
@ -89,11 +93,11 @@ class GolfApp(App):
|
|||||||
if keymap:
|
if keymap:
|
||||||
text = keymap
|
text = keymap
|
||||||
elif screen_name == "ConnectScreen":
|
elif screen_name == "ConnectScreen":
|
||||||
text = "[Tab] Navigate [Enter] Submit [Esc Esc] Quit"
|
text = "[Tab] Navigate [Enter] Submit [Esc][Esc] Quit"
|
||||||
elif screen_name == "LobbyScreen":
|
elif screen_name == "LobbyScreen":
|
||||||
text = "[Tab] Navigate [Enter] Submit [Esc Esc] Quit"
|
text = "[Esc] Back [Tab] Navigate [Enter] Submit [Esc][Esc] Quit"
|
||||||
else:
|
else:
|
||||||
text = "[Esc Esc] Quit"
|
text = "[Esc][Esc] Quit"
|
||||||
try:
|
try:
|
||||||
self.query_one("#keymap-bar", KeymapBar).update(text)
|
self.query_one("#keymap-bar", KeymapBar).update(text)
|
||||||
except Exception:
|
except Exception:
|
||||||
@ -104,8 +108,8 @@ class GolfApp(App):
|
|||||||
|
|
||||||
Always appends [Esc Esc] Quit on the right for discoverability.
|
Always appends [Esc Esc] Quit on the right for discoverability.
|
||||||
"""
|
"""
|
||||||
if "[Esc Esc]" not in text:
|
if "[Esc]" not in text.replace("[Esc][Esc]", ""):
|
||||||
text = f"{text} [Esc Esc] Quit"
|
text = f"{text} [Esc][Esc] Quit"
|
||||||
try:
|
try:
|
||||||
self.query_one("#keymap-bar", KeymapBar).update(text)
|
self.query_one("#keymap-bar", KeymapBar).update(text)
|
||||||
except Exception:
|
except Exception:
|
||||||
|
|||||||
@ -85,7 +85,7 @@ class ConnectScreen(Screen):
|
|||||||
self._set_status("")
|
self._set_status("")
|
||||||
self._update_form_visibility()
|
self._update_form_visibility()
|
||||||
|
|
||||||
def key_escape(self) -> None:
|
def handle_escape(self) -> None:
|
||||||
"""Escape goes back to login if on signup form."""
|
"""Escape goes back to login if on signup form."""
|
||||||
if self._mode == "signup":
|
if self._mode == "signup":
|
||||||
self._mode = "login"
|
self._mode = "login"
|
||||||
|
|||||||
@ -231,14 +231,22 @@ class LobbyScreen(Screen):
|
|||||||
def _update_keymap(self) -> None:
|
def _update_keymap(self) -> None:
|
||||||
try:
|
try:
|
||||||
if self._in_room and self._is_host:
|
if self._in_room and self._is_host:
|
||||||
self.app.set_keymap("[+] Add CPU [−] Remove CPU [Enter] Start Game [Esc Esc] Quit")
|
self.app.set_keymap("[Esc] Leave [+] Add CPU [−] Remove [Enter] Start [Esc][Esc] Quit")
|
||||||
elif self._in_room:
|
elif self._in_room:
|
||||||
self.app.set_keymap("Waiting for host to start... [Esc Esc] Quit")
|
self.app.set_keymap("[Esc] Leave Waiting for host... [Esc][Esc] Quit")
|
||||||
else:
|
else:
|
||||||
self.app.set_keymap("[Tab] Navigate [Enter] Create/Join [Esc Esc] Quit")
|
self.app.set_keymap("[Esc] Back [Tab] Navigate [Enter] Create/Join [Esc][Esc] Quit")
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def handle_escape(self) -> None:
|
||||||
|
"""Single escape: leave room → pre-room, or pre-room → back to connect."""
|
||||||
|
if self._in_room:
|
||||||
|
self.run_worker(self._send("leave_game"))
|
||||||
|
self.reset_to_pre_room()
|
||||||
|
else:
|
||||||
|
self.app.pop_screen()
|
||||||
|
|
||||||
def on_button_pressed(self, event: Button.Pressed) -> None:
|
def on_button_pressed(self, event: Button.Pressed) -> None:
|
||||||
if event.button.id == "btn-create":
|
if event.button.id == "btn-create":
|
||||||
self._create_room()
|
self._create_room()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user