Keep the first-selected cell marked as active during a multi-cell selection

The active cell (bold border/handle, formula bar target) used to track
selection.focus, so it followed the mouse/cursor while dragging or
shift-extending a range. Switch it to selection.anchor -- the first cell of
the current selection action -- so it stays put while the range grows,
matching Excel/Numbers. Tab/Enter data-entry flow already keeps anchor ==
focus while it moves the cursor, so that behaviour is unaffected.

- document.ts: activeCell/activeCellName/activeCellInput read the anchor.
- FormulaBar.vue: commits to the anchor cell to match what it displays.
- TableGrid.vue: isActive() (border + handle) and F2/type-to-edit target
  the anchor; Home/End keep using the cursor's row via s.focus.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
wkh
2026-09-02 09:59:29 +02:00
co-authored by Claude Sonnet 5
parent 44f3314137
commit e45cdfd077
4 changed files with 18 additions and 9 deletions
+3 -1
View File
@@ -135,7 +135,9 @@ describe('seed document acceptance (canvas model)', () => {
s.setSelection({ tableId: umsatz, anchor: { col: 1, row: 1 }, focus: { col: 1, row: 5 } });
expect(s.selectionAggregate.value.sum).toBe(6175);
expect(s.selectionAggregate.value.count).toBe(5);
expect(s.activeCellName.value).toBe(`Umsatz::${toA1(1, 5)}`);
// the active cell is the anchor -- the first cell of the selection -- not
// wherever the selection was extended to.
expect(s.activeCellName.value).toBe(`Umsatz::${toA1(1, 1)}`);
});
it('recalculation visits precedents before dependents across tables', () => {