1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 09:28:11 +00:00

LibCore+Ladybird: Add EventLoopManager interface for persistent state

Things such as timers and notifiers aren't specific to one instance of
Core::EventLoop, so let's not tie them down to EventLoopImplementation.

Instead, move those APIs + signals & a few other things to a new
EventLoopManager interface. EventLoopManager also knows how to create a
new EventLoopImplementation object.
This commit is contained in:
Andreas Kling 2023-04-25 17:38:48 +02:00
parent c21eb30a2b
commit 7b963e1e98
11 changed files with 177 additions and 118 deletions

View file

@ -7,18 +7,36 @@
#include <AK/NonnullOwnPtr.h>
#include <LibCore/Event.h>
#include <LibCore/EventLoopImplementation.h>
#include <LibCore/EventLoopImplementationUnix.h>
#include <LibCore/ThreadEventQueue.h>
namespace Core {
EventLoopImplementation::EventLoopImplementation()
EventLoopImplementation::EventLoopImplementation() = default;
EventLoopImplementation::~EventLoopImplementation() = default;
static EventLoopManager* s_event_loop_manager;
EventLoopManager& EventLoopManager::the()
{
if (!s_event_loop_manager)
s_event_loop_manager = new EventLoopManagerUnix;
return *s_event_loop_manager;
}
void EventLoopManager::install(Core::EventLoopManager& manager)
{
s_event_loop_manager = &manager;
}
EventLoopManager::EventLoopManager()
: m_thread_event_queue(ThreadEventQueue::current())
{
}
EventLoopImplementation::~EventLoopImplementation() = default;
EventLoopManager::~EventLoopManager() = default;
void EventLoopImplementation::post_event(Object& receiver, NonnullOwnPtr<Event>&& event)
void EventLoopManager::post_event(Object& receiver, NonnullOwnPtr<Event>&& event)
{
m_thread_event_queue.post_event(receiver, move(event));