diff --git a/tests/tst_docks.cpp b/tests/tst_docks.cpp
index dce02e63..20eff28d 100644
--- a/tests/tst_docks.cpp
+++ b/tests/tst_docks.cpp
@@ -240,15 +240,16 @@ private Q_SLOTS:
void tst_dragByTabBar();
void tst_dragByTabBar_data();
void tst_titleBarFocusedWhenTabsChange();
+ void tst_dock2FloatingWidgetsTabbed();
#ifdef KDDOCKWIDGETS_QTWIDGETS
// TODO: Port these to QtQuick
- void tst_tabsNotClickable();
- void tst_dock2FloatingWidgetsTabbed();
+
void tst_mainWindowAlwaysHasCentralWidget();
void tst_dockableMainWindows();
// But these are fine to be widget only:
+ void tst_tabsNotClickable();
void tst_embeddedMainWindow();
void tst_restoreEmbeddedMainWindow();
void tst_negativeAnchorPositionWhenEmbedded();
@@ -4799,103 +4800,6 @@ void TestDocks::tst_tabsNotClickable()
delete frame->window();
}
-void TestDocks::tst_dock2FloatingWidgetsTabbed()
-{
- EnsureTopLevelsDeleted e;
-
- if (KDDockWidgets::usesNativeTitleBar())
- return; // Unit-tests can't drag via tab, yet
-
- auto dock1 = createDockWidget("doc1", Qt::green);
- auto fw1 = dock1->floatingWindow();
- fw1->setGeometry(500, 500, 400, 400);
- QVERIFY(dock1);
- QPointer frame1 = dock1->frame();
-
- auto titlebar1 = fw1->titleBar();
- auto dock2 = createDockWidget("doc2", Qt::red);
-
- QVERIFY(dock1->isFloating());
- QVERIFY(dock2->isFloating());
-
- drag(titlebar1, titlebar1->mapToGlobal(QPoint(5, 5)), dock2->window()->geometry().center(), ButtonAction_Press);
-
- // It morphed into a FloatingWindow
- QPointer frame2 = dock2->frame();
- if (!dock2->floatingWindow()) {
- qWarning() << "dock2->floatingWindow()=" << dock2->floatingWindow();
- QVERIFY(false);
- }
- QVERIFY(frame2);
- QCOMPARE(frame2->dockWidgetCount(), 1);
-
- releaseOn(dock2->window()->geometry().center(), titlebar1);
- QCOMPARE(frame2->dockWidgetCount(), 2); // 2.2 Frame has 2 widgets when one is dropped
-
- QVERIFY(Testing::waitForDeleted(frame1));
-
- // 2.3 Detach tab1 to empty space
- QPoint globalPressPos = dragPointForWidget(frame2.data(), 0);
- QTabBar *tabBar = static_cast(frame2.data())->tabBar();
- QVERIFY(tabBar);
- drag(tabBar, globalPressPos, frame2->window()->geometry().bottomRight() + QPoint(10, 10));
-
- QVERIFY(frame2->dockWidgetCount() == 1);
- QVERIFY(dock1->floatingWindow());
-
- // 2.4 Drag the first dock over the second
- frame1 = dock1->frame();
- frame2 = dock2->frame();
- fw1 = dock1->floatingWindow();
- globalPressPos = fw1->titleBar()->mapToGlobal(QPoint(100,5));
- drag(fw1->titleBar(), globalPressPos, dock2->window()->geometry().center());
-
- QCOMPARE(frame2->dockWidgetCount(), 2);
-
- // 2.5 Detach and drop to the same place, should tab again
- globalPressPos = dragPointForWidget(frame2.data(), 0);
- tabBar = static_cast(frame2.data())->tabBar();
-
- drag(tabBar, globalPressPos, dock2->window()->geometry().center());
- QCOMPARE(frame2->dockWidgetCount(), 2);
-
- // 2.6 Drag the tabbed group over a 3rd floating window
- auto dock3 = createDockWidget("doc3", Qt::black);
- QTest::qWait(1000); // Test is flaky otherwise
-
- auto fw2 = dock2->floatingWindow();
- drag(fw2->titleBar(), frame2->mapToGlobal(QPoint(10, 10)), dock3->window()->geometry().center());
-
- QVERIFY(Testing::waitForDeleted(frame1));
- QVERIFY(Testing::waitForDeleted(frame2));
- QVERIFY(dock3->frame());
- QCOMPARE(dock3->frame()->dockWidgetCount(), 3);
-
- auto fw3 = dock3->floatingWindow();
- QVERIFY(fw3);
- QVERIFY(fw3->dropArea()->checkSanity());
-
- // 2.7 Drop the window into a MainWindow
- {
- MainWindow m("MyMainWindow_tst_dock2FloatingWidgetsTabbed", MainWindowOption_HasCentralFrame);
- m.show();
- m.setGeometry(500, 300, 300, 300);
- QVERIFY(!dock3->isFloating());
- auto fw3 = dock3->floatingWindow();
- drag(fw3->titleBar(), dock3->window()->mapToGlobal(QPoint(10, 10)), m.geometry().center());
- QVERIFY(!dock3->isFloating());
- QVERIFY(qobject_cast(dock3->window()) == &m);
- QCOMPARE(dock3->frame()->dockWidgetCount(), 3);
- QVERIFY(m.dropArea()->checkSanity());
-
- delete dock1;
- delete dock2;
- delete dock3;
- QVERIFY(Testing::waitForDeleted(frame2));
- QVERIFY(Testing::waitForDeleted(fw3));
- }
-}
-
void TestDocks::tst_mainWindowAlwaysHasCentralWidget()
{
EnsureTopLevelsDeleted e;
@@ -6475,4 +6379,101 @@ void TestDocks::tst_dragByTabBar()
dragFloatingWindowTo(fw, dropArea, DropIndicatorOverlayInterface::DropLocation_Right);
}
+void TestDocks::tst_dock2FloatingWidgetsTabbed()
+{
+ EnsureTopLevelsDeleted e;
+
+ if (KDDockWidgets::usesNativeTitleBar())
+ return; // Unit-tests can't drag via tab, yet
+
+ auto dock1 = createDockWidget("doc1", Qt::green);
+ auto fw1 = dock1->floatingWindow();
+ fw1->setGeometry(QRect(500, 500, 400, 400));
+ QVERIFY(dock1);
+ QPointer frame1 = dock1->frame();
+
+ auto titlebar1 = fw1->titleBar();
+ auto dock2 = createDockWidget("doc2", Qt::red);
+
+ QVERIFY(dock1->isFloating());
+ QVERIFY(dock2->isFloating());
+
+ drag(titlebar1, titlebar1->mapToGlobal(QPoint(5, 5)), dock2->window()->geometry().center(), ButtonAction_Press);
+
+ // It morphed into a FloatingWindow
+ QPointer frame2 = dock2->frame();
+ if (!dock2->floatingWindow()) {
+ qWarning() << "dock2->floatingWindow()=" << dock2->floatingWindow();
+ QVERIFY(false);
+ }
+ QVERIFY(frame2);
+ QCOMPARE(frame2->dockWidgetCount(), 1);
+
+ releaseOn(dock2->window()->geometry().center(), titlebar1);
+ QCOMPARE(frame2->dockWidgetCount(), 2); // 2.2 Frame has 2 widgets when one is dropped
+
+ QVERIFY(Testing::waitForDeleted(frame1));
+
+ // 2.3 Detach tab1 to empty space
+ QPoint globalPressPos = dragPointForWidget(frame2.data(), 0);
+ TabBar *tabBar = frame2->tabWidget()->tabBar();
+ QVERIFY(tabBar);
+ drag(tabBar->asWidget(), globalPressPos, frame2->window()->geometry().bottomRight() + QPoint(10, 10));
+
+ QVERIFY(frame2->dockWidgetCount() == 1);
+ QVERIFY(dock1->floatingWindow());
+
+ // 2.4 Drag the first dock over the second
+ frame1 = dock1->frame();
+ frame2 = dock2->frame();
+ fw1 = dock1->floatingWindow();
+ globalPressPos = fw1->titleBar()->mapToGlobal(QPoint(100,5));
+ drag(fw1->titleBar(), globalPressPos, dock2->window()->geometry().center());
+
+ QCOMPARE(frame2->dockWidgetCount(), 2);
+
+ // 2.5 Detach and drop to the same place, should tab again
+ globalPressPos = dragPointForWidget(frame2.data(), 0);
+ tabBar = frame2->tabWidget()->tabBar();
+
+ drag(tabBar->asWidget(), globalPressPos, dock2->window()->geometry().center());
+ QCOMPARE(frame2->dockWidgetCount(), 2);
+
+ // 2.6 Drag the tabbed group over a 3rd floating window
+ auto dock3 = createDockWidget("doc3", Qt::black);
+ QTest::qWait(1000); // Test is flaky otherwise
+
+ auto fw2 = dock2->floatingWindow();
+ drag(fw2->titleBar(), frame2->mapToGlobal(QPoint(10, 10)), dock3->window()->geometry().center());
+
+ QVERIFY(Testing::waitForDeleted(frame1));
+ QVERIFY(Testing::waitForDeleted(frame2));
+ QVERIFY(dock3->frame());
+ QCOMPARE(dock3->frame()->dockWidgetCount(), 3);
+
+ auto fw3 = dock3->floatingWindow();
+ QVERIFY(fw3);
+ QVERIFY(fw3->dropArea()->checkSanity());
+
+ // 2.7 Drop the window into a MainWindow
+ {
+ auto m = createMainWindow();
+ m->show();
+ m->setGeometry(QRect(500, 300, 300, 300));
+ QVERIFY(!dock3->isFloating());
+ auto fw3 = dock3->floatingWindow();
+ drag(fw3->titleBar(), dock3->window()->mapToGlobal(QPoint(10, 10)), m->geometry().center());
+ QVERIFY(!dock3->isFloating());
+ QVERIFY(dock3->window() == m.get());
+ QCOMPARE(dock3->frame()->dockWidgetCount(), 3);
+ QVERIFY(m->dropArea()->checkSanity());
+
+ delete dock1;
+ delete dock2;
+ delete dock3;
+ QVERIFY(Testing::waitForDeleted(frame2));
+ QVERIFY(Testing::waitForDeleted(fw3));
+ }
+}
+
#include "tst_docks.moc"