From 7299a3b0d5332da030e980e60b0ee35b93387cff Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Tue, 3 Mar 2026 13:03:47 +0000 Subject: hyprctl: fix workspace dynamic effect reloading (#13537) ref https://github.com/hyprwm/Hyprland/discussions/12806 --- src/debug/HyprCtl.cpp | 9 +++++++++ src/desktop/rule/windowRule/WindowRuleApplicator.cpp | 2 ++ src/desktop/view/Window.cpp | 14 ++++++-------- src/layout/target/WindowTarget.cpp | 1 + 4 files changed, 18 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index 1fcb3dd1..417767e1 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -2197,6 +2197,15 @@ std::string CHyprCtl::getReply(std::string request) { Desktop::Rule::ruleEngine()->updateAllRules(); } + for (const auto& ws : g_pCompositor->getWorkspaces()) { + if (!ws) + continue; + + ws->updateWindows(); + ws->updateWindowData(); + ws->updateWindowDecos(); + } + for (auto const& m : g_pCompositor->m_monitors) { g_pHyprRenderer->damageMonitor(m); } diff --git a/src/desktop/rule/windowRule/WindowRuleApplicator.cpp b/src/desktop/rule/windowRule/WindowRuleApplicator.cpp index 45a52471..07cb5f64 100644 --- a/src/desktop/rule/windowRule/WindowRuleApplicator.cpp +++ b/src/desktop/rule/windowRule/WindowRuleApplicator.cpp @@ -630,6 +630,8 @@ void CWindowRuleApplicator::propertiesChanged(std::underlying_type_tupdateWindowData(); + m_window->updateWindowDecos(); m_window->updateDecorationValues(); if (needsRelayout) diff --git a/src/desktop/view/Window.cpp b/src/desktop/view/Window.cpp index 5871456b..77c5f330 100644 --- a/src/desktop/view/Window.cpp +++ b/src/desktop/view/Window.cpp @@ -510,12 +510,6 @@ void CWindow::moveToWorkspace(PHLWORKSPACE pWorkspace) { setAnimationsToMove(); - OLDWORKSPACE->updateWindows(); - OLDWORKSPACE->updateWindowData(); - - pWorkspace->updateWindows(); - pWorkspace->updateWindowData(); - g_pCompositor->updateAllWindowsAnimatedDecorationValues(); if (valid(pWorkspace)) { @@ -807,9 +801,13 @@ void CWindow::updateWindowData() { } void CWindow::updateWindowData(const SWorkspaceRule& workspaceRule) { - m_ruleApplicator->borderSize().matchOptional(workspaceRule.borderSize, Desktop::Types::PRIORITY_WORKSPACE_RULE); + if (workspaceRule.noBorder.value_or(false)) + m_ruleApplicator->borderSize().matchOptional(std::optional(0), Desktop::Types::PRIORITY_WORKSPACE_RULE); + else if (workspaceRule.borderSize) + m_ruleApplicator->borderSize().matchOptional(workspaceRule.borderSize, Desktop::Types::PRIORITY_WORKSPACE_RULE); + else + m_ruleApplicator->borderSize().matchOptional(std::nullopt, Desktop::Types::PRIORITY_WORKSPACE_RULE); m_ruleApplicator->decorate().matchOptional(workspaceRule.decorate, Desktop::Types::PRIORITY_WORKSPACE_RULE); - m_ruleApplicator->borderSize().matchOptional(workspaceRule.noBorder ? std::optional(0) : std::nullopt, Desktop::Types::PRIORITY_WORKSPACE_RULE); m_ruleApplicator->rounding().matchOptional(workspaceRule.noRounding.value_or(false) ? std::optional(0) : std::nullopt, Desktop::Types::PRIORITY_WORKSPACE_RULE); m_ruleApplicator->noShadow().matchOptional(workspaceRule.noShadow, Desktop::Types::PRIORITY_WORKSPACE_RULE); } diff --git a/src/layout/target/WindowTarget.cpp b/src/layout/target/WindowTarget.cpp index ec4efb03..db03a385 100644 --- a/src/layout/target/WindowTarget.cpp +++ b/src/layout/target/WindowTarget.cpp @@ -377,5 +377,6 @@ void CWindowTarget::onUpdateSpace() { m_window->m_monitor = space()->workspace()->m_monitor; m_window->moveToWorkspace(space()->workspace()); m_window->updateToplevel(); + m_window->updateWindowData(); m_window->updateWindowDecos(); } -- cgit v1.2.3