summaryrefslogtreecommitdiff
path: root/src/render/decorations
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2023-11-13 16:42:45 +0000
committerVaxry <vaxry@vaxry.net>2023-11-13 16:42:58 +0000
commit5edb4e4a304bbef1de30a36f7b921ea328d7efc6 (patch)
treeb8cf89817bfde5739dc51e8f9e6d88cb7554c3a6 /src/render/decorations
parent4d6fa6ed0c6f10671c2bee337dc026f68cc12989 (diff)
decorations: recalc layout and positioner on add/remove
Diffstat (limited to 'src/render/decorations')
-rw-r--r--src/render/decorations/DecorationPositioner.cpp10
-rw-r--r--src/render/decorations/DecorationPositioner.hpp1
2 files changed, 11 insertions, 0 deletions
diff --git a/src/render/decorations/DecorationPositioner.cpp b/src/render/decorations/DecorationPositioner.cpp
index 937eaa9a..b41b92a9 100644
--- a/src/render/decorations/DecorationPositioner.cpp
+++ b/src/render/decorations/DecorationPositioner.cpp
@@ -95,6 +95,16 @@ void CDecorationPositioner::sanitizeDatas() {
});
}
+void CDecorationPositioner::forceRecalcFor(CWindow* pWindow) {
+ const auto WIT = std::find_if(m_mWindowDatas.begin(), m_mWindowDatas.end(), [&](const auto& other) { return other.first == pWindow; });
+ if (WIT == m_mWindowDatas.end())
+ return;
+
+ const auto WINDOWDATA = &WIT->second;
+
+ WINDOWDATA->needsRecalc = true;
+}
+
void CDecorationPositioner::onWindowUpdate(CWindow* pWindow) {
if (!g_pCompositor->windowExists(pWindow) || !pWindow->m_bIsMapped)
return;
diff --git a/src/render/decorations/DecorationPositioner.hpp b/src/render/decorations/DecorationPositioner.hpp
index ae4a814a..740b4efe 100644
--- a/src/render/decorations/DecorationPositioner.hpp
+++ b/src/render/decorations/DecorationPositioner.hpp
@@ -71,6 +71,7 @@ class CDecorationPositioner {
CBox getBoxWithIncludedDecos(CWindow* pWindow);
void repositionDeco(IHyprWindowDecoration* deco);
CBox getWindowDecorationBox(IHyprWindowDecoration* deco);
+ void forceRecalcFor(CWindow* pWindow);
private:
struct SWindowPositioningData {