diff options
| author | Vaxry <vaxry@vaxry.net> | 2025-09-04 10:16:54 +0100 |
|---|---|---|
| committer | Vaxry <vaxry@vaxry.net> | 2025-09-04 10:16:54 +0100 |
| commit | 4e785d12a91117cd5b255052799d1a051d9976c0 (patch) | |
| tree | fd2babf32fc15f12d2c4fd36ea88c0d0ca11447c /src/protocols | |
| parent | 127aab815908ecbd3db4d23f127d2e96b79855f9 (diff) | |
protocols/kde-deco: fix tug of war in deco mode
fixes #11591
Diffstat (limited to 'src/protocols')
| -rw-r--r-- | src/protocols/ServerDecorationKDE.cpp | 10 | ||||
| -rw-r--r-- | src/protocols/ServerDecorationKDE.hpp | 6 |
2 files changed, 11 insertions, 5 deletions
diff --git a/src/protocols/ServerDecorationKDE.cpp b/src/protocols/ServerDecorationKDE.cpp index 8f625168..1db5a0c6 100644 --- a/src/protocols/ServerDecorationKDE.cpp +++ b/src/protocols/ServerDecorationKDE.cpp @@ -8,16 +8,20 @@ CServerDecorationKDE::CServerDecorationKDE(SP<COrgKdeKwinServerDecoration> resou m_resource->setRelease([this](COrgKdeKwinServerDecoration* pMgr) { PROTO::serverDecorationKDE->destroyResource(this); }); m_resource->setOnDestroy([this](COrgKdeKwinServerDecoration* pMgr) { PROTO::serverDecorationKDE->destroyResource(this); }); m_resource->setRequestMode([this](COrgKdeKwinServerDecoration*, uint32_t mode) { + if (m_requestsSent > 3) + return; // don't start a tug of war + auto sendMode = kdeModeOnRequestCSD(mode); m_resource->sendMode(sendMode); - mostRecentlySent = sendMode; - mostRecentlyRequested = mode; + m_mostRecentlySent = sendMode; + m_mostRecentlyRequested = mode; + m_requestsSent++; }); // we send this and ignore request_mode. auto sendMode = kdeDefaultModeCSD(); m_resource->sendMode(sendMode); - mostRecentlySent = sendMode; + m_mostRecentlySent = sendMode; } bool CServerDecorationKDE::good() { diff --git a/src/protocols/ServerDecorationKDE.hpp b/src/protocols/ServerDecorationKDE.hpp index aa350093..7eb2395a 100644 --- a/src/protocols/ServerDecorationKDE.hpp +++ b/src/protocols/ServerDecorationKDE.hpp @@ -13,8 +13,8 @@ class CServerDecorationKDE { SP<CWLSurfaceResource> m_surf; - uint32_t mostRecentlySent = 0; - uint32_t mostRecentlyRequested = 0; + uint32_t m_mostRecentlySent = 0; + uint32_t m_mostRecentlyRequested = 0; bool good(); @@ -24,6 +24,8 @@ class CServerDecorationKDE { uint32_t kdeModeOnReleaseCSD(); SP<COrgKdeKwinServerDecoration> m_resource; + + uint32_t m_requestsSent = 0; }; class CServerDecorationKDEProtocol : public IWaylandProtocol { |
