mirror of
https://github.com/hyprwm/Hyprland
synced 2024-12-23 02:09:48 +01:00
decorations: recalc layout and positioner on add/remove
This commit is contained in:
parent
4d6fa6ed0c
commit
5edb4e4a30
3 changed files with 15 additions and 0 deletions
|
@ -202,12 +202,16 @@ void CWindow::updateWindowDecos() {
|
|||
|
||||
void CWindow::addWindowDeco(std::unique_ptr<IHyprWindowDecoration> deco) {
|
||||
m_dWindowDecorations.emplace_back(std::move(deco));
|
||||
g_pDecorationPositioner->forceRecalcFor(this);
|
||||
updateWindowDecos();
|
||||
g_pLayoutManager->getCurrentLayout()->recalculateWindow(this);
|
||||
}
|
||||
|
||||
void CWindow::removeWindowDeco(IHyprWindowDecoration* deco) {
|
||||
m_vDecosToRemove.push_back(deco);
|
||||
g_pDecorationPositioner->forceRecalcFor(this);
|
||||
updateWindowDecos();
|
||||
g_pLayoutManager->getCurrentLayout()->recalculateWindow(this);
|
||||
}
|
||||
|
||||
pid_t CWindow::getPID() {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in a new issue