diff --git a/src/private/Frame.cpp b/src/private/Frame.cpp index 4025fa4f..b3758600 100644 --- a/src/private/Frame.cpp +++ b/src/private/Frame.cpp @@ -111,8 +111,11 @@ void Frame::onDockWidgetTitleChanged() updateTitleAndIcon(); if (!m_inCtor) { // don't call pure virtual in ctor - if (auto dw = qobject_cast(sender())) - renameTab(indexOfDockWidget(dw), dw->title()); + if (auto dw = qobject_cast(sender())) { + int index = indexOfDockWidget(dw); + renameTab(index, dw->title()); + changeTabIcon(index, dw->icon(DockWidgetBase::IconPlace::TabBar)); + } } } diff --git a/src/private/Frame_p.h b/src/private/Frame_p.h index f099816a..df9ea5a5 100644 --- a/src/private/Frame_p.h +++ b/src/private/Frame_p.h @@ -294,6 +294,7 @@ protected Q_SLOTS: protected: virtual void renameTab(int index, const QString &) = 0; + virtual void changeTabIcon(int index, const QIcon &) = 0; /** * @brief Returns the minimum size of the dock widgets. diff --git a/src/private/TabWidget_p.h b/src/private/TabWidget_p.h index 23430c7a..b66fa436 100644 --- a/src/private/TabWidget_p.h +++ b/src/private/TabWidget_p.h @@ -134,6 +134,9 @@ public: ///@brief rename's the tab's text virtual void renameTab(int index, const QString &) = 0; + ///@brief change the tab's icon + virtual void changeTabIcon(int index, const QIcon &) = 0; + /** * @brief Returns the current index */ diff --git a/src/private/quick/FrameQuick.cpp b/src/private/quick/FrameQuick.cpp index e8a8063e..aeca636e 100644 --- a/src/private/quick/FrameQuick.cpp +++ b/src/private/quick/FrameQuick.cpp @@ -155,6 +155,13 @@ void FrameQuick::renameTab(int, const QString &) // Not needed for QtQuick. Our model reacts to titleChanged() } + +void FrameQuick::changeTabIcon(int index, const QIcon &) +{ + Q_UNUSED(index); + qDebug() << Q_FUNC_INFO << "Not implemented"; +} + void FrameQuick::setStackLayout(QQuickItem *stackLayout) { if (m_stackLayout || !stackLayout) { diff --git a/src/private/quick/FrameQuick_p.h b/src/private/quick/FrameQuick_p.h index 8193b3d6..b7217129 100644 --- a/src/private/quick/FrameQuick_p.h +++ b/src/private/quick/FrameQuick_p.h @@ -61,6 +61,8 @@ protected: DockWidgetBase *dockWidgetAt_impl(int index) const override; DockWidgetBase *currentDockWidget_impl() const override; void renameTab(int index, const QString &) override; + void changeTabIcon(int index, const QIcon &) override; + Q_INVOKABLE void setStackLayout(QQuickItem *); int nonContentsHeight() const override; diff --git a/src/private/quick/TabWidgetQuick.cpp b/src/private/quick/TabWidgetQuick.cpp index c6482cc7..6ba028d4 100644 --- a/src/private/quick/TabWidgetQuick.cpp +++ b/src/private/quick/TabWidgetQuick.cpp @@ -88,6 +88,12 @@ void TabWidgetQuick::renameTab(int index, const QString &) qWarning() << Q_FUNC_INFO << "Not implemented"; } +void TabWidgetQuick::changeTabIcon(int index, const QIcon &) +{ + Q_UNUSED(index); + qWarning() << Q_FUNC_INFO << "Not implemented"; +} + DockWidgetBase *TabWidgetQuick::dockwidgetAt(int index) const { return m_dockWidgetModel->dockWidgetAt(index); diff --git a/src/private/quick/TabWidgetQuick_p.h b/src/private/quick/TabWidgetQuick_p.h index daa47095..ae27bca4 100644 --- a/src/private/quick/TabWidgetQuick_p.h +++ b/src/private/quick/TabWidgetQuick_p.h @@ -66,6 +66,7 @@ protected: bool isPositionDraggable(QPoint p) const override; void setTabBarAutoHide(bool) override; void renameTab(int index, const QString &) override; + void changeTabIcon(int index, const QIcon &) override; private: Q_DISABLE_COPY(TabWidgetQuick) diff --git a/src/private/widgets/FrameWidget.cpp b/src/private/widgets/FrameWidget.cpp index afa6c4f4..88670ebe 100644 --- a/src/private/widgets/FrameWidget.cpp +++ b/src/private/widgets/FrameWidget.cpp @@ -169,6 +169,10 @@ void FrameWidget::renameTab(int index, const QString &text) m_tabWidget->renameTab(index, text); } +void FrameWidget::changeTabIcon(int index, const QIcon &icon) +{ + m_tabWidget->changeTabIcon(index, icon); +} int KDDockWidgets::FrameWidget::nonContentsHeight() const { diff --git a/src/private/widgets/FrameWidget_p.h b/src/private/widgets/FrameWidget_p.h index 1f338a80..b196d0ab 100644 --- a/src/private/widgets/FrameWidget_p.h +++ b/src/private/widgets/FrameWidget_p.h @@ -50,6 +50,7 @@ protected: DockWidgetBase *dockWidgetAt_impl(int index) const override; QRect dragRect() const override; void renameTab(int index, const QString &) override; + void changeTabIcon(int index, const QIcon &) override; int nonContentsHeight() const override; private: friend class ::TestDocks; diff --git a/src/private/widgets/TabWidgetWidget.cpp b/src/private/widgets/TabWidgetWidget.cpp index 399a5bab..a67bcd3b 100644 --- a/src/private/widgets/TabWidgetWidget.cpp +++ b/src/private/widgets/TabWidgetWidget.cpp @@ -135,6 +135,11 @@ void TabWidgetWidget::renameTab(int index, const QString &text) setTabText(index, text); } +void TabWidgetWidget::changeTabIcon(int index, const QIcon &icon) +{ + setTabIcon(index, icon); +} + DockWidgetBase *TabWidgetWidget::dockwidgetAt(int index) const { return qobject_cast(widget(index)); diff --git a/src/private/widgets/TabWidgetWidget_p.h b/src/private/widgets/TabWidgetWidget_p.h index d9e7e34d..7642f627 100644 --- a/src/private/widgets/TabWidgetWidget_p.h +++ b/src/private/widgets/TabWidgetWidget_p.h @@ -55,6 +55,7 @@ protected: bool insertDockWidget(int index, DockWidgetBase *, const QIcon&, const QString &title) override; void setTabBarAutoHide(bool) override; void renameTab(int index, const QString &) override; + void changeTabIcon(int index, const QIcon &) override; DockWidgetBase *dockwidgetAt(int index) const override; int currentIndex() const override;