diff --git a/src/private/WidgetResizeHandler.cpp b/src/private/WidgetResizeHandler.cpp index 222e2b7c..eac3558a 100644 --- a/src/private/WidgetResizeHandler.cpp +++ b/src/private/WidgetResizeHandler.cpp @@ -51,6 +51,11 @@ WidgetResizeHandler::~WidgetResizeHandler() { } +void WidgetResizeHandler::setAllowedResizeSides(CursorPositions sides) +{ + mAllowedResizeSides = sides; +} + bool WidgetResizeHandler::eventFilter(QObject *o, QEvent *e) { if (s_disableAllHandlers) @@ -367,6 +372,9 @@ void WidgetResizeHandler::updateCursor(CursorPosition m) case CursorPosition_Undefined: restoreMouseCursor(); break; + case CursorPosition_All: + // Doesn't happen + break; } } @@ -408,5 +416,8 @@ WidgetResizeHandler::CursorPosition WidgetResizeHandler::cursorPosition(QPoint g else if (qAbs(y - (mTarget->height() - margin)) <= margin) result |= CursorPosition_Bottom; + // Filter out sides we don't allow + result = result & mAllowedResizeSides; + return static_cast(result); } diff --git a/src/private/WidgetResizeHandler_p.h b/src/private/WidgetResizeHandler_p.h index eea32241..fbdecab7 100644 --- a/src/private/WidgetResizeHandler_p.h +++ b/src/private/WidgetResizeHandler_p.h @@ -40,8 +40,10 @@ public: CursorPosition_TopLeft = CursorPosition_Top | CursorPosition_Left, CursorPosition_TopRight = CursorPosition_Top | CursorPosition_Right, CursorPosition_BottomRight = CursorPosition_Bottom | CursorPosition_Right, - CursorPosition_BottomLeft = CursorPosition_Bottom | CursorPosition_Left + CursorPosition_BottomLeft = CursorPosition_Bottom | CursorPosition_Left, + CursorPosition_All = CursorPosition_Left | CursorPosition_Right | CursorPosition_Top | CursorPosition_Bottom }; + Q_DECLARE_FLAGS(CursorPositions, CursorPosition) /** * @brief CTOR @@ -50,6 +52,14 @@ public: explicit WidgetResizeHandler(bool filterIsGlobal, QWidgetOrQuick *target); ~WidgetResizeHandler() override; + /** + * @brief Sets the sides the user is allowed to resize with mouse. + * + * By default the user can resize all 4 sides. + * However, when a dock widget is overlayed (popuped), only one side can be resized. + */ + void setAllowedResizeSides(CursorPositions); + #ifdef Q_OS_WIN static bool handleWindowsNativeEvent(FloatingWindow *w, const QByteArray &eventType, void *message, Qt5Qt6Compat::qintptr *result); #endif @@ -69,6 +79,7 @@ private: QPoint mNewPosition; bool mResizeWidget = false; const bool mFilterIsGlobal; + CursorPositions mAllowedResizeSides = CursorPosition_All; }; }