ladybird/Libraries/LibCore/CNotifier.cpp
Robin Burchell d8387f1506 CNotifier: Turn into a CObject and Use the event queue to deliver events
This way, CNotifier can mutate state to its little heart's content
without destroying the world when the global CNotifier hash changes
during delivery.
2019-07-16 20:47:32 +02:00

35 lines
737 B
C++

#include <LibCore/CEvent.h>
#include <LibCore/CEventLoop.h>
#include <LibCore/CNotifier.h>
CNotifier::CNotifier(int fd, unsigned event_mask)
: m_fd(fd)
, m_event_mask(event_mask)
{
set_enabled(true);
}
CNotifier::~CNotifier()
{
set_enabled(false);
}
void CNotifier::set_enabled(bool enabled)
{
if (enabled)
CEventLoop::register_notifier({}, *this);
else
CEventLoop::unregister_notifier({}, *this);
}
void CNotifier::event(CEvent& event)
{
if (event.type() == CEvent::NotifierRead && on_ready_to_read) {
on_ready_to_read();
} else if (event.type() == CEvent::NotifierWrite && on_ready_to_write) {
on_ready_to_write();
} else {
CObject::event(event);
}
}