summaryrefslogtreecommitdiff
path: root/src/protocols/FractionalScale.cpp
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2025-01-22 10:41:04 +0000
committerVaxry <vaxry@vaxry.net>2025-01-22 10:41:04 +0000
commitd335c8f10135e165a1085fd14134c659e4caf05a (patch)
tree300cd4bd6bee351fc46eb73dc90058676ffa1864 /src/protocols/FractionalScale.cpp
parentc8a0443adc2711744e080c28e763443b1eef115e (diff)
fractional-scale: avoid redundant and duplicate scale events
fixes #9126
Diffstat (limited to 'src/protocols/FractionalScale.cpp')
-rw-r--r--src/protocols/FractionalScale.cpp29
1 files changed, 15 insertions, 14 deletions
diff --git a/src/protocols/FractionalScale.cpp b/src/protocols/FractionalScale.cpp
index d1e0a604..3b24becd 100644
--- a/src/protocols/FractionalScale.cpp
+++ b/src/protocols/FractionalScale.cpp
@@ -41,13 +41,14 @@ void CFractionalScaleProtocol::onGetFractionalScale(CWpFractionalScaleManagerV1*
return;
}
- PADDON->resource->setOnDestroy([this, PADDON](CWpFractionalScaleV1* self) { this->removeAddon(PADDON); });
- PADDON->resource->setDestroy([this, PADDON](CWpFractionalScaleV1* self) { this->removeAddon(PADDON); });
+ PADDON->m_resource->setOnDestroy([this, PADDON](CWpFractionalScaleV1* self) { this->removeAddon(PADDON); });
+ PADDON->m_resource->setDestroy([this, PADDON](CWpFractionalScaleV1* self) { this->removeAddon(PADDON); });
- if (std::find_if(m_mSurfaceScales.begin(), m_mSurfaceScales.end(), [surface](const auto& e) { return e.first == surface; }) == m_mSurfaceScales.end())
+ if (std::ranges::find_if(m_mSurfaceScales, [surface](const auto& e) { return e.first == surface; }) == m_mSurfaceScales.end())
m_mSurfaceScales.emplace(surface, 1.F);
- PADDON->setScale(m_mSurfaceScales.at(surface));
+ if (surface->mapped)
+ PADDON->setScale(m_mSurfaceScales.at(surface));
// clean old
std::erase_if(m_mSurfaceScales, [](const auto& e) { return e.first.expired(); });
@@ -59,23 +60,23 @@ void CFractionalScaleProtocol::sendScale(SP<CWLSurfaceResource> surf, const floa
m_mAddons[surf]->setScale(scale);
}
-CFractionalScaleAddon::CFractionalScaleAddon(SP<CWpFractionalScaleV1> resource_, SP<CWLSurfaceResource> surf_) : resource(resource_), surface(surf_) {
- resource->setDestroy([this](CWpFractionalScaleV1* self) { PROTO::fractional->removeAddon(this); });
- resource->setOnDestroy([this](CWpFractionalScaleV1* self) { PROTO::fractional->removeAddon(this); });
-}
-
-void CFractionalScaleAddon::onSurfaceDestroy() {
- surfaceGone = true;
+CFractionalScaleAddon::CFractionalScaleAddon(SP<CWpFractionalScaleV1> resource_, SP<CWLSurfaceResource> surf_) : m_resource(resource_), m_surface(surf_) {
+ m_resource->setDestroy([this](CWpFractionalScaleV1* self) { PROTO::fractional->removeAddon(this); });
+ m_resource->setOnDestroy([this](CWpFractionalScaleV1* self) { PROTO::fractional->removeAddon(this); });
}
void CFractionalScaleAddon::setScale(const float& scale) {
- resource->sendPreferredScale(std::round(scale * 120.0));
+ if (m_scale == scale)
+ return;
+
+ m_scale = scale;
+ m_resource->sendPreferredScale(std::round(scale * 120.0));
}
bool CFractionalScaleAddon::good() {
- return resource->resource();
+ return m_resource->resource();
}
SP<CWLSurfaceResource> CFractionalScaleAddon::surf() {
- return surface.lock();
+ return m_surface.lock();
}