diff options
| author | blasty <peter@haxx.in> | 2026-07-25 14:04:53 +0200 |
|---|---|---|
| committer | blasty <peter@haxx.in> | 2026-07-25 14:04:53 +0200 |
| commit | f932244a4f758f80a0207a043dee1fc32a026299 (patch) | |
| tree | 7a7e16189f7a44c3b5ef6bb006b996a0adf0caf8 /server/patch_server.py | |
| parent | tests: fix the "filter flake" and the view_toggle cascade — suite is 187/0 (diff) | |
| download | ida-tui-f932244a4f758f80a0207a043dee1fc32a026299.tar.gz ida-tui-f932244a4f758f80a0207a043dee1fc32a026299.tar.xz ida-tui-f932244a4f758f80a0207a043dee1fc32a026299.zip | |
exit: ask before quitting with unsaved database changes
Quitting used to be silent AND inconsistent. Single-binary mode closed the worker
with save=False, so renames/types/comments were DROPPED without a word; project
mode did the opposite and saved everything silently via the pool. Neither told
you anything.
Now 'q'/ctrl+q routes through action_quit: clean databases exit immediately, and
anything unsaved raises a QuitScreen naming the affected databases with
s save & quit d discard & quit Esc cancel
Saving happens with an overlay up, because writing a large .i64 takes seconds and
doing it during teardown would look like a hang with no UI left to explain it.
_dirty_labels() covers project mode too: the active binary plus any still-resident
one that was edited. Evicted binaries were already saved on the way out, so they
can't be silently lost.
on_unmount now distinguishes an explicit choice from an unexpected teardown:
_save_on_exit is None (crash/kill -> save defensively, including single-binary
mode which previously discarded), False (user chose discard, or we already saved).
Verified end-to-end across two sessions on a temp copy: rename + 's' -> the rename
is still there on reopen; rename + 'd' -> it is not. Plus a quit_guard scenario
(clean exits immediately, dirty asks, Esc cancels).
Also hardens Ctx.open(view="decomp"): F5/Tab only decompiles from a focused code
pane and the listing may still be settling, so a swallowed Tab surfaced much later
as "pseudocode view shows: active=listing". It now retries instead of assuming the
first Tab takes. Full suite 191/0, green twice in a row.
Diffstat (limited to '')
0 files changed, 0 insertions, 0 deletions
