#pragma once #include #include #include "WaylandProtocol.hpp" #include "commit-timing-v1.hpp" #include "../helpers/signal/Signal.hpp" #include "helpers/time/Time.hpp" class CWLSurfaceResource; class CEventLoopTimer; class CCommitTimerResource { public: CCommitTimerResource(UP&& resource_, SP surface); ~CCommitTimerResource(); bool good(); private: UP m_resource; WP m_surface; bool m_timerPresent = false; std::optional m_pendingTimeout; SP timer; struct { CHyprSignalListener surfaceStateCommit; } m_listeners; friend class CCommitTimingProtocol; friend class CCommitTimingManagerResource; }; class CCommitTimingManagerResource { public: CCommitTimingManagerResource(UP&& resource_); ~CCommitTimingManagerResource(); bool good(); private: UP m_resource; }; class CCommitTimingProtocol : public IWaylandProtocol { public: CCommitTimingProtocol(const wl_interface* iface, const int& ver, const std::string& name); virtual void bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id); private: void destroyResource(CCommitTimingManagerResource* resource); void destroyResource(CCommitTimerResource* resource); // std::vector> m_managers; std::vector> m_timers; friend class CCommitTimingManagerResource; friend class CCommitTimerResource; }; namespace PROTO { inline UP commitTiming; };