6625c445ca977c3c6b9bfbbec499e448b68fbd76
[staging/windowmanager.git] / AFBClient.h
1 #ifndef AFBCLIENT_H
2 #define AFBCLIENT_H
3
4 #include <functional>
5
6 extern "C"
7 {
8    struct json_object;
9    struct afb_wsj1;
10    struct sd_event;
11 }
12
13 class AFBClient
14 {
15     AFBClient();
16     ~AFBClient();
17
18     AFBClient(const AFBClient &) = delete;
19     AFBClient &operator=(const AFBClient &) = delete;
20
21 public:
22     enum EventType {
23        Event_Active = 1,
24        Event_Inactive,
25        Event_Visible,
26        Event_Invisible,
27        Event_SyncDraw,
28        Event_FlushDraw,
29     };
30
31     static AFBClient &instance();
32
33     int init(int port, char const *token);
34     int dispatch(uint64_t timeout);
35
36     // WM API
37     int requestSurface(const char *label);
38     int activateSurface(const char *label);
39     int deactivateSurface(const char *label);
40     int endDraw(const char *label);
41
42     void set_event_handler(enum EventType et,
43           std::function<void(char const *label)> f);
44
45 private:
46     struct afb_wsj1 *wsj1;
47     struct sd_event *loop;
48 };
49 #endif // AFBCLIENT_H