Context
Found while fixing #19820, recorded as a defect-note at 15:35Z, and promoted by triage after a real-browser check. On the issues showcase, at dev eedc33c3dd plus #19821 (which only adds destroy-time retirement), hovering a row breaks the highlight at both locked seams:
- Hovering row 3's center cells tints them
rgb(250, 249, 253).
- The same row's locked-start cell (
19756) and locked-end cell (Open) stay rgb(255, 255, 255).
- On the main thread,
Neo.main.addon.GridRowHoverSync is not even loaded. GridDragScroll and GridRowScrollPinning each hold one registration for the same grid.
The Problem
#9630 made GridRowHoverSync sync a row's hover across the start, center and end bodies whenever the grid has locked columns. It registers through Container#updateColCount, inside if (me.scrollManager) (src/grid/Container.mjs:1637). A grid with locked columns in its initial config only calls updateColCount() from construct (:359). That is before onConstructed creates the ScrollManager (:1307–1312), so the block is skipped. ScrollManager#afterSetMounted registers drag scroll, row pinning and horizontal scroll sync, but not hover sync. Only a later column change (onColumnsMutate, :1300) registers it. #19820's unit recorder shows the same thing: a grid created with a locked column has no hover-sync registration after mount, and a runtime lock adds one.
The Architectural Reality
- Design authority: #9630, which introduced hover sync so that hovering a row highlights its cells in every region.
GridRowHoverSync#register silently skips a view whose DOM node is absent (src/main/addon/GridRowHoverSync.mjs:116–138). A registration attempted before mount does nothing, so registration belongs to the mount lifecycle.
ScrollManager already owns the mount lifecycle of its other addons in afterSetMounted and afterSetWindowId (src/grid/ScrollManager.mjs:110–151).
The Fix
ScrollManager#afterSetMounted registers GridRowHoverSync on mount when rowHoverSync is on and the grid has locked columns, and retires it on unmount.
afterSetWindowId moves it with the others.
Container#updateColCount keeps toggling it when columns are locked or unlocked at run time.
- No config or API change.
Acceptance Criteria
Out of Scope
- The addon's own behaviour, since it syncs correctly once registered.
- Destroy-time retirement, which is #19820.
Related
#9630 · #19820 · #19821
Live latest-open sweep: latest 20 open issues at 16:43Z, no equivalent. The only GridRowHoverSync matches are closed: #9630 and #18295. A2A claim sweep: no claim on hover sync. MC sweep ("row hover highlight does not sync across locked columns regions grid GridRowHoverSync not registered locked at construction") returned the April design: updateColCount(hasLockedColumns) enables the addon dynamically. No prior decision excludes construction. Own-assignment sweep: 5 open, and #19820 is adjacent but not overlapping (it covers destroy).
Origin Session ID: bb2e8968-a6d6-4ef7-a4ed-5ab3157b1ac8
Retrieval Hint: "grid locked columns row hover sync never registered at construction ScrollManager afterSetMounted"
Context
Found while fixing #19820, recorded as a defect-note at 15:35Z, and promoted by triage after a real-browser check. On the issues showcase, at dev
eedc33c3ddplus #19821 (which only adds destroy-time retirement), hovering a row breaks the highlight at both locked seams:rgb(250, 249, 253).19756) and locked-end cell (Open) stayrgb(255, 255, 255).Neo.main.addon.GridRowHoverSyncis not even loaded.GridDragScrollandGridRowScrollPinningeach hold one registration for the same grid.The Problem
#9630 made
GridRowHoverSyncsync a row's hover across the start, center and end bodies whenever the grid has locked columns. It registers throughContainer#updateColCount, insideif (me.scrollManager)(src/grid/Container.mjs:1637). A grid with locked columns in its initial config only callsupdateColCount()fromconstruct(:359). That is beforeonConstructedcreates theScrollManager(:1307–1312), so the block is skipped.ScrollManager#afterSetMountedregisters drag scroll, row pinning and horizontal scroll sync, but not hover sync. Only a later column change (onColumnsMutate,:1300) registers it. #19820's unit recorder shows the same thing: a grid created with a locked column has no hover-sync registration after mount, and a runtime lock adds one.The Architectural Reality
GridRowHoverSync#registersilently skips a view whose DOM node is absent (src/main/addon/GridRowHoverSync.mjs:116–138). A registration attempted before mount does nothing, so registration belongs to the mount lifecycle.ScrollManageralready owns the mount lifecycle of its other addons inafterSetMountedandafterSetWindowId(src/grid/ScrollManager.mjs:110–151).The Fix
ScrollManager#afterSetMountedregistersGridRowHoverSyncon mount whenrowHoverSyncis on and the grid has locked columns, and retires it on unmount.afterSetWindowIdmoves it with the others.Container#updateColCountkeeps toggling it when columns are locked or unlocked at run time.Acceptance Criteria
GridRowHoverSyncwhen it mounts. (Unit test, red on dev.)Out of Scope
Related
#9630 · #19820 · #19821
Live latest-open sweep: latest 20 open issues at 16:43Z, no equivalent. The only
GridRowHoverSyncmatches are closed: #9630 and #18295. A2A claim sweep: no claim on hover sync. MC sweep ("row hover highlight does not sync across locked columns regions grid GridRowHoverSync not registered locked at construction") returned the April design:updateColCount(hasLockedColumns)enables the addon dynamically. No prior decision excludes construction. Own-assignment sweep: 5 open, and #19820 is adjacent but not overlapping (it covers destroy).Origin Session ID: bb2e8968-a6d6-4ef7-a4ed-5ab3157b1ac8 Retrieval Hint: "grid locked columns row hover sync never registered at construction ScrollManager afterSetMounted"