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;
|
d->m_overlayedDockWidget = dw;
|
||||||
frame->addWidget(dw);
|
frame->addWidget(dw);
|
||||||
d->updateOverlayGeometry(dw->d->lastPosition()->lastOverlayedGeometry(sb->location()).size());
|
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->setAllowedResizeSides(d->allowedResizeSides(sb->location()));
|
||||||
frame->QWidgetAdapter::show();
|
frame->QWidgetAdapter::show();
|
||||||
@@ -580,10 +583,7 @@ void MainWindowBase::clearSideBarOverlay(bool deleteFrame)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const SideBarLocation loc = d->m_overlayedDockWidget->sideBarLocation();
|
frame->disconnect(this);
|
||||||
d->m_overlayedDockWidget->d->lastPosition()->setLastOverlayedGeometry(
|
|
||||||
loc, frame->QWidgetAdapter::geometry());
|
|
||||||
|
|
||||||
frame->unoverlay();
|
frame->unoverlay();
|
||||||
|
|
||||||
if (deleteFrame) {
|
if (deleteFrame) {
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ FrameQuick::FrameQuick(QWidgetAdapter *parent, FrameOptions options, int userTyp
|
|||||||
|
|
||||||
connect(this, &QWidgetAdapter::geometryUpdated, this, &Frame::layoutInvalidated);
|
connect(this, &QWidgetAdapter::geometryUpdated, this, &Frame::layoutInvalidated);
|
||||||
|
|
||||||
connect(this, &QWidgetAdapter::itemGeometryChanged, this, [this] {
|
connect(this, &QWidgetAdapter::widgetGeometryChanged, this, [this] {
|
||||||
for (auto dw : dockWidgets()) {
|
for (auto dw : dockWidgets()) {
|
||||||
Q_EMIT static_cast<DockWidgetQuick *>(dw)->frameGeometryChanged(QWidgetAdapter::geometry());
|
Q_EMIT static_cast<DockWidgetQuick *>(dw)->frameGeometryChanged(QWidgetAdapter::geometry());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -259,7 +259,7 @@ void QWidgetAdapter::QQUICKITEMgeometryChanged(const QRectF &newGeometry, const
|
|||||||
qApp->sendEvent(this, &ev);
|
qApp->sendEvent(this, &ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
Q_EMIT itemGeometryChanged();
|
Q_EMIT widgetGeometryChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QWidgetAdapter::raise()
|
void QWidgetAdapter::raise()
|
||||||
|
|||||||
@@ -237,8 +237,8 @@ public:
|
|||||||
static void makeItemFillParent(QQuickItem *item);
|
static void makeItemFillParent(QQuickItem *item);
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void geometryUpdated(); // similar to QLayout stuff, when size constraints change
|
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
|
// isn't a signal, so prefixed item
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void create();
|
void create();
|
||||||
|
|||||||
@@ -67,6 +67,13 @@ void QWidgetAdapter::resizeEvent(QResizeEvent *ev)
|
|||||||
{
|
{
|
||||||
if (!onResize(ev->size()))
|
if (!onResize(ev->size()))
|
||||||
QWidget::resizeEvent(ev);
|
QWidget::resizeEvent(ev);
|
||||||
|
Q_EMIT widgetGeometryChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void QWidgetAdapter::moveEvent(QMoveEvent *ev)
|
||||||
|
{
|
||||||
|
QWidget::moveEvent(ev);
|
||||||
|
Q_EMIT widgetGeometryChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QWidgetAdapter::mousePressEvent(QMouseEvent *)
|
void QWidgetAdapter::mousePressEvent(QMouseEvent *)
|
||||||
|
|||||||
@@ -95,10 +95,14 @@ public:
|
|||||||
return isWindow();
|
return isWindow();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
void widgetGeometryChanged();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void raiseAndActivate();
|
void raiseAndActivate();
|
||||||
bool event(QEvent *e) override;
|
bool event(QEvent *e) override;
|
||||||
void resizeEvent(QResizeEvent *) override;
|
void resizeEvent(QResizeEvent *) override;
|
||||||
|
void moveEvent(QMoveEvent *) override;
|
||||||
void mousePressEvent(QMouseEvent *) override;
|
void mousePressEvent(QMouseEvent *) override;
|
||||||
void mouseMoveEvent(QMouseEvent *) override;
|
void mouseMoveEvent(QMouseEvent *) override;
|
||||||
void mouseReleaseEvent(QMouseEvent *) override;
|
void mouseReleaseEvent(QMouseEvent *) override;
|
||||||
|
|||||||
Reference in New Issue
Block a user