From d3152df01f50c16fed2a1a4a7f5b2385224e38f5 Mon Sep 17 00:00:00 2001 From: Yuhang Zhao <2546789017@qq.com> Date: Thu, 5 Nov 2020 20:19:04 +0800 Subject: [PATCH] UNIX: resize: fix wrong logic. Signed-off-by: Yuhang Zhao <2546789017@qq.com> --- framelesshelper.cpp | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/framelesshelper.cpp b/framelesshelper.cpp index 83588a8..920774e 100644 --- a/framelesshelper.cpp +++ b/framelesshelper.cpp @@ -511,7 +511,28 @@ bool FramelessHelper::eventFilter(QObject *object, QEvent *event) && isResizePermitted(globalPoint, point, object) && getResizable(object)) { if (!window->startSystemResize(edges)) { // Fallback to the traditional way. - window->resize(window->width() + deltaX, window->height() + deltaY); + bool leftHandled = false, topHandled = false; + int newX = window->x(); + int newY = window->y(); + int newWidth = window->width(); + int newHeight = window->height(); + if (edges.testFlag(Qt::Edge::LeftEdge)) { + newX += deltaX; + newWidth -= deltaX; + leftHandled = true; + } + if (edges.testFlag(Qt::Edge::TopEdge)) { + newY += deltaY; + newHeight -= deltaY; + topHandled = true; + } + if (!leftHandled) { + newWidth += deltaX; + } + if (!topHandled) { + newHeight += deltaY; + } + window->setGeometry(newX, newY, newWidth, newHeight); } } }