UNIX: resize: fix wrong logic.

Signed-off-by: Yuhang Zhao <2546789017@qq.com>
This commit is contained in:
Yuhang Zhao 2020-11-05 20:19:04 +08:00
parent b5e497e6ff
commit d3152df01f
1 changed files with 22 additions and 1 deletions

View File

@ -511,7 +511,28 @@ bool FramelessHelper::eventFilter(QObject *object, QEvent *event)
&& isResizePermitted(globalPoint, point, object) && getResizable(object)) { && isResizePermitted(globalPoint, point, object) && getResizable(object)) {
if (!window->startSystemResize(edges)) { if (!window->startSystemResize(edges)) {
// Fallback to the traditional way. // 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);
} }
} }
} }