From e701768d5d3a08907e8087222aeec89d8f83b889 Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Thu, 23 Jul 2026 21:20:03 +0200 Subject: [PATCH] protocols/outputMgmt: fix reload not being fired after no-op commits (#15570) ref #15526 --- src/config/shared/monitor/MonitorRuleManager.cpp | 5 ++++- src/config/shared/monitor/MonitorRuleManager.hpp | 4 ++++ src/protocols/OutputManagement.cpp | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/config/shared/monitor/MonitorRuleManager.cpp b/src/config/shared/monitor/MonitorRuleManager.cpp index 20ddb18d2..678e020df 100644 --- a/src/config/shared/monitor/MonitorRuleManager.cpp +++ b/src/config/shared/monitor/MonitorRuleManager.cpp @@ -12,6 +12,7 @@ #include "../../../state/MonitorState.hpp" #include +#include using namespace Config; @@ -131,7 +132,9 @@ void CMonitorRuleManager::scheduleReload() { } void CMonitorRuleManager::ensureMonitorStatus() { - std::vector monsForRefresh; + std::vector monsForRefresh; + + Hyprutils::Utils::CScopeGuard x([this] { m_events.stateReloaded.emit(); }); for (auto const& m : State::monitorState()->allMonitors()) { if (!m || !m->m_output || m->m_isUnsafeFallback) diff --git a/src/config/shared/monitor/MonitorRuleManager.hpp b/src/config/shared/monitor/MonitorRuleManager.hpp index c37b66395..156b47cca 100644 --- a/src/config/shared/monitor/MonitorRuleManager.hpp +++ b/src/config/shared/monitor/MonitorRuleManager.hpp @@ -26,6 +26,10 @@ namespace Config { const std::vector& all(); std::vector& allMut(); + struct { + CSignalT<> stateReloaded; + } m_events; + private: std::vector m_rules; bool m_reloadScheduled = false; diff --git a/src/protocols/OutputManagement.cpp b/src/protocols/OutputManagement.cpp index 8d46977ff..5b25c3dac 100644 --- a/src/protocols/OutputManagement.cpp +++ b/src/protocols/OutputManagement.cpp @@ -577,7 +577,7 @@ bool COutputConfigurationHead::good() { } COutputManagementProtocol::COutputManagementProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { - static auto P = Event::bus()->m_events.monitor.layoutChanged.listen([this] { + static auto P = Config::monitorRuleMgr()->m_events.stateReloaded.listen([this] { updateAllOutputs(); sendPendingSuccessEvents(); });