DockWidget::addDockWidgetToContainingWindow() now accepts docking to main window
Was already stated in the docs that it would work with a main window but implementation only allowed floating window. Fixes #132
This commit is contained in:
@@ -205,11 +205,13 @@ void DockWidgetBase::addDockWidgetAsTab(DockWidgetBase *other, InitialOption opt
|
||||
frame->addWidget(other, option);
|
||||
}
|
||||
|
||||
void DockWidgetBase::addDockWidgetToContainingWindow(DockWidgetBase *other, Location location, DockWidgetBase *relativeTo)
|
||||
void DockWidgetBase::addDockWidgetToContainingWindow(DockWidgetBase *other,
|
||||
Location location,
|
||||
DockWidgetBase *relativeTo)
|
||||
{
|
||||
qCDebug(addwidget) << Q_FUNC_INFO << other << location << relativeTo;
|
||||
if (qobject_cast<MainWindowBase*>(window())) {
|
||||
qWarning() << Q_FUNC_INFO << "Just use MainWindow::addWidget() directly. This function is for floating nested windows only.";
|
||||
if (auto mainWindow = qobject_cast<MainWindowBase*>(window())) {
|
||||
// It's inside a main window. Simply use the main window API.
|
||||
mainWindow->addDockWidget(other, location, relativeTo);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -3922,27 +3922,37 @@ void TestDocks::tst_addDockWidgetToMainWindow()
|
||||
|
||||
void TestDocks::tst_addDockWidgetToContainingWindow()
|
||||
{
|
||||
EnsureTopLevelsDeleted e;
|
||||
{ // Test with a floating window
|
||||
EnsureTopLevelsDeleted e;
|
||||
|
||||
auto dock1 = createDockWidget("dock1", new QPushButton("one"));
|
||||
auto dock2 = createDockWidget("dock2", new QPushButton("two"));
|
||||
auto dock3 = createDockWidget("dock3", new QPushButton("three"));
|
||||
auto dock1 = createDockWidget("dock1", new QPushButton("one"));
|
||||
auto dock2 = createDockWidget("dock2", new QPushButton("two"));
|
||||
auto dock3 = createDockWidget("dock3", new QPushButton("three"));
|
||||
|
||||
dock1->addDockWidgetToContainingWindow(dock2, Location_OnRight);
|
||||
dock1->addDockWidgetToContainingWindow(dock3, Location_OnTop, dock2);
|
||||
dock1->addDockWidgetToContainingWindow(dock2, Location_OnRight);
|
||||
dock1->addDockWidgetToContainingWindow(dock3, Location_OnTop, dock2);
|
||||
|
||||
QCOMPARE(dock1->window(), dock2->window());
|
||||
QCOMPARE(dock2->window(), dock3->window());
|
||||
QCOMPARE(dock1->window(), dock2->window());
|
||||
QCOMPARE(dock2->window(), dock3->window());
|
||||
|
||||
QVERIFY(dock3->frame()->QWidgetAdapter::y() < dock2->frame()->QWidgetAdapter::y());
|
||||
QVERIFY(dock1->frame()->QWidgetAdapter::x() < dock2->frame()->QWidgetAdapter::x());
|
||||
QCOMPARE(dock2->frame()->QWidgetAdapter::x(), dock3->frame()->QWidgetAdapter::x());
|
||||
QVERIFY(dock3->frame()->QWidgetAdapter::y() < dock2->frame()->QWidgetAdapter::y());
|
||||
QVERIFY(dock1->frame()->QWidgetAdapter::x() < dock2->frame()->QWidgetAdapter::x());
|
||||
QCOMPARE(dock2->frame()->QWidgetAdapter::x(), dock3->frame()->QWidgetAdapter::x());
|
||||
}
|
||||
|
||||
auto window = dock1->window();
|
||||
delete dock1;
|
||||
delete dock2;
|
||||
delete dock3;
|
||||
Testing::waitForDeleted(window);
|
||||
{ // Also test with a main window
|
||||
EnsureTopLevelsDeleted e;
|
||||
|
||||
auto m = createMainWindow();
|
||||
auto dock1 = createDockWidget("dock1", new QPushButton("one"));
|
||||
auto dock2 = createDockWidget("dock2", new QPushButton("two"));
|
||||
|
||||
m->addDockWidget(dock1, Location_OnRight, nullptr);
|
||||
dock1->addDockWidgetToContainingWindow(dock2, Location_OnRight);
|
||||
|
||||
QCOMPARE(dock1->window(), dock2->window());
|
||||
QCOMPARE(m.get(), dock2->window());
|
||||
}
|
||||
}
|
||||
|
||||
void TestDocks::tst_notClosable()
|
||||
|
||||
Reference in New Issue
Block a user