From 5fde4557b2e8f9052634055d95932b95d1eb9c41 Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Tue, 9 Sep 2025 01:51:01 +0800 Subject: Implement timers on XcbUiApplication. --- include/cru/platform/gui/xcb/UiApplication.h | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) (limited to 'include') diff --git a/include/cru/platform/gui/xcb/UiApplication.h b/include/cru/platform/gui/xcb/UiApplication.h index 9b3545c2..af1c40f4 100644 --- a/include/cru/platform/gui/xcb/UiApplication.h +++ b/include/cru/platform/gui/xcb/UiApplication.h @@ -2,6 +2,8 @@ #include "../UiApplication.h" #include "Base.h" +#include + #include #include @@ -15,7 +17,6 @@ class XcbUiApplication : public XcbResource, public virtual IUiApplication { int Run() override; - // Post a quit message with given quit code. virtual void RequestQuit(int quit_code) = 0; void AddOnQuitHandler(std::function handler) override; @@ -23,17 +24,12 @@ class XcbUiApplication : public XcbResource, public virtual IUiApplication { virtual bool IsQuitOnAllWindowClosed() = 0; virtual void SetQuitOnAllWindowClosed(bool quit_on_all_window_closed) = 0; - // Timer id should always be positive (not 0) and never the same. So it's ok - // to use negative value (or 0) to represent no timer. - virtual long long SetImmediate(std::function action) = 0; - virtual long long SetTimeout(std::chrono::milliseconds milliseconds, - std::function action) = 0; - virtual long long SetInterval(std::chrono::milliseconds milliseconds, - std::function action) = 0; - // Implementation should guarantee calls on timer id already canceled have no - // effects and do not crash. Also canceling negative id or 0 should always - // result in no-op. - virtual void CancelTimer(long long id) = 0; + long long SetImmediate(std::function action) override; + long long SetTimeout(std::chrono::milliseconds milliseconds, + std::function action) override; + long long SetInterval(std::chrono::milliseconds milliseconds, + std::function action) override; + void CancelTimer(long long id) override; virtual std::vector GetAllWindow() = 0; @@ -63,6 +59,7 @@ class XcbUiApplication : public XcbResource, public virtual IUiApplication { xcb_connection_t* xcb_; xcb_screen_t* screen_; + cru::platform::unix::UnixEventLoop event_loop_; std::vector> quit_handlers_; int exit_code_; }; -- cgit v1.2.3