Save side bar overlay geometry when frame is resized

Previously we were updating the side bar overlay geometry only when the
side bar was closed. So if we open the side bar overlay, resize it, and
save/restore the layout state, we won't get the last side bar size.

Save it every time the frame is resized.
This commit is contained in:
Mauro Persano
2023-01-26 10:25:49 -03:00
committed by Sergio Martins
parent c55ce478df
commit 1fc57b02b3
6 changed files with 19 additions and 8 deletions

View File

@@ -553,6 +553,9 @@ void MainWindowBase::overlayOnSideBar(DockWidgetBase *dw)
d->m_overlayedDockWidget = dw;
frame->addWidget(dw);
d->updateOverlayGeometry(dw->d->lastPosition()->lastOverlayedGeometry(sb->location()).size());
connect(frame, &QWidgetAdapter::widgetGeometryChanged, this, [dw, loc = sb->location(), frame] {
dw->d->lastPosition()->setLastOverlayedGeometry(loc, frame->QWidgetAdapter::geometry());
});
frame->setAllowedResizeSides(d->allowedResizeSides(sb->location()));
frame->QWidgetAdapter::show();
@@ -580,10 +583,7 @@ void MainWindowBase::clearSideBarOverlay(bool deleteFrame)
return;
}
const SideBarLocation loc = d->m_overlayedDockWidget->sideBarLocation();
d->m_overlayedDockWidget->d->lastPosition()->setLastOverlayedGeometry(
loc, frame->QWidgetAdapter::geometry());
frame->disconnect(this);
frame->unoverlay();
if (deleteFrame) {

View File

@@ -39,7 +39,7 @@ FrameQuick::FrameQuick(QWidgetAdapter *parent, FrameOptions options, int userTyp
connect(this, &QWidgetAdapter::geometryUpdated, this, &Frame::layoutInvalidated);
connect(this, &QWidgetAdapter::itemGeometryChanged, this, [this] {
connect(this, &QWidgetAdapter::widgetGeometryChanged, this, [this] {
for (auto dw : dockWidgets()) {
Q_EMIT static_cast<DockWidgetQuick *>(dw)->frameGeometryChanged(QWidgetAdapter::geometry());
}

View File

@@ -259,7 +259,7 @@ void QWidgetAdapter::QQUICKITEMgeometryChanged(const QRectF &newGeometry, const
qApp->sendEvent(this, &ev);
}
Q_EMIT itemGeometryChanged();
Q_EMIT widgetGeometryChanged();
}
void QWidgetAdapter::raise()

View File

@@ -237,8 +237,8 @@ public:
static void makeItemFillParent(QQuickItem *item);
Q_SIGNALS:
void geometryUpdated(); // similar to QLayout stuff, when size constraints change
void itemGeometryChanged(); // emitted when the geometry changes. QQuickItem::geometryChanged()
// isn't a signal, so prefixed item
void widgetGeometryChanged(); // emitted when the geometry changes. QQuickItem::geometryChanged()
// isn't a signal, so prefixed item
protected:
void create();

View File

@@ -67,6 +67,13 @@ void QWidgetAdapter::resizeEvent(QResizeEvent *ev)
{
if (!onResize(ev->size()))
QWidget::resizeEvent(ev);
Q_EMIT widgetGeometryChanged();
}
void QWidgetAdapter::moveEvent(QMoveEvent *ev)
{
QWidget::moveEvent(ev);
Q_EMIT widgetGeometryChanged();
}
void QWidgetAdapter::mousePressEvent(QMouseEvent *)

View File

@@ -95,10 +95,14 @@ public:
return isWindow();
}
Q_SIGNALS:
void widgetGeometryChanged();
protected:
void raiseAndActivate();
bool event(QEvent *e) override;
void resizeEvent(QResizeEvent *) override;
void moveEvent(QMoveEvent *) override;
void mousePressEvent(QMouseEvent *) override;
void mouseMoveEvent(QMouseEvent *) override;
void mouseReleaseEvent(QMouseEvent *) override;