summaryrefslogtreecommitdiff
path: root/src/managers/eventLoop/EventLoopManager.hpp
diff options
context:
space:
mode:
authorVaxry <43317083+vaxerski@users.noreply.github.com>2026-04-30 20:41:55 +0100
committerGitHub <noreply@github.com>2026-04-30 20:41:55 +0100
commit450d8a0bf703f3ec460d367f38d61b5966daf8fe (patch)
tree3650fcfce70e2118b459c993dee009bbf5da4ea7 /src/managers/eventLoop/EventLoopManager.hpp
parentcfb2deb6644cc2ce474bc8f5feb96d0768768441 (diff)
xdg-shell: queue state updates for toplevel (#14227)
ref https://github.com/hyprwm/Hyprland/discussions/14224
Diffstat (limited to 'src/managers/eventLoop/EventLoopManager.hpp')
-rw-r--r--src/managers/eventLoop/EventLoopManager.hpp19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/managers/eventLoop/EventLoopManager.hpp b/src/managers/eventLoop/EventLoopManager.hpp
index 7999dc59..64673455 100644
--- a/src/managers/eventLoop/EventLoopManager.hpp
+++ b/src/managers/eventLoop/EventLoopManager.hpp
@@ -14,6 +14,13 @@ namespace Aquamarine {
struct SPollFD;
};
+struct SEventLoopDoLaterLock {
+ SEventLoopDoLaterLock(uint64_t seq);
+ ~SEventLoopDoLaterLock();
+
+ uint64_t seq = 0;
+};
+
class CEventLoopManager {
public:
CEventLoopManager(wl_display* display, wl_event_loop* wlEventLoop);
@@ -30,12 +37,16 @@ class CEventLoopManager {
// schedules a recalc of the timers
void scheduleRecalc();
- // schedules a function to run later, aka in a wayland idle event.
- void doLater(const std::function<void()>& fn);
+ // schedules a function to run later, aka in a wayland idle event. Returns a sequence which can be used to remove it.
+ uint64_t doLater(const std::function<void()>& fn);
+ void removeDoLater(uint64_t seq);
+
+ // automatically cleaned up doLater instance
+ [[nodiscard]] UP<SEventLoopDoLaterLock> doLaterLock(const std::function<void()>& fn);
struct SIdleData {
- wl_event_source* eventSource = nullptr;
- std::vector<std::function<void()>> fns;
+ wl_event_source* eventSource = nullptr;
+ std::vector<std::pair<uint64_t, std::function<void()>>> fns;
};
struct SReadableWaiter {