aboutsummaryrefslogtreecommitdiff
path: root/src/comet.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/comet.c')
-rw-r--r--src/comet.c30
1 files changed, 27 insertions, 3 deletions
diff --git a/src/comet.c b/src/comet.c
index d496590..64d24c0 100644
--- a/src/comet.c
+++ b/src/comet.c
@@ -4,10 +4,32 @@
#include "window.h"
#include "layout.h"
+#include "util.h"
+#include "event.h"
#define ANY_LOG_IMPLEMENT
#include "any_log.h"
+void update(block_t *block)
+{
+ if (block->update_cb != NULL) {
+ struct timespec now, diff;
+ timespec_get(&now, TIME_UTC);
+ diff = timespec_diff(block->update_last, now);
+
+ if (timespec_greater(diff, block->update_interval)) {
+ log_debug("Updating block");
+ block->update_cb(block);
+ block->update_last = now;
+ }
+ }
+
+ if (block->type == BLOCK_GROUP) {
+ for (int i = 0; i < block->group.n_children; i++)
+ update(&block->group.children[i]);
+ }
+}
+
cairo_surface_t *render(layout_t *layout, layout_info_t info)
{
cairo_surface_t *surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, info.width, info.height);
@@ -30,7 +52,6 @@ cairo_surface_t *render(layout_t *layout, layout_info_t info)
return surface;
}
-
int main(int argc, char **argv)
{
setlocale(LC_CTYPE, "");
@@ -124,13 +145,16 @@ int main(int argc, char **argv)
window_move(&window, x_padding, y_padding);
while (true) {
+ update(&top);
+
layout_t *layout = layout_create(&top, info);
+
+ event_dispatch(&display, layout);
+
cairo_surface_t *surface = render(layout, info);
window_present(&window, surface, width, height);
cairo_surface_destroy(surface);
layout_free(layout);
-
- sleep(1);
}
window_close(&window);