aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFederico Angelilli <code@fedang.net>2023-11-24 23:18:57 +0100
committerFederico Angelilli <code@fedang.net>2023-11-24 23:18:57 +0100
commit710672df7e0d1e65b6253efb7af714c326a777db (patch)
tree17fcc42d858a4126332672952c987708dbda022b
parent00c8952c86e27b873dc4020ed73ea3b038074f97 (diff)
Add action data for buttons and make quit button
-rw-r--r--src/button.c3
-rw-r--r--src/button.h3
-rw-r--r--src/comet.c44
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);