7 #ifndef _FCITX_UTILS_EVENTLOOPINTERFACE_H_ 8 #define _FCITX_UTILS_EVENTLOOPINTERFACE_H_ 10 #include <sys/types.h> 15 #include <fcitx-utils/fcitxutils_export.h> 17 #include <fcitx-utils/macros.h> 25 enum class IOEventFlag {
30 EdgeTrigger = (1 << 4),
33 using IOEventFlags = Flags<IOEventFlag>;
39 FCITX_NODISCARD
int error()
const {
return errno_; }
47 FCITX_NODISCARD
virtual bool isEnabled()
const = 0;
48 virtual void setEnabled(
bool enabled) = 0;
49 FCITX_NODISCARD
virtual bool isOneShot()
const = 0;
50 virtual void setOneShot() = 0;
54 FCITX_NODISCARD
virtual int fd()
const = 0;
55 virtual void setFd(
int fd) = 0;
58 FCITX_NODISCARD
virtual IOEventFlags revents()
const = 0;
62 virtual void setNextInterval(uint64_t time);
63 FCITX_NODISCARD
virtual uint64_t time()
const = 0;
64 virtual void setTime(uint64_t time) = 0;
65 FCITX_NODISCARD
virtual uint64_t accuracy()
const = 0;
66 virtual void setAccuracy(uint64_t accuracy) = 0;
67 FCITX_NODISCARD
virtual clockid_t clock()
const = 0;
82 virtual void send() = 0;
86 std::function<bool(EventSourceIO *, int fd, IOEventFlags flags)>;
87 using TimeCallback = std::function<bool(EventSourceTime *, uint64_t usec)>;
88 using EventCallback = std::function<bool(EventSource *)>;
90 FCITXUTILS_EXPORT uint64_t now(clockid_t clock);
106 virtual bool exec() = 0;
116 virtual void exit() = 0;
126 virtual const char *implementation()
const = 0;
140 virtual void *nativeHandle() = 0;
142 FCITX_NODISCARD std::unique_ptr<EventSourceIO>
virtual addIOEvent(
144 FCITX_NODISCARD std::unique_ptr<EventSourceTime>
virtual addTimeEvent(
145 clockid_t clock, uint64_t usec, uint64_t accuracy,
146 TimeCallback callback) = 0;
147 FCITX_NODISCARD
virtual std::unique_ptr<EventSource>
148 addExitEvent(EventCallback callback) = 0;
149 FCITX_NODISCARD
virtual std::unique_ptr<EventSource>
150 addDeferEvent(EventCallback callback) = 0;
151 FCITX_NODISCARD
virtual std::unique_ptr<EventSource>
152 addPostEvent(EventCallback callback) = 0;
157 FCITX_NODISCARD
virtual std::unique_ptr<EventSourceAsync>
158 addAsyncEvent(EventCallback callback) = 0;
163 #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.