mirror of
https://github.com/hyprwm/Hyprland.git
synced 2025-09-15 07:48:23 +00:00

* Window storage rework - part 1 * format * remove useless include * fix pch * format * fix crash in dwindle * fix vram leak * prefer .expired() for bool checks
23 lines
633 B
C++
23 lines
633 B
C++
#include "Signal.hpp"
|
|
#include <algorithm>
|
|
|
|
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;
|
|
}
|
|
|
|
if (dirty)
|
|
std::erase_if(m_vListeners, [](const auto& other) { return other.expired(); });
|
|
}
|
|
|
|
CHyprSignalListener CSignal::registerListener(std::function<void(std::any)> handler) {
|
|
CHyprSignalListener listener = std::make_shared<CSignalListener>(handler);
|
|
m_vListeners.emplace_back(std::weak_ptr<CSignalListener>(listener));
|
|
return listener;
|
|
}
|