From 3ac46bc8dc466c584d7c218c7acbc00e8a87fd65 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Thu, 1 Aug 2024 22:24:05 +0300 Subject: [PATCH] Make sure subscribed-to 'children' reactive values stay alive in ui::component_factory_base --- libs/ui/include/psemek/ui/impl/component_factory_base.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libs/ui/include/psemek/ui/impl/component_factory_base.hpp b/libs/ui/include/psemek/ui/impl/component_factory_base.hpp index a60c60bb..60669a86 100644 --- a/libs/ui/include/psemek/ui/impl/component_factory_base.hpp +++ b/libs/ui/include/psemek/ui/impl/component_factory_base.hpp @@ -85,7 +85,7 @@ namespace psemek::ui::impl impl->release_child_token(); if (typed_value.child) { - impl->set_child_token(typed_value.child.subscribe([this, impl = impl.get(), &state, &delayed_executor, request_reshape](std::any const & child){ + impl->set_child_token(typed_value.child.subscribe([this, impl = impl.get(), &state, &delayed_executor, request_reshape, holder = typed_value.child](std::any const & child){ delayed_executor.post([this, impl, &state, &delayed_executor, request_reshape, child]{ impl->set_child(reconciliate(impl->release_child(), child, state, delayed_executor, request_reshape)); request_reshape(); @@ -101,7 +101,7 @@ namespace psemek::ui::impl { if (typed_value.children) { - impl->set_children_token(typed_value.children.subscribe([this, impl = impl.get(), &state, &delayed_executor, request_reshape](std::vector const & children_values){ + impl->set_children_token(typed_value.children.subscribe([this, impl = impl.get(), &state, &delayed_executor, request_reshape, holder = typed_value.children](std::vector const & children_values){ delayed_executor.post([this, impl, &state, &delayed_executor, request_reshape, children_values]{ impl->release_child_tokens(); @@ -142,7 +142,7 @@ namespace psemek::ui::impl { if (children_values[i].element) { - child_tokens[i] = children_values[i].element.subscribe([this, impl, &state, &delayed_executor, request_reshape, i](std::any const & value){ + child_tokens[i] = children_values[i].element.subscribe([this, impl, &state, &delayed_executor, request_reshape, i, holder = children_values[i].element](std::any const & value){ delayed_executor.post([this, impl, &state, &delayed_executor, request_reshape, i, value]{ auto children = impl->release_children(); children[i] = reconciliate(std::move(children[i]), value, state, delayed_executor, request_reshape);