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)
|
||||
|
||||
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()
|
||||
if now - self._last_escape < 0.5:
|
||||
self.exit()
|
||||
else:
|
||||
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:
|
||||
"""Update the keymap bar based on current screen."""
|
||||
@ -89,11 +93,11 @@ class GolfApp(App):
|
||||
if keymap:
|
||||
text = keymap
|
||||
elif screen_name == "ConnectScreen":
|
||||
text = "[Tab] Navigate [Enter] Submit [Esc Esc] Quit"
|
||||
text = "[Tab] Navigate [Enter] Submit [Esc][Esc] Quit"
|
||||
elif screen_name == "LobbyScreen":
|
||||
text = "[Tab] Navigate [Enter] Submit [Esc Esc] Quit"
|
||||
text = "[Esc] Back [Tab] Navigate [Enter] Submit [Esc][Esc] Quit"
|
||||
else:
|
||||
text = "[Esc Esc] Quit"
|
||||
text = "[Esc][Esc] Quit"
|
||||
try:
|
||||
self.query_one("#keymap-bar", KeymapBar).update(text)
|
||||
except Exception:
|
||||
@ -104,8 +108,8 @@ class GolfApp(App):
|
||||
|
||||
Always appends [Esc Esc] Quit on the right for discoverability.
|
||||
"""
|
||||
if "[Esc Esc]" not in text:
|
||||
text = f"{text} [Esc Esc] Quit"
|
||||
if "[Esc]" not in text.replace("[Esc][Esc]", ""):
|
||||
text = f"{text} [Esc][Esc] Quit"
|
||||
try:
|
||||
self.query_one("#keymap-bar", KeymapBar).update(text)
|
||||
except Exception:
|
||||
|
||||
@ -85,7 +85,7 @@ class ConnectScreen(Screen):
|
||||
self._set_status("")
|
||||
self._update_form_visibility()
|
||||
|
||||
def key_escape(self) -> None:
|
||||
def handle_escape(self) -> None:
|
||||
"""Escape goes back to login if on signup form."""
|
||||
if self._mode == "signup":
|
||||
self._mode = "login"
|
||||
|
||||
@ -231,14 +231,22 @@ class LobbyScreen(Screen):
|
||||
def _update_keymap(self) -> None:
|
||||
try:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
if event.button.id == "btn-create":
|
||||
self._create_room()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user