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
This commit is contained in:
parent
b1b1360ec3
commit
51a727fc6b
2 changed files with 9 additions and 1 deletions
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue