From 7ba22b7714db56fd86d06b36f6c8b0422b7864c6 Mon Sep 17 00:00:00 2001 From: Luke Street Date: Mon, 4 May 2026 11:14:40 -0600 Subject: [PATCH] UI: Refocus top document automatically --- src/dusk/ui/popup.cpp | 3 --- src/dusk/ui/ui.cpp | 12 ++++++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) 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(); }