diff options
| author | blasty <blasty@local> | 2026-07-25 14:04:53 +0200 |
|---|---|---|
| committer | blasty <blasty@local> | 2026-07-25 14:04:53 +0200 |
| commit | 1f1440285d8caf995abfc49c0849f3ad3000c64e (patch) | |
| tree | 43710761e57eed5a64742039669086b8d954c20f /docs | |
| parent | tests: fix the "filter flake" and the view_toggle cascade — suite is 187/0 (diff) | |
| download | ida-tui-1f1440285d8caf995abfc49c0849f3ad3000c64e.tar.gz ida-tui-1f1440285d8caf995abfc49c0849f3ad3000c64e.tar.xz ida-tui-1f1440285d8caf995abfc49c0849f3ad3000c64e.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 'docs')
0 files changed, 0 insertions, 0 deletions
