summaryrefslogtreecommitdiff
path: root/src/protocols
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2025-09-04 10:16:54 +0100
committerVaxry <vaxry@vaxry.net>2025-09-04 10:16:54 +0100
commit4e785d12a91117cd5b255052799d1a051d9976c0 (patch)
treefd2babf32fc15f12d2c4fd36ea88c0d0ca11447c /src/protocols
parent127aab815908ecbd3db4d23f127d2e96b79855f9 (diff)
protocols/kde-deco: fix tug of war in deco mode
fixes #11591
Diffstat (limited to 'src/protocols')
-rw-r--r--src/protocols/ServerDecorationKDE.cpp10
-rw-r--r--src/protocols/ServerDecorationKDE.hpp6
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 {