@@ -38,6 +38,7 @@ struct DockFocusControllerPrivate
3838 CDockFocusController *_this;
3939 QPointer<CDockWidget> FocusedDockWidget = nullptr ;
4040 QPointer<CDockAreaWidget> FocusedArea = nullptr ;
41+ CDockWidget* OldFocusedDockWidget = nullptr ;
4142#ifdef Q_OS_LINUX
4243 QPointer<CFloatingDockContainer> FloatingWidget = nullptr ;
4344#endif
@@ -159,14 +160,40 @@ void DockFocusControllerPrivate::updateDockWidgetFocus(CDockWidget* DockWidget)
159160 }
160161#endif
161162
162- if (old != DockWidget)
163+ if (old == DockWidget)
164+ {
165+ return ;
166+ }
167+
168+ if (DockWidget->isVisible ())
163169 {
164170 emit DockManager->focusedDockWidgetChanged (old, DockWidget);
165171 }
172+ else
173+ {
174+ OldFocusedDockWidget = old;
175+ QObject::connect (DockWidget, SIGNAL (visibilityChanged (bool )), _this, SLOT (onDockWidgetVisibilityChanged (bool )));
176+ }
166177}
167178
168179
169180
181+ // ============================================================================
182+ void CDockFocusController::onDockWidgetVisibilityChanged (bool Visible)
183+ {
184+ auto Sender = sender ();
185+ auto DockWidget = qobject_cast<ads::CDockWidget*>(Sender);
186+ /* qDebug() << "sender: " << Sender->metaObject()->className();
187+ qDebug() << "onDockWidgetVisibilityChanged " << Sender->objectName() << " Visible " << Visible;*/
188+ disconnect (Sender, SIGNAL (visibilityChanged (bool )), this , SLOT (onDockWidgetVisibilityChanged (bool )));
189+ if (DockWidget && Visible)
190+ {
191+ // qDebug() << "emit d->DockManager->focusedDockWidgetChanged";
192+ emit d->DockManager ->focusedDockWidgetChanged (d->OldFocusedDockWidget , DockWidget);
193+ }
194+ }
195+
196+
170197// ============================================================================
171198CDockFocusController::CDockFocusController (CDockManager* DockManager) :
172199 Super (DockManager),
0 commit comments