blob: 755c0343e11818840191c9adf6e63d6c130c7aea (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
#include "events.h"
#include "hash.h"
#include "vec.h"
#include <cstring>
static inline window_id_t wayc_eventloop_genid(struct eventloop_s *loop) {
wayc_notnull(loop);
return loop->winid++;
}
bool wayc_eventloop_init(struct eventloop_s *loop, event_handler_t handler) {
wayc_notnull(loop);
wayc_notnull(handler);
memset(loop, 0, sizeof(*loop));
if (!wayc_wlstate_init(&loop->state))
return false;
loop->events = WAYC_VEC_INIT(struct event_s);
loop->handler = handler;
loop->running = true;
wayc_hashmap_init(&loop->windows);
return true;
}
void wayc_eventloop_deinit(struct eventloop_s *loop) {
wayc_notnull(loop);
wayc_wlstate_deinit(&loop->state);
wayc_vec_deinit(&loop->events);
}
window_id_t wayc_eventloop_register(struct eventloop_s *loop,
struct window_s *window) {
wayc_notnull(loop);
wayc_notnull(window);
window_id_t winid = wayc_eventloop_genid(loop);
wayc_hashmap_insert(&loop->windows, &winid, &window);
return winid;
}
void wayc_eventloop_unregister(struct eventloop_s *loop, window_id_t winid) {
wayc_notnull(loop);
wayc_hashmap_remove(&loop->windows, &winid);
}
bool wayc_eventloop_running(struct eventloop_s *loop) {
wayc_notnull(loop);
return loop->running;
}
void wayc_eventloop_update(struct eventloop_s *loop) {
wayc_notnull(loop);
if (wayc_hashmap_count(&loop->windows) == 0)
loop->running = false;
wayc_wlstate_update(&loop->state);
struct event_s event;
while (wayc_vec_pop(&loop->events, &event))
loop->handler(loop, &event);
}
|