diff -r b72c6db6890b -r 5dc02b23752f src/gui/widgets/qdockwidget.cpp --- a/src/gui/widgets/qdockwidget.cpp Wed Jun 23 19:07:03 2010 +0300 +++ b/src/gui/widgets/qdockwidget.cpp Tue Jul 06 15:10:48 2010 +0300 @@ -1010,7 +1010,7 @@ if (!floating && parent) { QMainWindowLayout *mwlayout = qobject_cast(q->parentWidget()->layout()); - if (!mwlayout || mwlayout->dockWidgetArea(q) == Qt::NoDockWidgetArea) + if (mwlayout && mwlayout->dockWidgetArea(q) == Qt::NoDockWidgetArea) return; // this dockwidget can't be redocked } @@ -1269,12 +1269,11 @@ QRect r = d->undockedGeometry; d->setWindowState(floating, false, floating ? r : QRect()); + if (floating && r.isNull()) { - QDockWidgetLayout *layout = qobject_cast(this->layout()); - QRect titleArea = layout->titleArea(); - int h = layout->verticalTitleBar ? titleArea.width() : titleArea.height(); - QPoint p = mapToGlobal(QPoint(h, h)); - move(p); + if (x() < 0 || y() < 0) //may happen if we have been hidden + move(QPoint()); + setAttribute(Qt::WA_Moved, false); //we want it at the default position } }