From c1dbe7494fb88ceb59bc26914e47ef38eba1cf9e Mon Sep 17 00:00:00 2001 From: Adam Malczewski Date: Sat, 13 Jun 2026 17:31:27 +0900 Subject: Slice 10 b2: UiSurface list/container data bindings The stage dock is one RML document rendering a variable list of slots (one per minimized window). Adds the deferred slice-6 list-binding shape to UiSurface: bind_list(name, count) + typed per-row fields bind_list_string/int/double/bool (list, field, getter(row)) read as {{ row.field }} via data-for, and bind_list_event(list, event, callback(row)) routed from data-event-*(it_index). dirty() re-reads count + visible rows. Same error-isolation + bind-before- first-frame contract as the scalar bindings; nested lists unsupported. kernel suite green on build + build-asan (asan clean). Edits confined to packages/kernel/. --- packages/kernel/src/server.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'packages/kernel/src/server.cpp') diff --git a/packages/kernel/src/server.cpp b/packages/kernel/src/server.cpp index b302c68..95631df 100644 --- a/packages/kernel/src/server.cpp +++ b/packages/kernel/src/server.cpp @@ -89,6 +89,14 @@ auto Server::ui_pixel(int x, int y) const -> unsigned int { return impl_->substrate != nullptr ? impl_->substrate->surface_pixel(x, y) : 0U; } +auto Server::ui_element_count(const char* tag) const -> int { + return impl_->substrate != nullptr ? impl_->substrate->element_count(tag) : 0; +} + +auto Server::ui_click_element(const char* tag, int index) -> bool { + return impl_->substrate != nullptr && impl_->substrate->click_element(tag, index); +} + void Server::ui_set_touch_override(UiTouchOverride ov) { if (impl_->substrate == nullptr) { return; -- cgit v1.2.3