diff options
author | Friedemann Kleint <Friedemann.Kleint@digia.com> | 2013-06-11 13:35:22 (GMT) |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-06-14 04:31:45 (GMT) |
commit | 789cb3137fe86fc040d53b16b4736188362028cb (patch) | |
tree | 5624f47049053f2ac3cebdc6e8502c70ee7b6d70 | |
parent | e813793940c961a7d831dca133512f61e8bf78f5 (diff) | |
download | Qt-789cb3137fe86fc040d53b16b4736188362028cb.zip Qt-789cb3137fe86fc040d53b16b4736188362028cb.tar.gz Qt-789cb3137fe86fc040d53b16b4736188362028cb.tar.bz2 |
QDockWidget: Keep position when undocking.
Initialize undockedGeometry to roughly the current position.
Task-number: QTBUG-31044
Change-Id: I03cbe280d1215bb58ab721b60e29b45359cde76d
Reviewed-by: Andy Shaw <andy.shaw@digia.com>
(cherry picked from qtbase/0d459619a902e547d8c74745453b3bdb8f67a660)
-rw-r--r-- | src/gui/widgets/qdockwidget.cpp | 3 | ||||
-rw-r--r-- | tests/auto/qdockwidget/tst_qdockwidget.cpp | 8 |
2 files changed, 11 insertions, 0 deletions
diff --git a/src/gui/widgets/qdockwidget.cpp b/src/gui/widgets/qdockwidget.cpp index 1ba3e9a..bb585b1 100644 --- a/src/gui/widgets/qdockwidget.cpp +++ b/src/gui/widgets/qdockwidget.cpp @@ -1281,6 +1281,9 @@ void QDockWidget::setFloating(bool floating) d->endDrag(true); QRect r = d->undockedGeometry; + // Keep position when undocking for the first time. + if (floating && isVisible() && !r.isValid()) + r = QRect(mapToGlobal(QPoint(0, 0)), size()); d->setWindowState(floating, false, floating ? r : QRect()); diff --git a/tests/auto/qdockwidget/tst_qdockwidget.cpp b/tests/auto/qdockwidget/tst_qdockwidget.cpp index 22f4f23..dff0ec0 100644 --- a/tests/auto/qdockwidget/tst_qdockwidget.cpp +++ b/tests/auto/qdockwidget/tst_qdockwidget.cpp @@ -363,7 +363,9 @@ void tst_QDockWidget::features() void tst_QDockWidget::setFloating() { + const QRect deskRect = QApplication::desktop()->availableGeometry(); QMainWindow mw; + mw.move(deskRect.left() + deskRect.width() * 2 / 3, deskRect.top() + deskRect.height() / 3); QDockWidget dw; mw.addDockWidget(Qt::LeftDockWidgetArea, &dw); @@ -373,10 +375,16 @@ void tst_QDockWidget::setFloating() #endif QVERIFY(!dw.isFloating()); + const QPoint dockedPosition = dw.mapToGlobal(dw.pos()); QSignalSpy spy(&dw, SIGNAL(topLevelChanged(bool))); dw.setFloating(true); + const QPoint floatingPosition = dw.pos(); + + // QTBUG-31044, show approximately at old position, give or take window frame. + QVERIFY((dockedPosition - floatingPosition).manhattanLength() < 50); + QVERIFY(dw.isFloating()); QCOMPARE(spy.count(), 1); QCOMPARE(spy.at(0).value(0).toBool(), dw.isFloating()); |