UNIX: fall back to traditional way.
The startSystemMove and startSystemResize may return false on some systems, just fallback to use the old way to move and resize the window. Signed-off-by: Yuhang Zhao <2546789017@qq.com>
This commit is contained in:
parent
d06a5ccab9
commit
b5e497e6ff
|
@ -319,6 +319,7 @@ bool FramelessHelper::eventFilter(QObject *object, QEvent *event)
|
||||||
{
|
{
|
||||||
Q_ASSERT(object);
|
Q_ASSERT(object);
|
||||||
Q_ASSERT(event);
|
Q_ASSERT(event);
|
||||||
|
QPointF m_pCurMousePos = {};
|
||||||
const auto isWindowTopLevel = [](QObject *window) -> bool {
|
const auto isWindowTopLevel = [](QObject *window) -> bool {
|
||||||
Q_ASSERT(window);
|
Q_ASSERT(window);
|
||||||
if (window->isWindowType()) {
|
if (window->isWindowType()) {
|
||||||
|
@ -486,21 +487,32 @@ bool FramelessHelper::eventFilter(QObject *object, QEvent *event)
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
const auto moveOrResize =
|
const auto moveOrResize =
|
||||||
[this, &getWindowEdges, &isResizePermitted, &isInTitlebarArea](const QPointF &globalPoint,
|
[this,
|
||||||
const QPointF &point,
|
&getWindowEdges,
|
||||||
QObject *object) {
|
&isResizePermitted,
|
||||||
|
&isInTitlebarArea,
|
||||||
|
&m_pCurMousePos](const QPointF &globalPoint, const QPointF &point, QObject *object) {
|
||||||
Q_ASSERT(object);
|
Q_ASSERT(object);
|
||||||
QWindow *window = getWindowHandle(object);
|
QWindow *window = getWindowHandle(object);
|
||||||
if (window) {
|
if (window) {
|
||||||
|
const int deltaX = m_pCurMousePos.x() - globalPoint.x();
|
||||||
|
const int deltaY = m_pCurMousePos.y() - globalPoint.y();
|
||||||
const Qt::Edges edges = getWindowEdges(point, window->width(), window->height());
|
const Qt::Edges edges = getWindowEdges(point, window->width(), window->height());
|
||||||
if (edges == Qt::Edges{}) {
|
if (edges == Qt::Edges{}) {
|
||||||
if (isInTitlebarArea(globalPoint, point, object)) {
|
if (isInTitlebarArea(globalPoint, point, object)) {
|
||||||
window->startSystemMove();
|
if (!window->startSystemMove()) {
|
||||||
|
// Fallback to the traditional way.
|
||||||
|
window->setX(window->x() + deltaX);
|
||||||
|
window->setY(window->y() + deltaY);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (window->windowStates().testFlag(Qt::WindowState::WindowNoState)
|
if (window->windowStates().testFlag(Qt::WindowState::WindowNoState)
|
||||||
&& isResizePermitted(globalPoint, point, object) && getResizable(object)) {
|
&& isResizePermitted(globalPoint, point, object) && getResizable(object)) {
|
||||||
window->startSystemResize(edges);
|
if (!window->startSystemResize(edges)) {
|
||||||
|
// Fallback to the traditional way.
|
||||||
|
window->resize(window->width() + deltaX, window->height() + deltaY);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -568,6 +580,7 @@ bool FramelessHelper::eventFilter(QObject *object, QEvent *event)
|
||||||
case QEvent::MouseMove: {
|
case QEvent::MouseMove: {
|
||||||
const auto mouseEvent = static_cast<QMouseEvent *>(event);
|
const auto mouseEvent = static_cast<QMouseEvent *>(event);
|
||||||
if (mouseEvent) {
|
if (mouseEvent) {
|
||||||
|
m_pCurMousePos = mouseEvent->screenPos();
|
||||||
QWindow *window = getWindowHandle(object);
|
QWindow *window = getWindowHandle(object);
|
||||||
if (window) {
|
if (window) {
|
||||||
if (window->windowStates().testFlag(Qt::WindowState::WindowNoState)
|
if (window->windowStates().testFlag(Qt::WindowState::WindowNoState)
|
||||||
|
|
Loading…
Reference in New Issue