Skip to content

Commit f90f0b0

Browse files
Properly implemented focusedDockWidgetChanged() signal
1 parent d360b4c commit f90f0b0

File tree

3 files changed

+56
-2
lines changed

3 files changed

+56
-2
lines changed

src/DockManager.cpp

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -504,6 +504,7 @@ void DockManagerPrivate::updateDockWidgetFocus(CDockWidget* DockWidget)
504504
updateDockWidgetFocusStyle(FocusedDockWidget, false);
505505
}
506506

507+
CDockWidget* old = FocusedDockWidget;
507508
if (DockWidget != FocusedDockWidget)
508509
{
509510
std::cout << "!!!!!!!!!!!! focusedDockWidgetChanged " << (FocusedDockWidget ? FocusedDockWidget->objectName().toStdString() : "-")
@@ -554,6 +555,11 @@ void DockManagerPrivate::updateDockWidgetFocus(CDockWidget* DockWidget)
554555
updateFloatingWidgetFocusStyle(FloatingWidget, true);
555556
}
556557
#endif
558+
559+
if (old != DockWidget)
560+
{
561+
emit _this->focusedDockWidgetChanged(old, DockWidget);
562+
}
557563
}
558564

559565

@@ -720,6 +726,10 @@ bool CDockManager::restoreState(const QByteArray &state, int version)
720726
show();
721727
}
722728

729+
if (d->FocusedDockWidget)
730+
{
731+
updateDockWidgetFocusStyle(d->FocusedDockWidget, false);
732+
}
723733
return Result;
724734
}
725735

@@ -1019,6 +1029,10 @@ CIconProvider& CDockManager::iconProvider()
10191029
//===========================================================================
10201030
void CDockManager::onApplicationFocusChanged(QWidget* focusedOld, QWidget* focusedNow)
10211031
{
1032+
if (isRestoringState())
1033+
{
1034+
return;
1035+
}
10221036
std::cout << "CDockManager::onFocusChanged" << std::endl;
10231037
Q_UNUSED(focusedOld)
10241038
if (!focusedNow)
@@ -1060,6 +1074,11 @@ void CDockManager::onApplicationFocusChanged(QWidget* focusedOld, QWidget* focus
10601074
//===========================================================================
10611075
void CDockManager::onFocusedDockAreaViewToggled(bool Open)
10621076
{
1077+
if (isRestoringState())
1078+
{
1079+
return;
1080+
}
1081+
10631082
CDockAreaWidget* DockArea = qobject_cast<CDockAreaWidget*>(sender());
10641083
if (!DockArea || Open)
10651084
{
@@ -1079,6 +1098,10 @@ void CDockManager::onFocusedDockAreaViewToggled(bool Open)
10791098
//===========================================================================
10801099
void CDockManager::notifyWidgetOrAreaRelocation(QWidget* DroppedWidget)
10811100
{
1101+
if (isRestoringState())
1102+
{
1103+
return;
1104+
}
10821105
std::cout << "\n\nCDockManager::notifyWidgetDrop" << std::endl;
10831106
CDockWidget* DockWidget = qobject_cast<CDockWidget*>(DroppedWidget);
10841107
if (DockWidget)
@@ -1104,7 +1127,7 @@ void CDockManager::notifyWidgetOrAreaRelocation(QWidget* DroppedWidget)
11041127
void CDockManager::notifyFloatingWidgetDrop(CFloatingDockContainer* FloatingWidget)
11051128
{
11061129
std::cout << "\n\nCDockManager::notifyFloatingWidgetDrop" << std::endl;
1107-
if (!FloatingWidget)
1130+
if (!FloatingWidget || isRestoringState())
11081131
{
11091132
return;
11101133
}

src/DockManager.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -517,6 +517,13 @@ public slots:
517517
* docking system but it is not deleted yet.
518518
*/
519519
void dockWidgetRemoved(CDockWidget* DockWidget);
520+
521+
/**
522+
* This signal is emitted if the focused dock widget changed.
523+
* Both old and now can be nullptr.
524+
* The focused dock widget is the one that is highlighted in the GUI
525+
*/
526+
void focusedDockWidgetChanged(CDockWidget* old, CDockWidget* now);
520527
}; // class DockManager
521528
} // namespace ads
522529
//-----------------------------------------------------------------------------

src/DockWidgetTab.cpp

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -466,7 +466,31 @@ void CDockWidgetTab::setActiveTab(bool active)
466466
bool AllTabsHaveCloseButton = d->testConfigFlag(CDockManager::AllTabsHaveCloseButton);
467467
bool TabHasCloseButton = (ActiveTabHasCloseButton && active) | AllTabsHaveCloseButton;
468468
d->CloseButton->setVisible(DockWidgetClosable && TabHasCloseButton);
469-
if (d->IsActiveTab == active)
469+
470+
/*if (d->IsActiveTab == active)
471+
{
472+
return;
473+
}*/
474+
475+
if (CDockManager::configFlags().testFlag(CDockManager::FocusStyling) && !d->DockWidget->dockManager()->isRestoringState())
476+
{
477+
bool UpdateFocusStyle = false;
478+
if (active && !hasFocus())
479+
{
480+
setFocus(Qt::OtherFocusReason);
481+
UpdateFocusStyle = true;
482+
}
483+
484+
if (d->IsActiveTab == active)
485+
{
486+
if (UpdateFocusStyle)
487+
{
488+
updateStyle();
489+
}
490+
return;
491+
}
492+
}
493+
else if (d->IsActiveTab == active)
470494
{
471495
return;
472496
}

0 commit comments

Comments
 (0)