diff --git a/.gitignore b/.gitignore index a1f02eec..0821bed3 100644 --- a/.gitignore +++ b/.gitignore @@ -33,4 +33,4 @@ cmake_install.cmake latex html fuzzer -bin/custom_titlebar +custom_titlebar diff --git a/src/DockWidgetBase.cpp b/src/DockWidgetBase.cpp index fedb4915..580754b9 100644 --- a/src/DockWidgetBase.cpp +++ b/src/DockWidgetBase.cpp @@ -262,7 +262,7 @@ DockWidgetBase::Options DockWidgetBase::options() const bool DockWidgetBase::isTabbed() const { if (TabWidget* tabWidget = d->parentTabWidget()) { - return frame()->alwaysShowsTabs() || tabWidget->count() > 1; + return frame()->alwaysShowsTabs() || tabWidget->numDockWidgets() > 1; } else { if (!isFloating()) qWarning() << "DockWidget::isTabbed() Couldn't find any tab widget."; @@ -273,7 +273,7 @@ bool DockWidgetBase::isTabbed() const bool DockWidgetBase::isCurrentTab() const { if (TabWidget* tabWidget = d->parentTabWidget()) { - return tabWidget->currentIndex() == tabWidget->indexOf(const_cast(this)); + return tabWidget->currentIndex() == tabWidget->indexOfDockWidget(const_cast(this)); } else { return true; } @@ -282,7 +282,7 @@ bool DockWidgetBase::isCurrentTab() const void DockWidgetBase::setAsCurrentTab() { if (TabWidget* tabWidget = d->parentTabWidget()) - tabWidget->setCurrentWidget(this); + tabWidget->setCurrentDockWidget(this); } void DockWidgetBase::setIcon(const QIcon &icon) @@ -302,12 +302,6 @@ void DockWidgetBase::forceClose() d->close(); } -QTabWidget *DockWidgetBase::tabWidget() const -{ - return frame() ? frame()->tabWidget() - : nullptr; -} - FloatingWindow *DockWidgetBase::morphIntoFloatingWindow() { qCDebug(creation) << "DockWidget::morphIntoFloatingWindow() this=" << this @@ -414,11 +408,8 @@ void DockWidgetBase::Private::onDockWidgetHidden() TabWidget *DockWidgetBase::Private::parentTabWidget() const { - QWidget *p= q->parentWidget(); - if (p && p->objectName() == QLatin1String("qt_tabwidget_stackedwidget")) { - if (auto tw = qobject_cast(p->parentWidget())) - return tw; - } + if (auto f = q->frame()) + return f->tabWidget(); return nullptr; } @@ -483,8 +474,7 @@ void DockWidgetBase::Private::maybeRestoreToPreviousPosition() int DockWidgetBase::Private::currentTabIndex() const { TabWidget *tabWidget = parentTabWidget(); - return tabWidget ? tabWidget->indexOf(q) - : 0; + return tabWidget ? tabWidget->indexOfDockWidget(q) : 0; } void DockWidgetBase::Private::saveTabIndex() diff --git a/src/DockWidgetBase.h b/src/DockWidgetBase.h index 9f4e5979..ea83bca1 100644 --- a/src/DockWidgetBase.h +++ b/src/DockWidgetBase.h @@ -35,7 +35,6 @@ #include class QAction; -class QTabWidget; namespace KDDockWidgets { @@ -45,8 +44,8 @@ class DragController; class Item; class LastPosition; class DockRegistry; -class TabWidget; class LayoutSaver; +class TabWidget; class TitleBar; /** @@ -193,15 +192,6 @@ public: */ void forceClose(); - /** - * @brief Returns the tab widget where this dock widget is in. - * - * It will be nullptr right after DockWidget() ctor, but will get set as soon as the DockWidget, - * gets added ao a MainWindow, or on the next event loop, where it's transformed into a - * FloatingWindow if floating. - */ - QTabWidget* tabWidget() const; - Q_SIGNALS: ///@brief signal emitted when the parent changed void parentChanged(); diff --git a/src/Frame.cpp b/src/Frame.cpp index c9c403bc..a0614089 100644 --- a/src/Frame.cpp +++ b/src/Frame.cpp @@ -37,6 +37,7 @@ #include "DockRegistry_p.h" #include "Config.h" +#include #include #define MARGIN_THRESHOLD 100 @@ -51,24 +52,10 @@ Frame::Frame(QWidget *parent, Options options) , m_titleBar(Config::self().frameWorkWidgetFactory()->createTitleBar(this)) , m_options(options) { - qDebug() << "Frame"; s_dbg_numFrames++; DockRegistry::self()->registerFrame(this); qCDebug(creation) << "Frame" << ((void*)this) << s_dbg_numFrames; - connect(m_tabWidget, &TabWidget::dockWidgetCountChanged, this, &Frame::onDockWidgetCountChanged); - connect(m_tabWidget, &TabWidget::dockWidgetCountChanged, this, &Frame::numDockWidgetsChanged); - - connect(m_tabWidget, &QTabWidget::currentChanged, this, [this] (int index) { - if (index != -1) { - if (auto dock = dockWidgetAt(index)) { - Q_EMIT currentDockWidgetChanged(dock); - } else { - qWarning() << "dockWidgetAt" << index << "returned nullptr" << this; - } - } - }); - connect(this, &Frame::currentDockWidgetChanged, this, &Frame::updateTitleAndIcon); m_tabWidget->setTabBarAutoHide(!alwaysShowsTabs()); @@ -104,7 +91,7 @@ void Frame::updateTitleAndIcon() void Frame::addWidget(DockWidgetBase *dockWidget) { - insertWidget(dockWidget, m_tabWidget->count()); // append + insertWidget(dockWidget, m_tabWidget->numDockWidgets()); // append } void Frame::addWidget(Frame *frame) @@ -168,6 +155,19 @@ void Frame::onDockWidgetCountChanged() if (!(m_options & Option_AlwaysShowsTabs)) Q_EMIT hasTabsVisibleChanged(); } + + Q_EMIT numDockWidgetsChanged(); +} + +void Frame::onCurrentTabChanged(int index) +{ + if (index != -1) { + if (auto dock = dockWidgetAt(index)) { + Q_EMIT currentDockWidgetChanged(dock); + } else { + qWarning() << "dockWidgetAt" << index << "returned nullptr" << this; + } + } } void Frame::updateTitleBarVisibility() @@ -292,12 +292,12 @@ int Frame::currentTabIndex() const void Frame::setCurrentTabIndex(int index) { - m_tabWidget->setCurrentIndex(index); + m_tabWidget->setCurrentDockWidget(index); } DockWidgetBase *Frame::currentDockWidget() const { - return qobject_cast(m_tabWidget->currentWidget()); + return m_tabWidget->dockwidgetAt(m_tabWidget->currentIndex()); } bool Frame::anyNonClosable() const @@ -366,7 +366,7 @@ int Frame::dbg_numFrames() void Frame::dumpDebug() { qDebug() << " Frame:" << (void*)this; - qDebug() << " layoutItem=" << m_layoutItem << "; num=" << m_tabWidget->count(); + qDebug() << " layoutItem=" << m_layoutItem << "; num=" << m_tabWidget->numDockWidgets(); for (auto dw : dockWidgets()) { qDebug() << " dockwidget=" << dw << "; dw->layoutItem=" << dw->lastPosition()->layoutItem(); dw->lastPosition()->dumpDebug(); @@ -395,7 +395,7 @@ bool Frame::hasTabsVisible() const DockWidgetBase *Frame::dockWidgetAt(int index) const { - return qobject_cast(m_tabWidget->widget(index)); + return qobject_cast(m_tabWidget->dockwidgetAt(index)); } void Frame::setDropArea(DropArea *dt) @@ -443,7 +443,7 @@ bool Frame::isInMainWindow() const int Frame::dockWidgetCount() const { - return m_tabWidget->count(); + return m_tabWidget->numDockWidgets(); } bool Frame::event(QEvent *e) diff --git a/src/Frame_p.h b/src/Frame_p.h index 781c88f4..71882d49 100644 --- a/src/Frame_p.h +++ b/src/Frame_p.h @@ -90,6 +90,7 @@ public: void updateTitleBarVisibility(); bool containsMouse(QPoint globalPos) const; TitleBar *titleBar() const; + TabWidget *tabWidget() const; QString title() const; QIcon icon() const; const QVector dockWidgets() const; @@ -197,9 +198,6 @@ public: */ bool beingDeletedLater() const; - ///@brief getter for the tab widget - TabWidget *tabWidget() const; - ///@brief getter for the tab bar TabBar *tabBar() const; @@ -210,6 +208,7 @@ public: **/ bool hasTabsVisible() const; + Q_SIGNALS: void currentDockWidgetChanged(KDDockWidgets::DockWidgetBase *); void numDockWidgetsChanged(); @@ -218,8 +217,10 @@ Q_SIGNALS: private: Q_DISABLE_COPY(Frame) friend class TestDocks; - void scheduleDeleteLater(); + friend class TabWidget; void onDockWidgetCountChanged(); + void onCurrentTabChanged(int index); + void scheduleDeleteLater(); bool event(QEvent *) override; TabWidget *const m_tabWidget; TitleBar *const m_titleBar; diff --git a/src/FrameworkWidgetFactory.cpp b/src/FrameworkWidgetFactory.cpp index b930ed3f..d44fb0da 100644 --- a/src/FrameworkWidgetFactory.cpp +++ b/src/FrameworkWidgetFactory.cpp @@ -55,7 +55,7 @@ TabBar *DefaultWidgetFactory::createTabBar(TabWidget *parent) const return new TabBarWidget(parent); } -TabWidget *DefaultWidgetFactory::createTabWidget(QWidget *parent) const +TabWidget *DefaultWidgetFactory::createTabWidget(Frame *parent) const { return new TabWidgetWidget(parent); } diff --git a/src/FrameworkWidgetFactory.h b/src/FrameworkWidgetFactory.h index 841899c1..84dff439 100644 --- a/src/FrameworkWidgetFactory.h +++ b/src/FrameworkWidgetFactory.h @@ -38,7 +38,7 @@ public: virtual TitleBar* createTitleBar(Frame *) const = 0; virtual TitleBar* createTitleBar(FloatingWindow *) const = 0; virtual TabBar* createTabBar(TabWidget *parent = nullptr) const = 0; - virtual TabWidget* createTabWidget(QWidget *parent) const = 0; + virtual TabWidget* createTabWidget(Frame *parent) const = 0; virtual Separator* createSeparator(Anchor *anchor, QWidgetAdapter *parent = nullptr) const = 0; virtual FloatingWindow *createFloatingWindow(QWidget *parent = nullptr) const = 0; virtual FloatingWindow *createFloatingWindow(Frame *frame, QWidget *parent = nullptr) const = 0; @@ -51,7 +51,7 @@ public: TitleBar *createTitleBar(Frame *) const override; TitleBar *createTitleBar(FloatingWindow *) const override; TabBar *createTabBar(TabWidget *parent) const override; - TabWidget *createTabWidget(QWidget *parent) const override; + TabWidget *createTabWidget(Frame *parent) const override; Separator *createSeparator(Anchor *anchor, QWidgetAdapter *parent = nullptr) const override; FloatingWindow *createFloatingWindow(QWidget *parent = nullptr) const override; FloatingWindow *createFloatingWindow(Frame *frame, QWidget *parent = nullptr) const override; diff --git a/src/TabWidget.cpp b/src/TabWidget.cpp index 5d9a54e5..2ea9689e 100644 --- a/src/TabWidget.cpp +++ b/src/TabWidget.cpp @@ -41,10 +41,10 @@ using namespace KDDockWidgets; -TabBar::TabBar(TabWidget *parent) - : QTabBar(parent) +TabBar::TabBar(TabWidget *tabWidget) + : QTabBar(tabWidget->asWidget()) , Draggable(this) - , m_tabWidget(parent) + , m_tabWidget(tabWidget) { setMinimumWidth(30); } @@ -54,7 +54,7 @@ DockWidgetBase *TabBar::dockWidgetAt(int index) const if (index < 0 || index >= count()) return nullptr; - return qobject_cast(m_tabWidget->widget(index)); + return m_tabWidget->dockwidgetAt(index); } DockWidgetBase *TabBar::dockWidgetAt(QPoint localPos) const @@ -102,29 +102,41 @@ void TabBar::onMousePress(QPoint localPos) m_lastPressedDockWidget = dockWidgetAt(localPos); } -TabWidget::TabWidget(QWidget *parent) - : QTabWidget(parent) - , Draggable(this, Config::self().flags() & Config::Flag_HideTitleBarWhenTabsVisible) - , m_tabBar(Config::self().frameWorkWidgetFactory()->createTabBar(this)) +TabWidget::TabWidget(QWidgetOrQuick *thisWidget, Frame *frame) + : Draggable(thisWidget, Config::self().flags() & Config::Flag_HideTitleBarWhenTabsVisible) + , m_frame(frame) + , m_thisWidget(thisWidget) { - setTabBarAutoHide(true); - setTabBar(m_tabBar); + +#ifdef KDDOCKWIDGETS_QTWIDGETS + // Little ifdefery, as this is not so easy to abstract + QObject::connect(static_cast(thisWidget), &QTabWidget::currentChanged, + frame, &Frame::onCurrentTabChanged); +#else + qWarning() << Q_FUNC_INFO << "Implement me") +#endif + +} + +void TabWidget::setCurrentDockWidget(DockWidgetBase *dw) +{ + setCurrentDockWidget(indexOfDockWidget(dw)); } void TabWidget::addDockWidget(DockWidgetBase *dock) { - insertDockWidget(dock, count()); + insertDockWidget(dock, numDockWidgets()); } void TabWidget::insertDockWidget(DockWidgetBase *dock, int index) { Q_ASSERT(dock); - qCDebug(addwidget) << Q_FUNC_INFO << dock << "; count before=" << count(); + qCDebug(addwidget) << Q_FUNC_INFO << dock << "; count before=" << numDockWidgets(); if (index < 0) index = 0; - if (index > count()) - index = count(); + if (index > numDockWidgets()) + index = numDockWidgets(); if (contains(dock)) { qWarning() << Q_FUNC_INFO << "Refusing to add already existing widget"; @@ -132,8 +144,8 @@ void TabWidget::insertDockWidget(DockWidgetBase *dock, int index) } QPointer oldFrame = dock->frame(); - insertTab(index, dock, dock->icon(), dock->title()); - setCurrentIndex(index); + insertDockWidget(index, dock, dock->icon(), dock->title()); + setCurrentDockWidget(index); if (oldFrame && oldFrame->beingDeletedLater()) { // give it a push and delete it immediately. @@ -148,32 +160,30 @@ void TabWidget::insertDockWidget(DockWidgetBase *dock, int index) } } -void TabWidget::removeDockWidget(DockWidgetBase *w) -{ - removeTab(indexOf(w)); -} void TabWidget::detachTab(DockWidgetBase *dockWidget) { - m_tabBar->detachTab(dockWidget); + tabBar()->detachTab(dockWidget); } bool TabWidget::contains(DockWidgetBase *dw) const { - return indexOf(dw) != -1; + return indexOfDockWidget(dw) != -1; +} + +QWidgetOrQuick *TabWidget::asWidget() const +{ + return m_thisWidget; } std::unique_ptr TabWidget::makeWindow() { - auto frame = qobject_cast(parentWidget()); - Q_ASSERT(frame); + QRect r = m_frame->geometry(); - QRect r = frame->geometry(); - - const QPoint globalPoint = mapToGlobal(QPoint(0, 0)); + const QPoint globalPoint = m_thisWidget->mapToGlobal(QPoint(0, 0)); - auto floatingWindow = Config::self().frameWorkWidgetFactory()->createFloatingWindow(frame); + auto floatingWindow = Config::self().frameWorkWidgetFactory()->createFloatingWindow(m_frame); r.moveTopLeft(globalPoint); floatingWindow->setGeometry(r); floatingWindow->show(); @@ -181,22 +191,13 @@ std::unique_ptr TabWidget::makeWindow() return std::unique_ptr(new WindowBeingDragged(floatingWindow, this)); } -bool TabWidget::isPositionDraggable(QPoint p) const -{ - if (tabPosition() != QTabWidget::North) { - qWarning() << Q_FUNC_INFO << "Not implemented yet. Only North is supported"; - return false; - } - return p.y() >= 0 && p.y() <= m_tabBar->height(); +void TabWidget::onTabInserted() +{ + m_frame->onDockWidgetCountChanged(); } -void TabWidget::tabInserted(int) +void TabWidget::onTabRemoved() { - Q_EMIT dockWidgetCountChanged(); -} - -void TabWidget::tabRemoved(int) -{ - Q_EMIT dockWidgetCountChanged(); + m_frame->onDockWidgetCountChanged(); } diff --git a/src/TabWidget_p.h b/src/TabWidget_p.h index dc22ac65..5eadd8f4 100644 --- a/src/TabWidget_p.h +++ b/src/TabWidget_p.h @@ -87,16 +87,52 @@ private: QPointer m_lastPressedDockWidget = nullptr; }; -class DOCKS_EXPORT TabWidget : public QTabWidget, public Draggable +class DOCKS_EXPORT TabWidget : public Draggable { - Q_OBJECT public: - explicit TabWidget(QWidget *parent); + /** + * @brief Constructs a new TabWidget, with @p frame as a parent + */ + explicit TabWidget(QWidgetOrQuick *thisWidget, Frame *frame); + /** + * @brief returns the number of dock widgets in this TabWidget + */ + virtual int numDockWidgets() const = 0; + + /** + * @brief Removes a dock widget from the TabWidget + */ + virtual void removeDockWidget(DockWidgetBase *) = 0; + + /** + * @brief Returns the index of the dock widget, or -1 if it doesn't exist + */ + virtual int indexOfDockWidget(DockWidgetBase *) const = 0; + + /** + * @brief Sets the current dock widget index + */ + virtual void setCurrentDockWidget(int index) = 0; + void setCurrentDockWidget(DockWidgetBase *); + + virtual void insertDockWidget(int index, DockWidgetBase *, const QIcon&, const QString &title) = 0; + + virtual void setTabBarAutoHide(bool) = 0; + + /** + * @brief Returns the current index + */ + virtual int currentIndex() const = 0; ///@brief appends a dock widget into this TabWidget void addDockWidget(DockWidgetBase *); + /** + * @brief Returns the dock widget tabbed at index @p index + */ + virtual DockWidgetBase *dockwidgetAt(int index) const = 0; + /** * @brief inserts @p dockwidget into the TabWidget, at @p index * @param dockwidget the dockwidget to insert @@ -104,8 +140,6 @@ public: */ void insertDockWidget(DockWidgetBase *dockwidget, int index); - void removeDockWidget(DockWidgetBase *); - /** * @brief detaches a dock widget and shows it as a floating dock widget * @param dockWidget the dock widget to detach @@ -118,17 +152,26 @@ public: */ bool contains(DockWidgetBase *dw) const; + /** + * @brief Returns the tab bar + */ + virtual TabBar* tabBar() const = 0; + + /** + * @brief Returns this class as a QWidget (if using QtWidgets) or QQuickItem + */ + QWidgetOrQuick *asWidget() const; + // Draggable interface std::unique_ptr makeWindow() override; - bool isPositionDraggable(QPoint p) const override; -Q_SIGNALS: - void dockWidgetCountChanged(); protected: - void tabInserted(int index) override; - void tabRemoved(int index) override; + void onTabInserted(); + void onTabRemoved(); + private: - TabBar *const m_tabBar; + Frame *const m_frame; + QWidgetOrQuick *const m_thisWidget; Q_DISABLE_COPY(TabWidget) }; } diff --git a/src/widgets/FrameWidget.cpp b/src/widgets/FrameWidget.cpp index 566c257d..8c9fabd3 100644 --- a/src/widgets/FrameWidget.cpp +++ b/src/widgets/FrameWidget.cpp @@ -31,20 +31,18 @@ #include #include +#include using namespace KDDockWidgets; FrameWidget::FrameWidget(QWidget *parent, Options options) : Frame(parent, options) { - - qDebug() << "FrameWidget"; - auto vlayout = new QVBoxLayout(this); vlayout->setContentsMargins(0, 0, 0, 0); vlayout->setSpacing(0); vlayout->addWidget(titleBar()); - vlayout->addWidget(tabWidget()); + vlayout->addWidget(tabWidget()->asWidget()); } void FrameWidget::paintEvent(QPaintEvent *) diff --git a/src/widgets/TabWidgetWidget.cpp b/src/widgets/TabWidgetWidget.cpp index 2ddfb93d..e8c0acad 100644 --- a/src/widgets/TabWidgetWidget.cpp +++ b/src/widgets/TabWidgetWidget.cpp @@ -26,12 +26,37 @@ */ #include "TabWidgetWidget_p.h" +#include "Frame_p.h" +#include "Config.h" using namespace KDDockWidgets; -TabWidgetWidget::TabWidgetWidget(QWidget *parent) - : TabWidget(parent) +TabWidgetWidget::TabWidgetWidget(Frame *parent) + : QTabWidget(parent) + , TabWidget(this, parent) + , m_tabBar(Config::self().frameWorkWidgetFactory()->createTabBar(this)) { + setTabBar(m_tabBar); +} + +TabBar *TabWidgetWidget::tabBar() const +{ + return m_tabBar; +} + +int TabWidgetWidget::numDockWidgets() const +{ + return count(); +} + +void TabWidgetWidget::removeDockWidget(DockWidgetBase *dw) +{ + removeTab(indexOf(dw)); +} + +int TabWidgetWidget::indexOfDockWidget(DockWidgetBase *dw) const +{ + return indexOf(dw); } void TabWidgetWidget::paintEvent(QPaintEvent *p) @@ -41,3 +66,49 @@ void TabWidgetWidget::paintEvent(QPaintEvent *p) if (count() > 1) QTabWidget::paintEvent(p); } + +void TabWidgetWidget::tabInserted(int) +{ + onTabInserted(); +} + +void TabWidgetWidget::tabRemoved(int) +{ + onTabRemoved(); +} + +bool TabWidgetWidget::isPositionDraggable(QPoint p) const +{ + if (tabPosition() != QTabWidget::North) { + qWarning() << Q_FUNC_INFO << "Not implemented yet. Only North is supported"; + return false; + } + + return p.y() >= 0 && p.y() <= QTabWidget::tabBar()->height(); +} + +void TabWidgetWidget::setCurrentDockWidget(int index) +{ + setCurrentIndex(index); +} + +void TabWidgetWidget::insertDockWidget(int index, DockWidgetBase *dw, + const QIcon &icon, const QString &title) +{ + insertTab(index, dw, icon, title); +} + +void TabWidgetWidget::setTabBarAutoHide(bool b) +{ + QTabWidget::setTabBarAutoHide(b); +} + +DockWidgetBase *TabWidgetWidget::dockwidgetAt(int index) const +{ + return qobject_cast(widget(index)); +} + +int TabWidgetWidget::currentIndex() const +{ + return QTabWidget::currentIndex(); +} diff --git a/src/widgets/TabWidgetWidget_p.h b/src/widgets/TabWidgetWidget_p.h index 510ff56b..be31e03e 100644 --- a/src/widgets/TabWidgetWidget_p.h +++ b/src/widgets/TabWidgetWidget_p.h @@ -29,18 +29,39 @@ #define KDTABWIDGETWIDGET_P_H #include "TabWidget_p.h" +#include namespace KDDockWidgets { -class DOCKS_EXPORT TabWidgetWidget : public TabWidget +class Frame; +class TabBar; + +class DOCKS_EXPORT TabWidgetWidget : public QTabWidget, public TabWidget { Q_OBJECT public: - explicit TabWidgetWidget(QWidget *parent); + explicit TabWidgetWidget(Frame *parent); + + TabBar *tabBar() const override; + + int numDockWidgets() const override; + void removeDockWidget(DockWidgetBase *) override; + int indexOfDockWidget(DockWidgetBase *) const override; protected: void paintEvent(QPaintEvent *) override; + void tabInserted(int index) override; + void tabRemoved(int index) override; + bool isPositionDraggable(QPoint p) const override; + void setCurrentDockWidget(int index) override; + void insertDockWidget(int index, DockWidgetBase *, const QIcon&, const QString &title) override; + void setTabBarAutoHide(bool) override; + + DockWidgetBase *dockwidgetAt(int index) const override; + int currentIndex() const override; + private: Q_DISABLE_COPY(TabWidgetWidget) + TabBar *const m_tabBar; }; } diff --git a/tests/tst_docks.cpp b/tests/tst_docks.cpp index aaf8eab6..89003698 100644 --- a/tests/tst_docks.cpp +++ b/tests/tst_docks.cpp @@ -2517,7 +2517,7 @@ void TestDocks::tst_setFloatingWhenWasTabbed() dock2->setVisible(false); QVERIFY(dock2->isTabbed()); QVERIFY(!dock1->isFloating()); - QCOMPARE(dock2->frame()->m_tabWidget->count(), 2); + QCOMPARE(dock2->frame()->m_tabWidget->numDockWidgets(), 2); // 3. Set one floating. Now both cease to be tabbed, and both are floating. dock1->setFloating(true); @@ -2573,7 +2573,7 @@ void TestDocks::tst_setFloatingWhenWasTabbed() dock2->setFloating(false); QVERIFY(!dock2->isFloating()); QVERIFY(dock2->isTabbed()); - QCOMPARE(dock2->frame()->m_tabWidget->indexOf(dock2), 1); + QCOMPARE(dock2->frame()->m_tabWidget->indexOfDockWidget(dock2), 1); // 10. Float dock1, and dock it to main window as tab. This tests Option_AlwaysShowsTabs. @@ -2586,7 +2586,7 @@ void TestDocks::tst_setFloatingWhenWasTabbed() QVERIFY(dock1->isTabbed()); dock1->setFloating(true); dock1->setFloating(false); - QCOMPARE(dock1->frame()->m_tabWidget->count(), 1); + QCOMPARE(dock1->frame()->m_tabWidget->numDockWidgets(), 1); // Cleanup m->addDockWidgetAsTab(dock2); diff --git a/tests/utils.cpp b/tests/utils.cpp index c881d283..989d9417 100644 --- a/tests/utils.cpp +++ b/tests/utils.cpp @@ -21,6 +21,7 @@ #include "utils.h" #include "DropArea_p.h" #include "Config.h" +#include "TabWidgetWidget_p.h" #include #include @@ -156,10 +157,10 @@ QWidget *KDDockWidgets::Tests::draggableFor(QWidget *w) if (auto frame = dock->frame()) draggable = frame->titleBar(); } else if (auto fw = qobject_cast(w)) { - draggable = ((Config::self().flags() & Config::Flag_HideTitleBarWhenTabsVisible) && fw->hasSingleFrame() && fw->frames().first()->hasTabsVisible()) ? static_cast(fw->frames().first()->tabWidget()) + draggable = ((Config::self().flags() & Config::Flag_HideTitleBarWhenTabsVisible) && fw->hasSingleFrame() && fw->frames().first()->hasTabsVisible()) ? static_cast(fw->frames().first()->tabWidget()->asWidget()) : static_cast(fw->titleBar()); - } else if (qobject_cast(w) || qobject_cast(w)) { + } else if (qobject_cast(w) || qobject_cast(w)) { draggable = w; }