diff options
| author | blasty <blasty@local> | 2026-07-26 09:37:47 +0200 |
|---|---|---|
| committer | blasty <blasty@local> | 2026-07-26 09:37:47 +0200 |
| commit | 8add668ad1f10f77132de36b062d16a9e4103989 (patch) | |
| tree | 883249ed5e1cb4091643c52d459f0c34ba3ea26e /server | |
| parent | listing: `c` disassembles until something stops it (diff) | |
| download | ida-tui-8add668ad1f10f77132de36b062d16a9e4103989.tar.gz ida-tui-8add668ad1f10f77132de36b062d16a9e4103989.tar.xz ida-tui-8add668ad1f10f77132de36b062d16a9e4103989.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 'server')
0 files changed, 0 insertions, 0 deletions
