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(event);
|
||||
QPointF m_pCurMousePos = {};
|
||||
const auto isWindowTopLevel = [](QObject *window) -> bool {
|
||||
Q_ASSERT(window);
|
||||
if (window->isWindowType()) {
|
||||
|
@ -486,21 +487,32 @@ bool FramelessHelper::eventFilter(QObject *object, QEvent *event)
|
|||
return false;
|
||||
};
|
||||
const auto moveOrResize =
|
||||
[this, &getWindowEdges, &isResizePermitted, &isInTitlebarArea](const QPointF &globalPoint,
|
||||
const QPointF &point,
|
||||
QObject *object) {
|
||||
[this,
|
||||
&getWindowEdges,
|
||||
&isResizePermitted,
|
||||
&isInTitlebarArea,
|
||||
&m_pCurMousePos](const QPointF &globalPoint, const QPointF &point, QObject *object) {
|
||||
Q_ASSERT(object);
|
||||
QWindow *window = getWindowHandle(object);
|
||||
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());
|
||||
if (edges == Qt::Edges{}) {
|
||||
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 {
|
||||
if (window->windowStates().testFlag(Qt::WindowState::WindowNoState)
|
||||
&& 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 {
|
||||
|
@ -568,6 +580,7 @@ bool FramelessHelper::eventFilter(QObject *object, QEvent *event)
|
|||
case QEvent::MouseMove: {
|
||||
const auto mouseEvent = static_cast<QMouseEvent *>(event);
|
||||
if (mouseEvent) {
|
||||
m_pCurMousePos = mouseEvent->screenPos();
|
||||
QWindow *window = getWindowHandle(object);
|
||||
if (window) {
|
||||
if (window->windowStates().testFlag(Qt::WindowState::WindowNoState)
|
||||
|
|
Loading…
Reference in New Issue