diff --git a/src/controllers/TitleBar.cpp b/src/controllers/TitleBar.cpp index 6059e73b..4b4f05d2 100644 --- a/src/controllers/TitleBar.cpp +++ b/src/controllers/TitleBar.cpp @@ -55,9 +55,7 @@ TitleBar::TitleBar(FloatingWindow *parent) { init(); connect(m_floatingWindow, &FloatingWindow::numFramesChanged, this, &TitleBar::updateButtons); - connect(m_floatingWindow, &FloatingWindow::windowStateChanged, this, [this] { - dynamic_cast(view())->updateMaximizeButton(); - }); + connect(m_floatingWindow, &FloatingWindow::windowStateChanged, this, &TitleBar::updateMaximizeButton); connect(m_floatingWindow, &FloatingWindow::activatedChanged, this, &TitleBar::isFocusedChanged); } @@ -259,6 +257,22 @@ void TitleBar::updateAutoHideButton() Q_EMIT autoHideButtonChanged(visible, enabled, type); } +void TitleBar::updateMaximizeButton() +{ + bool visible = false; + bool enabled = true; + TitleBarButtonType type = TitleBarButtonType::Maximize; + + if (auto fw = floatingWindow()) { + type = fw->isMaximizedOverride() ? TitleBarButtonType::Normal + : TitleBarButtonType::Maximize; + + visible = supportsMaximizeButton(); + } + + Q_EMIT maximizeButtonChanged(visible, enabled, type); +} + void TitleBar::updateCloseButton() { diff --git a/src/controllers/TitleBar.h b/src/controllers/TitleBar.h index 67fa4a86..c1cb1838 100644 --- a/src/controllers/TitleBar.h +++ b/src/controllers/TitleBar.h @@ -126,17 +126,17 @@ Q_SIGNALS: /// @brief Emitted to tell the views to update their minimize button void minimizeButtonChanged(bool visible, bool enabled); -protected: - virtual void updateMaximizeButton() - { - } + /// @brief Emitted to tell the views to update their maximize button + void maximizeButtonChanged(bool visible, bool enabled, TitleBarButtonType); +protected: bool isOverlayed() const; private: friend class ::TestDocks; void updateAutoHideButton(); + void updateMaximizeButton(); void updateFloatButton(); void updateCloseButton(); diff --git a/src/qtquick/views/TitleBar_qtquick.cpp b/src/qtquick/views/TitleBar_qtquick.cpp index 3c432572..270a49e1 100644 --- a/src/qtquick/views/TitleBar_qtquick.cpp +++ b/src/qtquick/views/TitleBar_qtquick.cpp @@ -108,11 +108,6 @@ QQuickItem *TitleBar_qtquick::closeButton() const : nullptr; } -void TitleBar_qtquick::updateMaximizeButton() -{ - qFatal("Not implemented"); -} - bool TitleBar_qtquick::isFocused() const { return m_titleBar->isFocused(); diff --git a/src/qtquick/views/TitleBar_qtquick.h b/src/qtquick/views/TitleBar_qtquick.h index 587ae316..253c65ab 100644 --- a/src/qtquick/views/TitleBar_qtquick.h +++ b/src/qtquick/views/TitleBar_qtquick.h @@ -54,7 +54,6 @@ protected: QQuickItem *titleBarQmlItem() const; QQuickItem *titleBarMouseArea() const; void setTitleBarQmlItem(QQuickItem *); - void updateMaximizeButton() override; // QML interface bool isFocused() const; diff --git a/src/qtwidgets/views/TitleBar_qtwidgets.cpp b/src/qtwidgets/views/TitleBar_qtwidgets.cpp index a4add29c..679ac6d9 100644 --- a/src/qtwidgets/views/TitleBar_qtwidgets.cpp +++ b/src/qtwidgets/views/TitleBar_qtwidgets.cpp @@ -136,8 +136,6 @@ void TitleBar_qtwidgets::init() connect(m_minimizeButton, &QAbstractButton::clicked, m_titleBar, &Controllers::TitleBar::onMinimizeClicked); connect(m_autoHideButton, &QAbstractButton::clicked, m_titleBar, &Controllers::TitleBar::onAutoHideClicked); - updateMaximizeButton(); - m_minimizeButton->setToolTip(tr("Minimize")); m_closeButton->setToolTip(tr("Close")); @@ -210,18 +208,14 @@ void TitleBar_qtwidgets::updateAutoHideButton(bool visible, bool enabled, TitleB m_autoHideButton->setEnabled(enabled); } -void TitleBar_qtwidgets::updateMaximizeButton() +void TitleBar_qtwidgets::updateMaximizeButton(bool visible, bool enabled, TitleBarButtonType type) { - if (auto fw = m_titleBar->floatingWindow()) { + m_maximizeButton->setEnabled(enabled); + m_maximizeButton->setVisible(visible); + if (visible) { auto factory = Config::self().viewFactory(); - const TitleBarButtonType iconType = fw->isMaximizedOverride() ? TitleBarButtonType::Normal - : TitleBarButtonType::Maximize; - m_maximizeButton->setIcon(factory->iconForButtonType(iconType, devicePixelRatioF())); - - m_maximizeButton->setVisible(m_titleBar->supportsMaximizeButton()); - m_maximizeButton->setToolTip(fw->isMaximizedOverride() ? tr("Restore") : tr("Maximize")); - } else { - m_maximizeButton->setVisible(false); + m_maximizeButton->setIcon(factory->iconForButtonType(type, devicePixelRatioF())); + m_maximizeButton->setToolTip(type == TitleBarButtonType::Normal ? tr("Restore") : tr("Maximize")); } } diff --git a/src/qtwidgets/views/TitleBar_qtwidgets.h b/src/qtwidgets/views/TitleBar_qtwidgets.h index 969464da..aaec295b 100644 --- a/src/qtwidgets/views/TitleBar_qtwidgets.h +++ b/src/qtwidgets/views/TitleBar_qtwidgets.h @@ -48,9 +48,7 @@ protected: QRect iconRect() const; void updateMargins(); - // TODOm3: - void updateMaximizeButton() override; - + void updateMaximizeButton(bool visible, bool enabled, TitleBarButtonType); void updateAutoHideButton(bool visible, bool enabled, TitleBarButtonType); void updateMinimizeButton(bool visible, bool enabled); diff --git a/src/views/TitleBarViewInterface.h b/src/views/TitleBarViewInterface.h index 50810037..acba3e62 100644 --- a/src/views/TitleBarViewInterface.h +++ b/src/views/TitleBarViewInterface.h @@ -27,7 +27,6 @@ class DOCKS_EXPORT TitleBarViewInterface public: explicit TitleBarViewInterface(Controllers::TitleBar *); virtual ~TitleBarViewInterface(); - virtual void updateMaximizeButton() = 0; #ifdef DOCKS_DEVELOPER_MODE virtual bool isFloatButtonVisible() const = 0; virtual bool isCloseButtonVisible() const = 0;