diff --git a/src/framework/uicomponents/view/popupview.cpp b/src/framework/uicomponents/view/popupview.cpp index c28f7111c33c3..918e91f7f5eac 100644 --- a/src/framework/uicomponents/view/popupview.cpp +++ b/src/framework/uicomponents/view/popupview.cpp @@ -150,6 +150,17 @@ void PopupView::init() } }); + navigationController()->navigationChanged().onNotify(this, [this]() { + ui::INavigationPanel* navigationPanel = navigationController()->activePanel(); + if (!navigationPanel) { + return; + } + + if (navigationPanel->window() == m_window->qWindow() && !m_window->hasActiveFocus()) { + m_window->forceActiveFocus(); + } + }); + emit windowChanged(); } diff --git a/src/framework/uicomponents/view/popupview.h b/src/framework/uicomponents/view/popupview.h index a2973c7d3598a..8ae8254dcc239 100644 --- a/src/framework/uicomponents/view/popupview.h +++ b/src/framework/uicomponents/view/popupview.h @@ -93,7 +93,7 @@ class PopupView : public QObject, public QQmlParserStatus, public Injectable, pu public: Inject mainWindow = { this }; Inject uiConfiguration = { this }; - Inject navigationController= { this }; + Inject navigationController = { this }; public: diff --git a/src/framework/uicomponents/view/popupwindow/ipopupwindow.h b/src/framework/uicomponents/view/popupwindow/ipopupwindow.h index d5dddc2fb9b71..a92a4e3f8f448 100644 --- a/src/framework/uicomponents/view/popupwindow/ipopupwindow.h +++ b/src/framework/uicomponents/view/popupwindow/ipopupwindow.h @@ -61,6 +61,7 @@ class IPopupWindow : public QObject virtual void setPosition(const QPoint& position) const = 0; + virtual bool hasActiveFocus() const = 0; virtual void forceActiveFocus() = 0; virtual void setOnHidden(const std::function& callback) = 0; diff --git a/src/framework/uicomponents/view/popupwindow/popupwindow_qquickview.cpp b/src/framework/uicomponents/view/popupwindow/popupwindow_qquickview.cpp index 8c9c4f6bbb888..f30ce60a3ed5c 100644 --- a/src/framework/uicomponents/view/popupwindow/popupwindow_qquickview.cpp +++ b/src/framework/uicomponents/view/popupwindow/popupwindow_qquickview.cpp @@ -247,6 +247,11 @@ void PopupWindow_QQuickView::setPosition(const QPoint& position) const m_view->setPosition(position); } +bool PopupWindow_QQuickView::hasActiveFocus() const +{ + return m_view && m_view->activeFocusItem() != nullptr; +} + void PopupWindow_QQuickView::setOnHidden(const std::function& callback) { m_onHidden = callback; diff --git a/src/framework/uicomponents/view/popupwindow/popupwindow_qquickview.h b/src/framework/uicomponents/view/popupwindow/popupwindow_qquickview.h index 08374423421da..91bf30637be9b 100644 --- a/src/framework/uicomponents/view/popupwindow/popupwindow_qquickview.h +++ b/src/framework/uicomponents/view/popupwindow/popupwindow_qquickview.h @@ -68,6 +68,7 @@ class PopupWindow_QQuickView : public IPopupWindow, public muse::Injectable, pub void setPosition(const QPoint& position) const override; + bool hasActiveFocus() const override; void forceActiveFocus() override; void setOnHidden(const std::function& callback) override;