Commit 51a727fc authored by David Edmundson's avatar David Edmundson

Send requested size in all configure events

Summary:
Previously when updating the state we would send a configure event with
the size 0,0. This means the client chooses the size. For regular window
this works as most toolkits treat this to mean the size that we
previously requested. It's not explicit in the spec either way.

For maximised windows it's a problem, the spec clearly states that when
maximised clients must follow the size given. Telling the client to be
0,0 doesn't make sense.

By always sending our last requested size we remove any ambiguity.

Test Plan:
Ran
Maximised some windows and changed focus
WAYLAND_DEBUG showed we weren't sending a configure with 0,0
after startup

Reviewers: #kwin, zzag

Reviewed By: #kwin, zzag

Subscribers: zzag, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D16055
parent b1b1360e
......@@ -313,7 +313,7 @@ void ShellClient::init()
if (m_requestGeometryBlockCounter != 0 || areGeometryUpdatesBlocked()) {
return;
}
m_xdgShellSurface->configure(xdgSurfaceStates());
m_xdgShellSurface->configure(xdgSurfaceStates(), m_requestedClientSize);
};
configure();
connect(this, &AbstractClient::activeChanged, this, configure);
......@@ -1184,6 +1184,8 @@ void ShellClient::requestGeometry(const QRect &rect)
configureRequest.maximizeMode = m_requestedMaximizeMode;
const QSize size = rect.size() - QSize(borderLeft() + borderRight(), borderTop() + borderBottom());
m_requestedClientSize = size;
if (m_shellSurface) {
m_shellSurface->requestSize(size);
}
......@@ -1262,6 +1264,7 @@ void ShellClient::resizeWithChecks(int w, int h, ForceGeometry_t force)
void ShellClient::unmap()
{
m_unmapped = true;
m_requestedClientSize = QSize();
destroyWindowManagementInterface();
if (Workspace::self()) {
addWorkspaceRepaint(visibleRect());
......
......@@ -215,7 +215,12 @@ private:
KWayland::Server::ShellSurfaceInterface *m_shellSurface;
KWayland::Server::XdgShellSurfaceInterface *m_xdgShellSurface;
KWayland::Server::XdgShellPopupInterface *m_xdgShellPopup;
// size of the last buffer
QSize m_clientSize;
// last size we requested or empty if we haven't sent an explicit request to the client
// if empty the client should choose their own default size
QSize m_requestedClientSize;
struct PendingConfigureRequest {
//note for wl_shell we have no serial, so serialId and m_lastAckedConfigureRequest will always be 0
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment