diff options
| author | Federico Angelilli <code@fedang.net> | 2023-11-24 23:18:57 +0100 |
|---|---|---|
| committer | Federico Angelilli <code@fedang.net> | 2023-11-24 23:18:57 +0100 |
| commit | 710672df7e0d1e65b6253efb7af714c326a777db (patch) | |
| tree | 17fcc42d858a4126332672952c987708dbda022b /src | |
| parent | 00c8952c86e27b873dc4020ed73ea3b038074f97 (diff) | |
Add action data for buttons and make quit button
Diffstat (limited to 'src')
| -rw-r--r-- | src/button.c | 3 | ||||
| -rw-r--r-- | src/button.h | 3 | ||||
| -rw-r--r-- | src/comet.c | 44 |
3 files changed, 29 insertions, 21 deletions
diff --git a/src/button.c b/src/button.c index b2155ed..2f279d4 100644 --- a/src/button.c +++ b/src/button.c @@ -17,9 +17,10 @@ void button_set_colors(Button *btn, Color background, Color foreground, Color st btn->stroke = stroke; } -void button_set_action(Button *btn, ButtonAction action) +void button_set_action(Button *btn, ButtonAction action, gpointer data) { btn->action = action; + btn->action_data = data; } void button_destroy(Button *btn) diff --git a/src/button.h b/src/button.h index 7def0b3..f9406f1 100644 --- a/src/button.h +++ b/src/button.h @@ -16,6 +16,7 @@ typedef struct { struct Button { ButtonAction action; + gpointer action_data; char *text; PangoAlignment align; Color background; @@ -27,7 +28,7 @@ Button *button_create(const char *text, PangoAlignment align); void button_set_colors(Button *btn, Color background, Color foreground, Color stroke); -void button_set_action(Button *btn, ButtonAction action); +void button_set_action(Button *btn, ButtonAction action, gpointer data); void button_destroy(Button *btn); diff --git a/src/comet.c b/src/comet.c index a6d94e8..a3a9167 100644 --- a/src/comet.c +++ b/src/comet.c @@ -24,17 +24,6 @@ static gboolean mainloop_draw(gpointer data) 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, GLogLevelFlags level, const char *message, @@ -51,11 +40,28 @@ static void log_handler(const char *log_domain, g_print("%s\n", message); } -static void action(Button *btn) +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 show_action(Button *btn) { log_info("Called action: %s", btn->text); } +static void quit_action(Button *btn) +{ + log_info("Quit button pressed"); + g_main_loop_quit(btn->action_data); +} + int main(int argc, char **argv) { g_log_set_default_handler(log_handler, (gpointer)G_LOG_LEVEL_DEBUG); @@ -89,18 +95,18 @@ int main(int argc, char **argv) char text[] = { '1' + i, '\0' }; Button *btn = button_create(text, PANGO_ALIGN_LEFT); button_set_colors(btn, background, foreground, stroke); - button_set_action(btn, action); + button_set_action(btn, show_action, NULL); state_add_button(state, btn); } Button *long_btn = button_create("long button", PANGO_ALIGN_RIGHT); button_set_colors(long_btn, background, foreground, stroke); - button_set_action(long_btn, action); + button_set_action(long_btn, show_action, NULL); state_add_button(state, long_btn); Button *date_btn = button_create("date", PANGO_ALIGN_CENTER); button_set_colors(date_btn, background, foreground, stroke); - button_set_action(date_btn, action); + button_set_action(date_btn, show_action, NULL); state_add_button(state, date_btn); date_update(date_btn); @@ -108,10 +114,10 @@ int main(int argc, char **argv) // purple Color background2 = { 0.502, 0.168, 0.886, 1 }; - Button *u_btn = button_create("U", PANGO_ALIGN_RIGHT); - button_set_colors(u_btn, background2, foreground, stroke); - button_set_action(u_btn, action); - state_add_button(state, u_btn); + Button *q_btn = button_create("Q", PANGO_ALIGN_RIGHT); + button_set_colors(q_btn, background2, foreground, stroke); + button_set_action(q_btn, quit_action, mainloop); + state_add_button(state, q_btn); draw_compute_layout(draw, win, state->btns); |
