From 4c3e78c39c81d2997e88b84e1b5a25b244e870e4 Mon Sep 17 00:00:00 2001 From: historia Date: Tue, 25 Aug 2026 21:02:21 -0400 Subject: feat: prompt to save settings when going back from settings menu --- app/ui/hub.py | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) (limited to 'app/ui/hub.py') diff --git a/app/ui/hub.py b/app/ui/hub.py index cad9a9d..de8b861 100644 --- a/app/ui/hub.py +++ b/app/ui/hub.py @@ -405,17 +405,29 @@ class _Hub: # -- settings ------------------------------------------------------- def screen_settings(self): - result = tui.form(self.stdscr, "Settings", _settings_fields(), - back_value=tui.Wizard.BACK) - if result is tui.Wizard.BACK or result is None: - return tui.Wizard.BACK - try: - _apply_settings(result) - except ValueError as exc: - tui.flash(self.stdscr, str(exc), "err") + fields = _settings_fields() + while True: + result = tui.form(self.stdscr, "Settings", fields, + back_value=tui.Wizard.BACK) + if not (result is tui.Wizard.BACK or result is None): + # Save pressed: apply as before, no prompt. + try: + _apply_settings(result) + except ValueError as exc: + tui.flash(self.stdscr, str(exc), "err") + return tui.Wizard.BACK + # q/Esc (or the Cancel button) left the form without saving: + # ask whether the edits should be kept before discarding them. + answer = tui.confirm_yn_cancel(self.stdscr, "Save settings?") + if answer == "cancel": + continue # back into the form, edits intact + if answer == "yes": + values = {field["key"]: field["value"] for field in fields} + try: + _apply_settings(values) + except ValueError as exc: + tui.flash(self.stdscr, str(exc), "err") return tui.Wizard.BACK - tui.flash(self.stdscr, "Settings saved.", "ok") - return tui.Wizard.BACK # -- servers -------------------------------------------------------- -- cgit v1.2.3