diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index ec8209da..24ffde58 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -81,7 +81,7 @@ MainWindow::MainWindow(const QString &name, MainWindowOptions options, auto centralWidget = new MyCentralWidget(this); auto layout = new QHBoxLayout(centralWidget); // 1 level of indirection so we can add some margins layout->setSpacing(0); - layout->setContentsMargins(1, 5, 1, 1); + layout->setContentsMargins(centerWidgetMargins()); if (d->m_supportsAutoHide) { layout->addWidget(sideBar(SideBarLocation::West)); @@ -122,3 +122,8 @@ void MainWindow::resizeEvent(QResizeEvent *ev) MainWindowBase::resizeEvent(ev); onResized(ev); // Also call our own handler, since QtQuick doesn't have resizeEvent() } + +QMargins MainWindow::centerWidgetMargins() const +{ + return { 1, 5, 1, 1}; +} diff --git a/src/MainWindow.h b/src/MainWindow.h index e273707e..673a2466 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -52,7 +52,7 @@ public: protected: void resizeEvent(QResizeEvent *) override; - + QMargins centerWidgetMargins() const override; private: using QMainWindow::setCentralWidget; void setCentralWidget(QWidget *); // overridden just to make it private diff --git a/src/MainWindowBase.cpp b/src/MainWindowBase.cpp index 4fef53d2..07fabe5c 100644 --- a/src/MainWindowBase.cpp +++ b/src/MainWindowBase.cpp @@ -163,8 +163,8 @@ QRect MainWindowBase::Private::rectForOverlay(Frame *frame, SideBarLocation loca if (!sb) return {}; - DropArea *da = q->dropArea(); - const QPoint dropAreaPos = da->mapTo(q, QPoint(0,0)); + const QWidget *centralWidget = q->centralWidget(); + //const QPoint dropAreaPos = da->mapTo(q, QPoint(0,0)); QRect rect; switch (location) { @@ -173,11 +173,11 @@ QRect MainWindowBase::Private::rectForOverlay(Frame *frame, SideBarLocation loca const int margin = 1; rect.setHeight(qMax(200, frame->minSize().height())); rect.setWidth(q->width() - margin * 2); - rect.moveLeft(margin * 2); + rect.moveLeft(margin); if (location == SideBarLocation::South) { - rect.moveTop(q->height() - rect.height() - sb->height()); + rect.moveTop(centralWidget->geometry().bottom() - q->centerWidgetMargins().bottom() - rect.height() - sb->height()); } else { - rect.moveTop(dropAreaPos.y() + sb->height()); + rect.moveTop(centralWidget->y() + sb->height() + q->centerWidgetMargins().top()); } break; } @@ -189,7 +189,7 @@ QRect MainWindowBase::Private::rectForOverlay(Frame *frame, SideBarLocation loca if (location == SideBarLocation::South) { rect.moveLeft(q->width() - rect.width() - sb->width()); } else { - rect.moveLeft(dropAreaPos.x() + sb->width()); + rect.moveLeft(centralWidget->x() + sb->width()); } break; @@ -290,7 +290,6 @@ void MainWindowBase::overlayOnSideBar(DockWidgetBase *dw) d->m_overlayedDockWidget = dw; frame->addWidget(dw); d->updateOverlayGeometry(); - frame->QWidgetAdapter::setGeometry(d->rectForOverlay(frame, sb->location())); frame->QWidgetAdapter::show(); Q_EMIT dw->isOverlayedChanged(true); diff --git a/src/MainWindowBase.h b/src/MainWindowBase.h index 1d92e30b..59a8c6af 100644 --- a/src/MainWindowBase.h +++ b/src/MainWindowBase.h @@ -26,6 +26,7 @@ #include "LayoutSaver_p.h" #include +#include namespace KDDockWidgets { @@ -165,6 +166,7 @@ public: protected: void setUniqueName(const QString &uniqueName); void onResized(QResizeEvent *); // Because QtQuick doesn't have resizeEvent() + virtual QMargins centerWidgetMargins() const = 0; virtual SideBar* sideBar(SideBarLocation) const = 0;