From aff81c8c92ef254e8d247c5241df3fb1c1f0087e Mon Sep 17 00:00:00 2001 From: Signal Date: Sat, 28 Mar 2026 17:43:34 -0400 Subject: [PATCH] Fix scroll preservation for customized container scrollbars. --- init.lua | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/init.lua b/init.lua index e805d9d..d95f3b9 100644 --- a/init.lua +++ b/init.lua @@ -752,6 +752,7 @@ local fs_scrollbar = { return e end, onchange = function(e, fn) + e._has_onchange = true ctx._events.on_scrollbar_event[e.__id] = fn return e end, @@ -805,9 +806,11 @@ local fs_scroll_container = { end out[#out +1] = "scroll_container_end[]" + local v = e.__fs._ctx.fields[e.__id] if not e._scrollbar then - local v = e.__fs._ctx.fields[e.__id] out[#out +1] = string.format("scrollbar[-800,-800;0,0;%s;%s;%s]", get(e, "orientation"), e.__id, v and v:sub(5) or "") + elseif not e._scrollbar._has_onchange and v then + e._scrollbar.value = v:sub(5) end return table.concat(out) @@ -843,7 +846,8 @@ local fs_scroll_container = { e._scrollbar:onchange(fn) return e end - e._scrollbar = fs_scrollbar(-800, -800, 0, 0, e._orientation, e.__id):onchange(fn) + e._scrollbar = fs_scrollbar(-800, -800, 0, 0, e._orientation):onchange(fn) + e._scrollbar.__id = e.__id return e end, -- A non-transient name is required in order to preserve scroll position upon a rebuild. @@ -1479,6 +1483,7 @@ imfs = { local container = {__parent = ctx, _events = setmetatable({}, {__index = ctx._events, __newindex = ctx._events}), __fs = ctx.__fs or ctx} table.insert(ctx, container) ctx = container + return container end, container_end = function() ctx = ctx.__parent