diff options
author | Friedemann Kleint <Friedemann.Kleint@theqtcompany.com> | 2015-12-15 10:49:47 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@theqtcompany.com> | 2015-12-15 12:05:26 +0000 |
commit | bece6fa0b9409918ce9c57c59d61537b304c9812 (patch) | |
tree | 3f45a8bf1dd30b63ee115ee29eb99a5b5ea0745b /src | |
parent | 482165057dfb1cc6ef4281e693dd8127aa0d6f6e (diff) |
QDockAreaLayout/QPlaceHolderItem: Store geometry excluding frame.
Previously, the geometry stored for floating dock widgets
in QPlaceHolderItem::topLevelRect and QDockAreaLayoutInfo::saveState()
included the window frame (frame position/content area size).
This does not work in the case where a floating dock widget is deleted
since the geometry is determined after reparenting the widget when the
frame geometry is no longer available. Change the behavior to store
the geometry excluding frame to avoid such problems and adapt
QDockWidgetPrivate::setWindowState() accordingly.
Task-number: QTBUG-49832
Task-number: QTBUG-45780
Change-Id: I84b5c80df6e1c9e738bbb1407b9047cc84719ce0
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/widgets/widgets/qdockarealayout.cpp | 3 | ||||
-rw-r--r-- | src/widgets/widgets/qdockwidget.cpp | 8 |
2 files changed, 3 insertions, 8 deletions
diff --git a/src/widgets/widgets/qdockarealayout.cpp b/src/widgets/widgets/qdockarealayout.cpp index 06c20adb9d..8c79425e44 100644 --- a/src/widgets/widgets/qdockarealayout.cpp +++ b/src/widgets/widgets/qdockarealayout.cpp @@ -1816,7 +1816,8 @@ void QDockAreaLayoutInfo::saveState(QDataStream &stream) const stream << flags; if (w->isWindow()) { - stream << w->x() << w->y() << w->width() << w->height(); + const QRect geometry = w->geometry(); + stream << geometry.x() << geometry.y() << geometry.width() << geometry.height(); } else { stream << item.pos << item.size << pick(o, item.minimumSize()) << pick(o, item.maximumSize()); diff --git a/src/widgets/widgets/qdockwidget.cpp b/src/widgets/widgets/qdockwidget.cpp index 292681584d..67eb466ba8 100644 --- a/src/widgets/widgets/qdockwidget.cpp +++ b/src/widgets/widgets/qdockwidget.cpp @@ -1093,14 +1093,8 @@ void QDockWidgetPrivate::setWindowState(bool floating, bool unplug, const QRect q->setWindowFlags(flags); - if (!rect.isNull()) { - if (floating) { - q->resize(rect.size()); - q->move(rect.topLeft()); - } else { + if (!rect.isNull()) q->setGeometry(rect); - } - } updateButtons(); |