mirror of
https://github.com/hyprwm/Hyprland.git
synced 2025-05-19 08:30:22 -07:00
eventLoop: fixup event source callbacks
This commit is contained in:
parent
d9c8a37811
commit
eb3b38d40b
@ -70,16 +70,20 @@ static int handleWaiterFD(int fd, uint32_t mask, void* data) {
|
|||||||
void CEventLoopManager::onFdReadable(SReadableWaiter* waiter) {
|
void CEventLoopManager::onFdReadable(SReadableWaiter* waiter) {
|
||||||
auto it = std::ranges::find_if(m_readableWaiters, [waiter](const UP<SReadableWaiter>& w) { return waiter == w.get() && w->fd == waiter->fd && w->source == waiter->source; });
|
auto it = std::ranges::find_if(m_readableWaiters, [waiter](const UP<SReadableWaiter>& w) { return waiter == w.get() && w->fd == waiter->fd && w->source == waiter->source; });
|
||||||
|
|
||||||
if (waiter->source) {
|
// ???
|
||||||
wl_event_source_remove(waiter->source);
|
if (it == m_readableWaiters.end())
|
||||||
waiter->source = nullptr;
|
return;
|
||||||
|
|
||||||
|
UP<SReadableWaiter> taken = std::move(*it);
|
||||||
|
m_readableWaiters.erase(it);
|
||||||
|
|
||||||
|
if (taken->source) {
|
||||||
|
wl_event_source_remove(taken->source);
|
||||||
|
taken->source = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (waiter->fn)
|
if (taken->fn)
|
||||||
waiter->fn();
|
taken->fn();
|
||||||
|
|
||||||
if (it != m_readableWaiters.end())
|
|
||||||
m_readableWaiters.erase(it);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CEventLoopManager::enterLoop() {
|
void CEventLoopManager::enterLoop() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user