Frame now takes care of its own resize handler

No need to set it from outside
This commit is contained in:
Sergio Martins
2021-02-11 18:56:45 +00:00
parent 64db52fd17
commit 7dcc6dc114
3 changed files with 23 additions and 3 deletions

View File

@@ -493,9 +493,7 @@ void MainWindowBase::overlayOnSideBar(DockWidgetBase *dw)
frame->addWidget(dw);
d->updateOverlayGeometry(dw->d->lastPositions().lastOverlayedGeometry(sb->location()).size());
auto resizeHandler = new WidgetResizeHandler(true, frame);
resizeHandler->setAllowedResizeSides(d->allowedResizeSides(sb->location()));
frame->setAllowedResizeSides(d->allowedResizeSides(sb->location()));
frame->QWidgetAdapter::show();
Q_EMIT dw->isOverlayedChanged(true);

View File

@@ -29,6 +29,7 @@
#include "TabWidget_p.h"
#include "TitleBar_p.h"
#include "Utils_p.h"
#include "WidgetResizeHandler_p.h"
#include <QCloseEvent>
#include <QTimer>
@@ -75,6 +76,9 @@ Frame::~Frame()
if (m_layoutItem)
m_layoutItem->unref();
delete m_resizeHandler;
m_resizeHandler = nullptr;
DockRegistry::self()->unregisterFrame(this);
// Run some disconnects() too, so we don't receive signals during destruction:
@@ -747,3 +751,15 @@ bool Frame::anyDockWidgetsHas(DockWidgetBase::LayoutSaverOption option) const
return dw->layoutSaverOptions() & option;
});
}
void Frame::setAllowedResizeSides(CursorPositions sides)
{
if (sides) {
delete m_resizeHandler;
m_resizeHandler = new WidgetResizeHandler(true, this);
m_resizeHandler->setAllowedResizeSides(sides);
} else {
delete m_resizeHandler;
m_resizeHandler = nullptr;
}
}

View File

@@ -39,6 +39,7 @@ class TabWidget;
class DockWidgetBase;
class FloatingWindow;
class MainWindowBase;
class WidgetResizeHandler;
/**
* @brief A DockWidget wrapper that adds a QTabWidget and a TitleBar
@@ -250,6 +251,10 @@ public:
///@brief Returns whether at least one dock widget has the specified layout saver option set
bool anyDockWidgetsHas(DockWidgetBase::LayoutSaverOption) const;
/// @brief Usually we do resize via the native window manager, but if a widget is docked like
/// in MDI mode, or in overlayed mode then we allow the user to resize with mouse
void setAllowedResizeSides(CursorPositions sides);
Q_SIGNALS:
void currentDockWidgetChanged(KDDockWidgets::DockWidgetBase *);
void numDockWidgetsChanged();
@@ -319,6 +324,7 @@ private:
void setLayoutWidget(LayoutWidget *);
LayoutWidget *m_layoutWidget = nullptr;
WidgetResizeHandler *m_resizeHandler = nullptr;
FrameOptions m_options = FrameOption_None;
QPointer<Layouting::Item> m_layoutItem;
bool m_updatingTitleBar = false;