diff --git a/shell_client.h b/shell_client.h --- a/shell_client.h +++ b/shell_client.h @@ -269,11 +269,7 @@ { m_client->m_requestGeometryBlockCounter--; if (m_client->m_requestGeometryBlockCounter == 0) { - if (m_client->m_blockedRequestGeometry.isValid()) { - m_client->requestGeometry(m_client->m_blockedRequestGeometry); - } else if (m_client->m_xdgShellSurface) { - m_client->m_xdgShellSurface->configure(m_client->xdgSurfaceStates()); - } + m_client->requestGeometry(m_client->m_blockedRequestGeometry); } } private: diff --git a/shell_client.cpp b/shell_client.cpp --- a/shell_client.cpp +++ b/shell_client.cpp @@ -1084,29 +1084,39 @@ m_blockedRequestGeometry = rect; return false; } - PendingConfigureRequest configureRequest; - configureRequest.positionAfterResize = rect.topLeft(); - configureRequest.maximizeMode = m_requestedMaximizeMode; - const QSize size = rect.size() - QSize(borderLeft() + borderRight(), borderTop() + borderBottom()); + QSize size; + if (rect.isValid()) { + size = rect.size() - QSize(borderLeft() + borderRight(), borderTop() + borderBottom()); + } else { + size = QSize(0, 0); + } m_requestedClientSize = size; - if (m_shellSurface) { + quint64 serialId = 0; + + if (m_shellSurface && !size.isEmpty()) { m_shellSurface->requestSize(size); } if (m_xdgShellSurface) { - configureRequest.serialId = m_xdgShellSurface->configure(xdgSurfaceStates(), size); + serialId = m_xdgShellSurface->configure(xdgSurfaceStates(), size); } if (m_xdgShellPopup) { auto parent = transientFor(); if (parent) { const QPoint globalClientContentPos = parent->geometry().topLeft() + parent->clientPos(); - const QPoint relativeOffset = rect.topLeft() -globalClientContentPos; - configureRequest.serialId = m_xdgShellPopup->configure(QRect(relativeOffset, rect.size())); + const QPoint relativeOffset = rect.topLeft() - globalClientContentPos; + serialId = m_xdgShellPopup->configure(QRect(relativeOffset, rect.size())); } } - m_pendingConfigureRequests.append(configureRequest); + if (rect.isValid()) { //if there's no requested size, then there's implicity no positional information worth using + PendingConfigureRequest configureRequest; + configureRequest.serialId = serialId; + configureRequest.positionAfterResize = rect.topLeft(); + configureRequest.maximizeMode = m_requestedMaximizeMode; + m_pendingConfigureRequests.append(configureRequest); + } m_blockedRequestGeometry = QRect(); return true;