Refrersh the menubar when one of the property get changed

Install a PropertyTracker to update the shadow tree if something changes
This commit is contained in:
Olivier Goffart 2025-01-30 15:41:01 +01:00
parent a3d46a9e88
commit 094ff8f56b
5 changed files with 76 additions and 52 deletions

View file

@ -1269,11 +1269,13 @@ inline void setup_popup_menu_from_menu_item_tree(
using cbindgen_private::MenuVTable;
auto shared = std::make_shared<vtable::VBox<MenuVTable>>(nullptr, nullptr);
cbindgen_private::slint_menus_create_wrapper(&menu_item_tree, &*shared);
SharedVector<MenuEntry> entries_sv;
vtable::VRefMut<MenuVTable> ref { shared->vtable, shared->instance };
shared->vtable->sub_menu(ref, nullptr, &entries_sv);
std::vector<MenuEntry> entries_vec(entries_sv.begin(), entries_sv.end());
entries.set(std::make_shared<VectorModel<MenuEntry>>(std::move(entries_vec)));
entries.set_binding([shared] {
vtable::VRefMut<MenuVTable> ref { shared->vtable, shared->instance };
SharedVector<MenuEntry> entries_sv;
shared->vtable->sub_menu(ref, nullptr, &entries_sv);
std::vector<MenuEntry> entries_vec(entries_sv.begin(), entries_sv.end());
return std::make_shared<VectorModel<MenuEntry>>(std::move(entries_vec));
});
sub_menu.set_handler([shared](const auto &entry) {
vtable::VRefMut<MenuVTable> ref { shared->vtable, shared->instance };
SharedVector<MenuEntry> entries_sv;