summaryrefslogtreecommitdiffstats
path: root/tests/test_formats.py
diff options
context:
space:
mode:
authorblasty <peter@haxx.in>2026-07-26 09:37:47 +0200
committerblasty <peter@haxx.in>2026-07-26 09:37:47 +0200
commita0a62791895cdacb4f1dd67a4557003f199d328e (patch)
treeefa9d54b02940727fc59d634b6d1a2ddd7935f52 /tests/test_formats.py
parentlisting: `c` disassembles until something stops it (diff)
downloadida-tui-a0a62791895cdacb4f1dd67a4557003f199d328e.tar.gz
ida-tui-a0a62791895cdacb4f1dd67a4557003f199d328e.tar.xz
ida-tui-a0a62791895cdacb4f1dd67a4557003f199d328e.zip
listing: an edit must not move the view
Pressing `c` jumped the scroll position. Defining an item reloads the view, and the reload only carried the cursor's row index — the viewport was recomputed from scratch, so you landed somewhere else and lost your place mid-carve. Row indices are the wrong thing to remember across this reload anyway: carving COLLAPSES rows (four undefined byte rows become one instruction row), so the row that was at the top is a different address afterwards. The anchor has to be the top visible ADDRESS, resolved back to a row after the model is rebuilt. on_edit_item_requested captures it before the edit, _do_edit_item resolves it against the new model, and _open_at grew a scroll_y so the entry can carry it. Verified: cursor at 0x4800 with the top of the screen at 0x47da, press `c`, and both are unchanged afterwards. tests: +3 blob UI (scrolled far enough to have something to lose, top address unchanged, cursor address unchanged). 25/0 blob, 202/0 scenarios.
Diffstat (limited to 'tests/test_formats.py')
0 files changed, 0 insertions, 0 deletions