diff --git a/examples/widgets/mainwindows/mainwindow/mainwindow.cpp b/examples/widgets/mainwindows/mainwindow/mainwindow.cpp index fe54f45..e84c1d1 100644 --- a/examples/widgets/mainwindows/mainwindow/mainwindow.cpp +++ b/examples/widgets/mainwindows/mainwindow/mainwindow.cpp @@ -391,6 +391,11 @@ void MainWindow::showEvent(QShowEvent *event) QMainWindow::showEvent(event); } +void MainWindow::moveEvent(QMoveEvent *m) +{ + qDebug() << m->pos(); +} + void MainWindow::switchLayoutDirection() { if (layoutDirection() == Qt::LeftToRight) diff --git a/examples/widgets/mainwindows/mainwindow/mainwindow.h b/examples/widgets/mainwindows/mainwindow/mainwindow.h index 4f8b65a..b648e13 100644 --- a/examples/widgets/mainwindows/mainwindow/mainwindow.h +++ b/examples/widgets/mainwindows/mainwindow/mainwindow.h @@ -68,6 +68,8 @@ public: protected: void showEvent(QShowEvent *event); + void moveEvent(QMoveEvent *m); + public slots: void actionTriggered(QAction *action); diff --git a/examples/widgets/mainwindows/mainwindow/mainwindow.pro b/examples/widgets/mainwindows/mainwindow/mainwindow.pro index bf92d0e..b63e56a 100644 --- a/examples/widgets/mainwindows/mainwindow/mainwindow.pro +++ b/examples/widgets/mainwindows/mainwindow/mainwindow.pro @@ -7,7 +7,7 @@ build_all:!build_pass { CONFIG -= build_all CONFIG += release } - +CONFIG+=console RESOURCES += mainwindow.qrc # install diff --git a/src/gui/kernel/qplatformwindow.cpp b/src/gui/kernel/qplatformwindow.cpp index 4c0d68e..e267d8b 100644 --- a/src/gui/kernel/qplatformwindow.cpp +++ b/src/gui/kernel/qplatformwindow.cpp @@ -48,6 +48,7 @@ #include #include #include +#include QT_BEGIN_NAMESPACE @@ -498,7 +499,9 @@ bool QPlatformWindow::isAlertState() const */ QRect QPlatformWindow::initialGeometry(const QWindow *w, const QRect &initialGeometry, int defaultWidth, int defaultHeight) + { + qDebug() << __FUNCTION__ << '>' << w << initialGeometry; QRect rect(initialGeometry); if (rect.isNull()) { QSize minimumSize = w->minimumSize(); @@ -527,6 +530,7 @@ QRect QPlatformWindow::initialGeometry(const QWindow *w, } } } + qDebug() << __FUNCTION__ << '<' < +#include #include #include @@ -2982,7 +2983,9 @@ bool QDockAreaLayout::restoreDockWidget(QDockWidget *dockWidget) if (placeHolder->window) { QDesktopWidget desktop; + QRect r = constrainedRect(placeHolder->topLevelRect, desktop.screenGeometry(dockWidget)); + qDebug() << __FUNCTION__ << dockWidget << r; dockWidget->d_func()->setWindowState(true, true, r); } dockWidget->setVisible(!placeHolder->hidden); diff --git a/src/widgets/widgets/qdockwidget.cpp b/src/widgets/widgets/qdockwidget.cpp index a3c331a..7e9df79 100644 --- a/src/widgets/widgets/qdockwidget.cpp +++ b/src/widgets/widgets/qdockwidget.cpp @@ -710,6 +710,7 @@ void QDockWidgetPrivate::initDrag(const QPoint &pos, bool nca) state->ownWidgetItem = false; state->nca = nca; state->ctrlDrag = false; + qDebug() << __FUNCTION__; } void QDockWidgetPrivate::startDrag() @@ -736,12 +737,14 @@ void QDockWidgetPrivate::startDrag() layout->restore(); state->dragging = true; + qDebug() << __FUNCTION__ << q; } void QDockWidgetPrivate::endDrag(bool abort) { Q_Q(QDockWidget); Q_ASSERT(state != 0); + qDebug() << __FUNCTION__ << q; q->releaseMouse(); @@ -768,6 +771,7 @@ void QDockWidgetPrivate::endDrag(bool abort) myLayout->widgetForRole(QDockWidgetLayout::TitleBar) != 0); } undockedGeometry = q->geometry(); + qDebug() << __FUNCTION__ << q << "SETTING undocked isWindow=" << q->isWindow() << undockedGeometry; q->activateWindow(); } else { mwLayout->revert(state->widgetItem); @@ -985,7 +989,9 @@ void QDockWidgetPrivate::moveEvent(QMoveEvent *event) void QDockWidgetPrivate::unplug(const QRect &rect) { + Q_Q(QDockWidget); + qDebug() << __FUNCTION__ << q << rect; QRect r = rect; r.moveTopLeft(q->mapToGlobal(QPoint(0, 0))); QDockWidgetLayout *dwLayout = qobject_cast(layout); @@ -996,12 +1002,15 @@ void QDockWidgetPrivate::unplug(const QRect &rect) void QDockWidgetPrivate::plug(const QRect &rect) { + qDebug() << __FUNCTION__ << q_func(); setWindowState(false, false, rect); } void QDockWidgetPrivate::setWindowState(bool floating, bool unplug, const QRect &rect) { + Q_Q(QDockWidget); + qDebug() << __FUNCTION__ << q << "fl+" << floating << "Unplug=" << unplug << rect; if (!floating && parent) { QMainWindowLayout *mwlayout = qt_mainwindow_layout(qobject_cast(q->parentWidget())); @@ -1259,12 +1268,23 @@ void QDockWidget::setFloating(bool floating) d->endDrag(true); QRect r = d->undockedGeometry; + qDebug() << __FUNCTION__ <undockedGeometry; + +/* Proposed fix: + if (floating && !r.isValid()) { + r = QRect(mapToGlobal(QPoint(0, 0)), size()); + qDebug() << __FUNCTION__ << "FIXED UNDOCKEDGEOM" << r; + } +*/ d->setWindowState(floating, false, floating ? r : QRect()); if (floating && r.isNull()) { - if (x() < 0 || y() < 0) //may happen if we have been hidden + qDebug() << __FUNCTION__ <