From 7bb670a21a3e6234ac70a031ecc164159559285a Mon Sep 17 00:00:00 2001 From: Federico Angelilli Date: Sun, 19 Nov 2023 22:28:35 +0100 Subject: Add date buttons with periodic updates --- src/comet.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) (limited to 'src/comet.c') diff --git a/src/comet.c b/src/comet.c index 36d517a..a6d94e8 100644 --- a/src/comet.c +++ b/src/comet.c @@ -19,8 +19,20 @@ static gboolean mainloop_quit(gpointer data) static gboolean mainloop_draw(gpointer data) { State *state = data; + draw_compute_layout(state->draw, state->win, state->btns); draw_paint(state->draw, state->win); - return G_SOURCE_REMOVE; + return G_SOURCE_CONTINUE; +} + +static gboolean date_update(gpointer data) +{ + Button *btn = data; + g_free(btn->text); + GDateTime *time = g_date_time_new_now_local(); + btn->text = g_date_time_format(time, "%A %d %H:%M"); + g_assert(btn->text != NULL); + log_debug("Updated date"); + return G_SOURCE_CONTINUE; } static void log_handler(const char *log_domain, @@ -81,16 +93,19 @@ int main(int argc, char **argv) state_add_button(state, btn); } - Button *long_btn = button_create("long button", PANGO_ALIGN_CENTER); + Button *long_btn = button_create("long button", PANGO_ALIGN_RIGHT); button_set_colors(long_btn, background, foreground, stroke); button_set_action(long_btn, action); state_add_button(state, long_btn); - Button *date_btn = button_create("date = today", PANGO_ALIGN_RIGHT); + Button *date_btn = button_create("date", PANGO_ALIGN_CENTER); button_set_colors(date_btn, background, foreground, stroke); button_set_action(date_btn, action); state_add_button(state, date_btn); + date_update(date_btn); + g_timeout_add(30 * 1000, date_update, date_btn); + // purple Color background2 = { 0.502, 0.168, 0.886, 1 }; Button *u_btn = button_create("U", PANGO_ALIGN_RIGHT); @@ -106,7 +121,8 @@ int main(int argc, char **argv) guint source_term = g_unix_signal_add(SIGTERM, mainloop_quit, mainloop); guint source_int = g_unix_signal_add(SIGINT, mainloop_quit, mainloop); - guint id = g_timeout_add(100, mainloop_draw, state); + // TODO: Redraw only when needed (dirty flag) + guint id = g_timeout_add(1000, mainloop_draw, state); log_debug("Starting main loop"); g_main_loop_run(mainloop); -- cgit v1.2.3