Skip to content

Commit 703a9b3

Browse files
authored
Update the state of close button on titlebar and tabbar when CDockWidget::DockWidgetClosable changed. (#240)
1 parent 0eca1b0 commit 703a9b3

File tree

4 files changed

+27
-5
lines changed

4 files changed

+27
-5
lines changed

src/DockAreaWidget.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -971,6 +971,16 @@ QSize CDockAreaWidget::minimumSizeHint() const
971971
{
972972
return d->MinSizeHint.isValid() ? d->MinSizeHint : Super::minimumSizeHint();
973973
}
974+
975+
976+
//============================================================================
977+
void CDockAreaWidget::onDockWidgetFeaturesChanged()
978+
{
979+
if (d->TitleBar)
980+
d->updateTitleBarButtonStates();
981+
}
982+
983+
974984
} // namespace ads
975985

976986
//---------------------------------------------------------------------------

src/DockAreaWidget.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ class ADS_EXPORT CDockAreaWidget : public QFrame
6565
friend class CDockWidget;
6666
friend struct DockManagerPrivate;
6767
friend class CDockManager;
68+
void onDockWidgetFeaturesChanged();
6869

6970
private slots:
7071
void onTabCloseRequested(int Index);

src/DockWidget.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,8 @@ void CDockWidget::setFeatures(DockWidgetFeatures features)
340340
d->Features = features;
341341
emit featuresChanged(d->Features);
342342
d->TabWidget->onDockWidgetFeaturesChanged();
343+
if(CDockAreaWidget* DockArea = dockAreaWidget())
344+
DockArea->onDockWidgetFeaturesChanged();
343345
}
344346

345347

src/DockWidgetTab.cpp

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,18 @@ struct DockWidgetTabPrivate
134134
}
135135
}
136136

137+
/**
138+
* Update the close button visibility from current feature/config
139+
*/
140+
void updateCloseButtonVisibility(bool active)
141+
{
142+
bool DockWidgetClosable = DockWidget->features().testFlag(CDockWidget::DockWidgetClosable);
143+
bool ActiveTabHasCloseButton = testConfigFlag(CDockManager::ActiveTabHasCloseButton);
144+
bool AllTabsHaveCloseButton = testConfigFlag(CDockManager::AllTabsHaveCloseButton);
145+
bool TabHasCloseButton = (ActiveTabHasCloseButton && active) | AllTabsHaveCloseButton;
146+
CloseButton->setVisible(DockWidgetClosable && TabHasCloseButton);
147+
}
148+
137149
template <typename T>
138150
IFloatingWidget* createFloatingWidget(T* Widget, bool OpaqueUndocking)
139151
{
@@ -461,11 +473,7 @@ bool CDockWidgetTab::isActiveTab() const
461473
//============================================================================
462474
void CDockWidgetTab::setActiveTab(bool active)
463475
{
464-
bool DockWidgetClosable = d->DockWidget->features().testFlag(CDockWidget::DockWidgetClosable);
465-
bool ActiveTabHasCloseButton = d->testConfigFlag(CDockManager::ActiveTabHasCloseButton);
466-
bool AllTabsHaveCloseButton = d->testConfigFlag(CDockManager::AllTabsHaveCloseButton);
467-
bool TabHasCloseButton = (ActiveTabHasCloseButton && active) | AllTabsHaveCloseButton;
468-
d->CloseButton->setVisible(DockWidgetClosable && TabHasCloseButton);
476+
d->updateCloseButtonVisibility(active);
469477

470478
// Focus related stuff
471479
if (CDockManager::testConfigFlag(CDockManager::FocusHighlighting) && !d->DockWidget->dockManager()->isRestoringState())
@@ -653,6 +661,7 @@ void CDockWidgetTab::onDockWidgetFeaturesChanged()
653661
SizePolicy.setRetainSizeWhenHidden(Features.testFlag(CDockWidget::DockWidgetClosable)
654662
&& d->testConfigFlag(CDockManager::RetainTabSizeWhenCloseButtonHidden));
655663
d->CloseButton->setSizePolicy(SizePolicy);
664+
d->updateCloseButtonVisibility(isActiveTab());
656665
}
657666

658667

0 commit comments

Comments
 (0)