From a80dc7789e21f36044aa319ef26c0536b529e91f Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 4 Aug 2023 11:14:03 +0300 Subject: [PATCH] ADS: Focus content widget when tab is clicked or dockwidget gets focus MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes: QDS-10396 Change-Id: Ic7d4a73ff535c0c0cb73e1e5bd636bec00a1336c Reviewed-by: Henning Gründl Reviewed-by: Mahmoud Badri --- src/libs/advanceddockingsystem/dockareatabbar.cpp | 8 ++++++++ src/libs/advanceddockingsystem/dockfocuscontroller.cpp | 9 +++++++++ 2 files changed, 17 insertions(+) diff --git a/src/libs/advanceddockingsystem/dockareatabbar.cpp b/src/libs/advanceddockingsystem/dockareatabbar.cpp index e1ac0c9b861..c7dab3c2297 100644 --- a/src/libs/advanceddockingsystem/dockareatabbar.cpp +++ b/src/libs/advanceddockingsystem/dockareatabbar.cpp @@ -112,6 +112,14 @@ void DockAreaTabBar::onTabClicked(DockWidgetTab *sourceTab) setCurrentIndex(index); emit tabBarClicked(index); + + // QDS: Focus the actual content widget on tab click + DockWidgetTab *tab = currentTab(); + if (tab && tab->dockWidget() && tab->dockWidget()->widget()) { + QMetaObject::invokeMethod(tab->dockWidget()->widget(), + QOverload<>::of(&QWidget::setFocus), + Qt::QueuedConnection); + } } void DockAreaTabBar::onTabCloseRequested(DockWidgetTab *sourceTab) diff --git a/src/libs/advanceddockingsystem/dockfocuscontroller.cpp b/src/libs/advanceddockingsystem/dockfocuscontroller.cpp index b35963c6db2..ab665ea0ae7 100644 --- a/src/libs/advanceddockingsystem/dockfocuscontroller.cpp +++ b/src/libs/advanceddockingsystem/dockfocuscontroller.cpp @@ -231,6 +231,9 @@ void DockFocusController::onApplicationFocusChanged(QWidget *focusedOld, QWidget return; DockWidget *dockWidget = qobject_cast(focusedNow); + + bool focusActual = dockWidget && dockWidget->widget(); + if (!dockWidget) dockWidget = internal::findParent(focusedNow); @@ -243,6 +246,12 @@ void DockFocusController::onApplicationFocusChanged(QWidget *focusedOld, QWidget #endif d->updateDockWidgetFocus(dockWidget); + + if (focusActual) { + // QDS: Focus the actual content widget when dockWidget gets focus + QMetaObject::invokeMethod(dockWidget->widget(), QOverload<>::of(&QWidget::setFocus), + Qt::QueuedConnection); + } } void DockFocusController::setDockWidgetTabFocused(DockWidgetTab *tab)