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 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 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 m_resource; + + uint32_t m_requestsSent = 0; }; class CServerDecorationKDEProtocol : public IWaylandProtocol {