3 #include <glibmm/threads.h>
7 Glib::Threads::Mutex badge_event_mutex
;
8 Glib::Threads::Cond badge_event_condition
;
9 std::queue
<badge_event_t
> badge_event_queue
;
10 uint8_t volatile badge_event_input_state
= 0;
13 uint8_t badge_event_current_input_state(void) {
14 Glib::Threads::Mutex::Lock
lock(badge_event_mutex
);
15 return badge_event_input_state
;
18 void badge_event_push(badge_event_t e
) {
19 Glib::Threads::Mutex::Lock
lock(badge_event_mutex
);
21 badge_event_queue
.push(e
);
23 if(badge_event_type(e
) == BADGE_EVENT_USER_INPUT
) {
24 badge_event_input_state
= badge_event_new_input_state(e
);
27 badge_event_condition
.signal();
30 badge_event_t
badge_event_wait(void) {
31 Glib::Threads::Mutex::Lock
lock(badge_event_mutex
);
33 while(badge_event_queue
.empty()) {
34 badge_event_condition
.wait(badge_event_mutex
);
37 badge_event_t result
= badge_event_queue
.front();
38 badge_event_queue
.pop();