diff --git a/src/DirectoryView.cpp b/src/DirectoryView.cpp index a092287..25417ad 100644 --- a/src/DirectoryView.cpp +++ b/src/DirectoryView.cpp @@ -4,12 +4,15 @@ DirectoryView::~DirectoryView() {} void DirectoryView::update() { - window()->start_batch(); - target()->clear_children(); - for (const auto &entry : std::filesystem::directory_iterator(m_current_path)) { - auto button = m_target->add(entry.path().filename(), this); - } - window()->end_batch(); + // microtasks defer execution of the callback until all external events are processed. + // if they're not used here and update() is called in a click or hover handler, + // chaos will ensue, as the widget tree will be updated during event propagation + window()->queue_microtask([this]() { + target()->clear_children(); + for (const auto &entry : std::filesystem::directory_iterator(m_current_path)) { + auto button = m_target->add(entry.path().filename(), this); + } + }); } void DirectoryView::navigate(std::string path) {