EventLoopImplementation.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. /*
  2. * Copyright (c) 2022-2023, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/Function.h>
  8. #include <LibCore/Forward.h>
  9. namespace Core {
  10. class ThreadEventQueue;
  11. class EventLoopImplementation {
  12. public:
  13. virtual ~EventLoopImplementation();
  14. enum class PumpMode {
  15. WaitForEvents,
  16. DontWaitForEvents,
  17. };
  18. void post_event(Object& receiver, NonnullOwnPtr<Event>&&);
  19. virtual int exec() = 0;
  20. virtual size_t pump(PumpMode) = 0;
  21. virtual void quit(int) = 0;
  22. virtual void wake() = 0;
  23. virtual void deferred_invoke(Function<void()>) = 0;
  24. virtual int register_timer(Object&, int milliseconds, bool should_reload, TimerShouldFireWhenNotVisible) = 0;
  25. virtual bool unregister_timer(int timer_id) = 0;
  26. virtual void register_notifier(Notifier&) = 0;
  27. virtual void unregister_notifier(Notifier&) = 0;
  28. virtual void did_post_event() = 0;
  29. // FIXME: These APIs only exist for obscure use-cases inside SerenityOS. Try to get rid of them.
  30. virtual void unquit() = 0;
  31. virtual bool was_exit_requested() const = 0;
  32. virtual void notify_forked_and_in_child() = 0;
  33. virtual int register_signal(int signal_number, Function<void(int)> handler) = 0;
  34. virtual void unregister_signal(int handler_id) = 0;
  35. protected:
  36. EventLoopImplementation();
  37. ThreadEventQueue& m_thread_event_queue;
  38. };
  39. }