aboutsummaryrefslogtreecommitdiff
path: root/src/comet.c
diff options
context:
space:
mode:
authorFederico Angelilli <code@fedang.net>2023-11-19 22:28:35 +0100
committerFederico Angelilli <code@fedang.net>2023-11-19 22:28:35 +0100
commit7bb670a21a3e6234ac70a031ecc164159559285a (patch)
treeeb3d59c466049ec72ac88abd9335cf96a4835e1e /src/comet.c
parent89b205f3138b94325458ab121d5adb4a00091860 (diff)
Add date buttons with periodic updates
Diffstat (limited to 'src/comet.c')
-rw-r--r--src/comet.c24
1 files changed, 20 insertions, 4 deletions
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);