#include "Signal.hpp" #include void CSignal::emit(std::any data) { bool dirty = false; for (auto& l : m_vListeners) { if (const CHyprSignalListener L = l.lock()) L->emit(data); else dirty = true; } for (auto& l : m_vStaticListeners) { l->emit(data); } if (dirty) std::erase_if(m_vListeners, [](const auto& other) { return other.expired(); }); } CHyprSignalListener CSignal::registerListener(std::function handler) { CHyprSignalListener listener = std::make_shared(handler); m_vListeners.emplace_back(std::weak_ptr(listener)); return listener; } void CSignal::registerStaticListener(std::function handler, void* owner) { m_vStaticListeners.emplace_back(std::make_unique(handler, owner)); }