diff --git a/src/dusk/ui/popup.cpp b/src/dusk/ui/popup.cpp index 793dcf9f1c..41e026eef4 100644 --- a/src/dusk/ui/popup.cpp +++ b/src/dusk/ui/popup.cpp @@ -66,9 +66,6 @@ Popup::Popup() : Document(kDocumentSource), mRoot(mDocument->GetElementById("pop Document::hide(mPendingClose); } }); - - // We start hidden, but want focus for an open nav event - mDocument->Focus(); } void Popup::show() { diff --git a/src/dusk/ui/ui.cpp b/src/dusk/ui/ui.cpp index 87ee6c4b5d..8d9d827333 100644 --- a/src/dusk/ui/ui.cpp +++ b/src/dusk/ui/ui.cpp @@ -87,9 +87,21 @@ void update() noexcept { for (const auto& doc : sDocuments) { doc->update(); } + + // Remove closed documents const auto [first, last] = std::ranges::remove_if(sDocuments, [](const auto& doc) { return doc->closed(); }); sDocuments.erase(first, last); + + // If no documents have focus, explicitly focus the top one + if (auto* context = aurora::rmlui::get_context(); + context != nullptr && context->GetFocusElement() == nullptr) + { + if (auto* top = top_document()) { + top->focus(); + } + } + sync_input_block(); }