Lay out a scroll container's content when the content changes
A short list opened after a long one drew all its rows stacked on one point. The fault was not in the list tab: rebuild() handed the row stack to setContent() while it was still empty, so the content was sized to max(rows, viewport) = the viewport. The rows arrived after that, and for a short list the same formula yields the same height, so resize() saw no change and skipped layout(). A long list changes the height and never showed it. relayoutContent() now runs whenever the content changed, rather than leaning on resize()'s change detection - that detection is the wrong instrument for "the children moved". The list tab was the only affected caller: the panels use ListView, which positions its rows itself, and the inspector fills its body before setContent. Also drops the comma line under the list. Every section that can carry a list supplies openList, so the comma fallback in fieldFactory was unreachable; listToText/listFromText go with it. The list-value test now covers coerceListItem through coerceValue instead, so the boolean spelling stays guarded. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
e52e95c0e9
commit
4d07946c74
9 files changed
+102
-87
No files matched your search
@@ -76,7 +76,12 @@ export class ScrollContainer extends Widget {
|
||||
relayoutContent(): void {
|
||||
if (!this.content) return;
|
||||
const size = this.content.measure();
|
||||
this.content.resize(this.w, Math.max(size.h, this.h));
|
||||
const height = Math.max(size.h, this.h);
|
||||
// Content shorter than the viewport is pinned to the viewport height either way, so `resize`
|
||||
// would see no change and skip the layout -- leaving rows added since stacked at the origin.
|
||||
const unchanged = this.content.w === this.w && this.content.h === height;
|
||||
this.content.resize(this.w, height);
|
||||
if (unchanged) this.content.layout();
|
||||
this.scrollY = clamp(this.scrollY, 0, this.maxScroll);
|
||||
this.applyScroll();
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user