diff options
| author | Tom Englund <tomenglund26@gmail.com> | 2025-07-03 21:20:46 +0200 |
|---|---|---|
| committer | Vaxry <43317083+vaxerski@users.noreply.github.com> | 2025-07-07 18:09:34 +0200 |
| commit | 4a30e2acd9bb6d871d547f929cefce1d47c08931 (patch) | |
| tree | 5b43474bea5f97a3852461c57521dd18a489b3f9 /src/managers/eventLoop/EventLoopManager.hpp | |
| parent | ceec1943ffad717ff99cd72c60922738e318a445 (diff) | |
eventloop: RAII the even source on readable fd
RAII remove the event source and honor rule by 5
Diffstat (limited to 'src/managers/eventLoop/EventLoopManager.hpp')
| -rw-r--r-- | src/managers/eventLoop/EventLoopManager.hpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/managers/eventLoop/EventLoopManager.hpp b/src/managers/eventLoop/EventLoopManager.hpp index 977d2b01..0835b242 100644 --- a/src/managers/eventLoop/EventLoopManager.hpp +++ b/src/managers/eventLoop/EventLoopManager.hpp @@ -42,6 +42,23 @@ class CEventLoopManager { wl_event_source* source; Hyprutils::OS::CFileDescriptor fd; std::function<void()> fn; + + SReadableWaiter(wl_event_source* src, Hyprutils::OS::CFileDescriptor f, std::function<void()> func) : source(src), fd(std::move(f)), fn(std::move(func)) {} + + ~SReadableWaiter() { + if (source) { + wl_event_source_remove(source); + source = nullptr; + } + } + + // copy + SReadableWaiter(const SReadableWaiter&) = delete; + SReadableWaiter& operator=(const SReadableWaiter&) = delete; + + // move + SReadableWaiter(SReadableWaiter&& other) noexcept = default; + SReadableWaiter& operator=(SReadableWaiter&& other) noexcept = default; }; // schedule function to when fd is readable (WL_EVENT_READABLE / POLLIN), |
