/* * Copyright (c) 2023, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #include #include #include #include #include namespace Core { 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()) { } EventLoopManager::~EventLoopManager() = default; void EventLoopManager::post_event(Object& receiver, NonnullOwnPtr&& event) { m_thread_event_queue.post_event(receiver, move(event)); // Wake up this EventLoopImplementation if this is a cross-thread event posting. if (&ThreadEventQueue::current() != &m_thread_event_queue) wake(); } }