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:
committed by
Sergio Martins
parent
c55ce478df
commit
1fc57b02b3
@@ -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) {
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
@@ -259,7 +259,7 @@ void QWidgetAdapter::QQUICKITEMgeometryChanged(const QRectF &newGeometry, const
|
||||
qApp->sendEvent(this, &ev);
|
||||
}
|
||||
|
||||
Q_EMIT itemGeometryChanged();
|
||||
Q_EMIT widgetGeometryChanged();
|
||||
}
|
||||
|
||||
void QWidgetAdapter::raise()
|
||||
|
||||
@@ -237,7 +237,7 @@ 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()
|
||||
void widgetGeometryChanged(); // emitted when the geometry changes. QQuickItem::geometryChanged()
|
||||
// isn't a signal, so prefixed item
|
||||
|
||||
protected:
|
||||
|
||||
@@ -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 *)
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user