7 #ifndef _FCITX_UTILS_EVENTLOOPINTERFACE_H_ 8 #define _FCITX_UTILS_EVENTLOOPINTERFACE_H_ 14 #include <fcitx-utils/fcitxutils_export.h> 16 #include <fcitx-utils/macros.h> 20 enum class IOEventFlag {
25 EdgeTrigger = (1 << 4),
28 using IOEventFlags = Flags<IOEventFlag>;
34 FCITX_NODISCARD
int error()
const {
return errno_; }
42 FCITX_NODISCARD
virtual bool isEnabled()
const = 0;
43 virtual void setEnabled(
bool enabled) = 0;
44 FCITX_NODISCARD
virtual bool isOneShot()
const = 0;
45 virtual void setOneShot() = 0;
49 FCITX_NODISCARD
virtual int fd()
const = 0;
50 virtual void setFd(
int fd) = 0;
53 FCITX_NODISCARD
virtual IOEventFlags revents()
const = 0;
57 virtual void setNextInterval(uint64_t time);
58 FCITX_NODISCARD
virtual uint64_t time()
const = 0;
59 virtual void setTime(uint64_t time) = 0;
60 FCITX_NODISCARD
virtual uint64_t accuracy()
const = 0;
61 virtual void setAccuracy(uint64_t accuracy) = 0;
62 FCITX_NODISCARD
virtual clockid_t clock()
const = 0;
77 virtual void send() = 0;
81 std::function<bool(EventSourceIO *, int fd, IOEventFlags flags)>;
82 using TimeCallback = std::function<bool(EventSourceTime *, uint64_t usec)>;
83 using EventCallback = std::function<bool(EventSource *)>;
85 FCITXUTILS_EXPORT uint64_t now(clockid_t clock);
101 virtual bool exec() = 0;
111 virtual void exit() = 0;
121 virtual const char *implementation()
const = 0;
135 virtual void *nativeHandle() = 0;
137 FCITX_NODISCARD std::unique_ptr<EventSourceIO>
virtual addIOEvent(
139 FCITX_NODISCARD std::unique_ptr<EventSourceTime>
virtual addTimeEvent(
140 clockid_t clock, uint64_t usec, uint64_t accuracy,
141 TimeCallback callback) = 0;
142 FCITX_NODISCARD
virtual std::unique_ptr<EventSource>
143 addExitEvent(EventCallback callback) = 0;
144 FCITX_NODISCARD
virtual std::unique_ptr<EventSource>
145 addDeferEvent(EventCallback callback) = 0;
146 FCITX_NODISCARD
virtual std::unique_ptr<EventSource>
147 addPostEvent(EventCallback callback) = 0;
152 FCITX_NODISCARD
virtual std::unique_ptr<EventSourceAsync>
153 addAsyncEvent(EventCallback callback) = 0;
158 #endif // _FCITX_UTILS_EVENTLOOPINTERFACE_H_
A thread-safe event source can be triggered from other threads.
Helper template class to make easier to use type safe enum flags.