Add DockRegistry::frameInMDIResize()

Only emitted in a MDI layout. Emitted when one dockwidget is
being resized
This commit is contained in:
Sergio Martins
2021-03-02 21:59:57 +00:00
parent ff06f0cc73
commit 4ef2ddbfec
6 changed files with 48 additions and 1 deletions

View File

@@ -16,12 +16,13 @@
#include "FloatingWindow_p.h"
#include "LayoutWidget_p.h"
#include "Logging_p.h"
#include "MainWindowMDI.h"
#include "Position_p.h"
#include "QWidgetAdapter.h"
#include "SideBar_p.h"
#include "Utils_p.h"
#include "WidgetResizeHandler_p.h"
#include "WindowBeingDragged_p.h"
#include "MainWindowMDI.h"
#include <QPointer>
#include <QDebug>
@@ -225,6 +226,25 @@ SideBar *DockRegistry::sideBarForDockWidget(const DockWidgetBase *dw) const
return nullptr;
}
Frame *DockRegistry::frameInMDIResize() const
{
for (auto mw : m_mainWindows) {
if (!mw->isMDI())
continue;
LayoutWidget *layout = mw->layoutWidget();
const QList<Frame *> frames = layout->frames();
for (Frame *frame : frames) {
if (WidgetResizeHandler *wrh = frame->resizeHandler()) {
if (wrh->isResizing())
return frame;
}
}
}
return nullptr;
}
MainWindowBase::List DockRegistry::mainWindowsWithAffinity(const QStringList &affinities) const
{
MainWindowBase::List result;

View File

@@ -37,6 +37,8 @@ struct WindowBeingDragged;
class DOCKS_EXPORT DockRegistry : public QObject
{
Q_OBJECT
Q_PROPERTY(
KDDockWidgets::Frame *frameInMDIResize READ frameInMDIResize NOTIFY frameInMDIResizeChanged)
public:
static DockRegistry *self();
~DockRegistry();
@@ -210,10 +212,16 @@ public:
///@brief Overload that returns the SideBar itself
SideBar *sideBarForDockWidget(const DockWidgetBase *) const;
///@brief Returns the Frame which is being resized in a MDI layout. nullptr if none
Frame *frameInMDIResize() const;
Q_SIGNALS:
/// @brief emitted when a main window or a floating window change screen
void windowChangedScreen(QWindow *);
/// @brief emitted when the MDI frame that's being resized changed
void frameInMDIResizeChanged();
protected:
bool eventFilter(QObject *watched, QEvent *event) override;
private:

View File

@@ -792,3 +792,8 @@ int Frame::userType() const
{
return m_userType;
}
WidgetResizeHandler *Frame::resizeHandler() const
{
return m_resizeHandler;
}

View File

@@ -266,6 +266,9 @@ public:
/// @brief See DockWidgetBase::userType()
int userType() const;
/// @brief Returns the resize handler. Used mostly in MDI mode.
WidgetResizeHandler *resizeHandler() const;
Q_SIGNALS:
void currentDockWidgetChanged(KDDockWidgets::DockWidgetBase *);
void numDockWidgetsChanged();

View File

@@ -66,6 +66,11 @@ bool WidgetResizeHandler::isMDI() const
return frame && frame->isMDI();
}
bool WidgetResizeHandler::isResizing() const
{
return m_resizingInProgress;
}
int WidgetResizeHandler::widgetResizeHandlerMargin()
{
return 4; // pixels
@@ -127,6 +132,8 @@ bool WidgetResizeHandler::eventFilter(QObject *o, QEvent *e)
return false;
m_resizingInProgress = true;
if (isMDI())
Q_EMIT DockRegistry::self()->frameInMDIResizeChanged();
mNewPosition = Qt5Qt6Compat::eventGlobalPos(mouseEvent);
mCursorPos = cursorPos;
@@ -134,6 +141,8 @@ bool WidgetResizeHandler::eventFilter(QObject *o, QEvent *e)
}
case QEvent::MouseButtonRelease: {
m_resizingInProgress = false;
if (isMDI())
Q_EMIT DockRegistry::self()->frameInMDIResizeChanged();
updateCursor(CursorPosition_Undefined);
auto mouseEvent = static_cast<QMouseEvent *>(e);

View File

@@ -119,6 +119,8 @@ public:
bool isMDI() const;
bool isResizing() const;
static int widgetResizeHandlerMargin();
static void setupWindow(QWindow *window);