diff --git a/src/libs/advanceddockingsystem/dockfocuscontroller.cpp b/src/libs/advanceddockingsystem/dockfocuscontroller.cpp index ab665ea0ae7..a9fd274004c 100644 --- a/src/libs/advanceddockingsystem/dockfocuscontroller.cpp +++ b/src/libs/advanceddockingsystem/dockfocuscontroller.cpp @@ -158,24 +158,14 @@ void DockFocusControllerPrivate::updateDockWidgetFocus(DockWidget *dockWidget) emit m_dockManager->focusedDockWidgetChanged(old, dockWidget); } else { m_oldFocusedDockWidget = old; - QObject::connect(dockWidget, - &DockWidget::visibilityChanged, - q, - &DockFocusController::onDockWidgetVisibilityChanged); + QObject::connect(dockWidget, &DockWidget::visibilityChanged, q, + [this, dockWidget](bool visible) { + if (visible) + emit m_dockManager->focusedDockWidgetChanged(m_oldFocusedDockWidget, dockWidget); + }, Qt::SingleShotConnection); } } -void DockFocusController::onDockWidgetVisibilityChanged(bool visible) -{ - auto dockWidget = qobject_cast(sender()); - QObject::disconnect(dockWidget, - &DockWidget::visibilityChanged, - this, - &DockFocusController::onDockWidgetVisibilityChanged); - if (dockWidget && visible) - emit d->m_dockManager->focusedDockWidgetChanged(d->m_oldFocusedDockWidget, dockWidget); -} - DockFocusController::DockFocusController(DockManager *dockManager) : QObject(dockManager) , d(new DockFocusControllerPrivate(this)) diff --git a/src/libs/advanceddockingsystem/dockfocuscontroller.h b/src/libs/advanceddockingsystem/dockfocuscontroller.h index a9e11e13662..992dee27736 100644 --- a/src/libs/advanceddockingsystem/dockfocuscontroller.h +++ b/src/libs/advanceddockingsystem/dockfocuscontroller.h @@ -30,7 +30,6 @@ private: void onFocusWindowChanged(QWindow *focusWindow); void onFocusedDockAreaViewToggled(bool open); void onStateRestored(); - void onDockWidgetVisibilityChanged(bool visible); public: /**