diff --git a/src/private/TitleBar.cpp b/src/private/TitleBar.cpp index 6a33f7db..181baa0e 100644 --- a/src/private/TitleBar.cpp +++ b/src/private/TitleBar.cpp @@ -69,6 +69,7 @@ void TitleBar::init() // repaint update(); }); + updateCloseButton(); } TitleBar::~TitleBar() @@ -89,6 +90,16 @@ bool TitleBar::onDoubleClicked() return false; } +void TitleBar::updateCloseButton() +{ + + const bool anyNonClosable = frame() ? frame()->anyNonClosable() + : (floatingWindow() ? floatingWindow()->anyNonClosable() + : false); + + setCloseButtonEnabled(!anyNonClosable); +} + void TitleBar::toggleMaximized() { if (!m_floatingWindow) @@ -116,6 +127,14 @@ bool TitleBar::isOverlayed() const return m_frame && m_frame->isOverlayed(); } +void TitleBar::setCloseButtonEnabled(bool enabled) +{ + if (enabled != m_closeButtonEnabled) { + m_closeButtonEnabled = enabled; + Q_EMIT closeButtonEnabledChanged(enabled); + } +} + void TitleBar::setTitle(const QString &title) { if (title != m_title) { @@ -362,3 +381,8 @@ void TitleBar::onAutoHideClicked() } } } + +bool TitleBar::closeButtonEnabled() const +{ + return m_closeButtonEnabled; +} diff --git a/src/private/TitleBar_p.h b/src/private/TitleBar_p.h index aea140b3..3a26a0b1 100644 --- a/src/private/TitleBar_p.h +++ b/src/private/TitleBar_p.h @@ -41,6 +41,7 @@ class DOCKS_EXPORT TitleBar : public QWidgetAdapter Q_OBJECT Q_PROPERTY(QString title READ title NOTIFY titleChanged) Q_PROPERTY(bool hasIcon READ hasIcon NOTIFY iconChanged) + Q_PROPERTY(bool closeButtonEnabled READ closeButtonEnabled WRITE setCloseButtonEnabled NOTIFY closeButtonEnabledChanged) public: typedef QVector List; @@ -95,12 +96,14 @@ public: ///@brief getter for m_floatingWindow FloatingWindow *floatingWindow() const { return m_floatingWindow; } - virtual void updateCloseButton() {} + /// @brief updates the close button enabled state + void updateCloseButton(); Q_SIGNALS: void titleChanged(); void iconChanged(); void isFocusedChanged(); + void closeButtonEnabledChanged(bool); protected: @@ -111,6 +114,8 @@ protected: Q_INVOKABLE void toggleMaximized(); Q_INVOKABLE void onAutoHideClicked(); + bool closeButtonEnabled() const; + virtual void updateFloatButton() {} virtual void updateMaximizeButton() {} @@ -124,11 +129,10 @@ protected: virtual bool isFloatButtonEnabled() const { return true; } void focusInEvent(QFocusEvent *event) override; - bool isOverlayed() const; - private: friend class ::TestDocks; + void setCloseButtonEnabled(bool); void init(); @@ -139,6 +143,7 @@ private: Frame *const m_frame; FloatingWindow *const m_floatingWindow; const bool m_supportsAutoHide; + bool m_closeButtonEnabled = true; }; diff --git a/src/private/widgets/TitleBarWidget.cpp b/src/private/widgets/TitleBarWidget.cpp index a91743bc..8fa8d96a 100644 --- a/src/private/widgets/TitleBarWidget.cpp +++ b/src/private/widgets/TitleBarWidget.cpp @@ -72,7 +72,6 @@ void TitleBarWidget::init() connect(m_minimizeButton, &QAbstractButton::clicked, this, &TitleBarWidget::onMinimizeClicked); connect(m_autoHideButton, &QAbstractButton::clicked, this, &TitleBarWidget::onAutoHideClicked); - updateCloseButton(); updateFloatButton(); updateMaximizeButton(); updateMinimizeButton(); @@ -93,6 +92,9 @@ void TitleBarWidget::init() } update(); }); + + m_closeButton->setEnabled(closeButtonEnabled()); + connect(this, &TitleBar::closeButtonEnabledChanged, m_closeButton, &QAbstractButton::setEnabled); } QRect TitleBarWidget::iconRect() const @@ -154,16 +156,6 @@ void TitleBarWidget::updateFloatButton() m_floatButton->setVisible(supportsFloatingButton()); } -void TitleBarWidget::updateCloseButton() -{ - const bool anyNonClosable = frame() ? frame()->anyNonClosable() - : (floatingWindow() ? floatingWindow()->anyNonClosable() - : false); - - qCDebug(closebutton) << Q_FUNC_INFO << "enabled=" << !anyNonClosable; - m_closeButton->setEnabled(!anyNonClosable); -} - void TitleBarWidget::updateMinimizeButton() { m_minimizeButton->setVisible(supportsMinimizeButton()); diff --git a/src/private/widgets/TitleBarWidget_p.h b/src/private/widgets/TitleBarWidget_p.h index 812cd0fd..56c0adce 100644 --- a/src/private/widgets/TitleBarWidget_p.h +++ b/src/private/widgets/TitleBarWidget_p.h @@ -47,7 +47,6 @@ protected: void paintEvent(QPaintEvent *) override; void mouseDoubleClickEvent(QMouseEvent *) override; void updateFloatButton() override; - void updateCloseButton() override; void updateMaximizeButton() override; void updateMinimizeButton() override; void updateAutoHideButton() override;