diff --git a/tui_client/src/tui_client/app.py b/tui_client/src/tui_client/app.py index 5323153..140b199 100644 --- a/tui_client/src/tui_client/app.py +++ b/tui_client/src/tui_client/app.py @@ -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: diff --git a/tui_client/src/tui_client/screens/connect.py b/tui_client/src/tui_client/screens/connect.py index e6b4a03..a3cc4a1 100644 --- a/tui_client/src/tui_client/screens/connect.py +++ b/tui_client/src/tui_client/screens/connect.py @@ -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" diff --git a/tui_client/src/tui_client/screens/lobby.py b/tui_client/src/tui_client/screens/lobby.py index dc57424..d2dc474 100644 --- a/tui_client/src/tui_client/screens/lobby.py +++ b/tui_client/src/tui_client/screens/lobby.py @@ -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()