summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/events.cc18
-rw-r--r--src/events.h5
-rw-r--r--src/hash.h (renamed from src/hashm.h)6
-rw-r--r--src/wayclock.cc3
4 files changed, 29 insertions, 3 deletions
diff --git a/src/events.cc b/src/events.cc
index edc47db..aed9de3 100644
--- a/src/events.cc
+++ b/src/events.cc
@@ -1,5 +1,5 @@
#include "events.h"
-#include "hashm.h"
+#include "hash.h"
#include "vec.h"
#include <cstring>
@@ -16,6 +16,7 @@ bool wayc_eventloop_init(struct eventloop_s *loop) {
return false;
loop->events = WAYC_VEC_INIT(struct event_s);
+ loop->running = true;
wayc_hashmap_init(&loop->windows);
return true;
@@ -41,4 +42,17 @@ window_id_t wayc_eventloop_register(struct eventloop_s *loop,
void wayc_eventloop_unregister(struct eventloop_s *loop, window_id_t winid) {
wayc_notnull(loop);
wayc_hashmap_remove(&loop->windows, &winid);
-} \ No newline at end of file
+}
+
+bool wayc_eventloop_running(struct eventloop_s *loop) {
+ wayc_notnull(loop);
+ return loop->running;
+}
+
+void wayc_eventloop_upate(struct eventloop_s *loop) {
+ wayc_notnull(loop);
+ if (wayc_hashmap_count(&loop->windows) == 0)
+ loop->running = false;
+
+ wayc_wlstate_update(&loop->state);
+}
diff --git a/src/events.h b/src/events.h
index 0af78b3..a58b7a1 100644
--- a/src/events.h
+++ b/src/events.h
@@ -1,6 +1,6 @@
#pragma once
-#include "hashm.h"
+#include "hash.h"
#include "vec.h"
#include "window.h"
#include "wlstate.h"
@@ -19,6 +19,7 @@ struct eventloop_s {
struct vec_s<struct event_s> events;
window_id_t winid;
struct hashmap_s<window_id_t, struct window_s *> windows;
+ bool running;
};
bool wayc_eventloop_init(struct eventloop_s *loop);
@@ -26,3 +27,5 @@ void wayc_eventloop_deinit(struct eventloop_s *loop);
window_id_t wayc_eventloop_register(struct eventloop_s *loop,
struct window_s *window);
void wayc_eventloop_unregister(struct eventloop_s *loop, window_id_t winid);
+bool wayc_eventloop_running(struct eventloop_s *loop);
+void wayc_eventloop_upate(struct eventloop_s *loop);
diff --git a/src/hashm.h b/src/hash.h
index 16b025b..66ed5ac 100644
--- a/src/hashm.h
+++ b/src/hash.h
@@ -98,4 +98,10 @@ inline void wayc_hashmap_remove(hashmap_s<K, V> *map, const K *key) {
hashentry_s<K, V> entry{};
entry.key = *key;
hashmap_delete(map->inner, &entry);
+}
+
+template <typename K, typename V>
+inline usize wayc_hashmap_count(hashmap_s<K, V> *map) {
+ wayc_notnull(map);
+ return hashmap_count(map->inner);
} \ No newline at end of file
diff --git a/src/wayclock.cc b/src/wayclock.cc
index 6114cbe..63ca323 100644
--- a/src/wayclock.cc
+++ b/src/wayclock.cc
@@ -5,6 +5,9 @@ int main() {
if (!wayc_eventloop_init(&loop))
wayc_panic("Failed to initialize event loop");
+ while (wayc_eventloop_running(&loop))
+ wayc_eventloop_upate(&loop);
+
wayc_eventloop_deinit(&loop);
return 0;
} \ No newline at end of file