aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFederico Angelilli <code@fedang.net>2023-11-26 23:19:19 +0100
committerFederico Angelilli <code@fedang.net>2023-11-26 23:19:19 +0100
commit7da583328758e3e8e3ace381aab9e98313f76767 (patch)
treeb131ab8e893444217750864e184aa5af9a4cfcd9
parent52668d11f90a25c917d29353bf3a2dab2fa13bc4 (diff)
Change behaviour of button_simple_set_text
-rw-r--r--src/button.c4
-rw-r--r--src/button.h3
-rw-r--r--src/comet.c36
3 files changed, 25 insertions, 18 deletions
diff --git a/src/button.c b/src/button.c
index 2835623..24eaf0c 100644
--- a/src/button.c
+++ b/src/button.c
@@ -12,12 +12,12 @@ Button *button_simple_create(PangoAlignment align, Color color, Color line_color
return btn;
}
-void button_simple_set_text(Button *btn, const char *text, Color text_color)
+void button_simple_set_text(Button *btn, char *text, Color text_color)
{
g_assert(btn->simple);
ButtonSimple *sbtn = CAST(btn, ButtonSimple);
if (sbtn->text != NULL) g_free(sbtn->text);
- sbtn->text = g_strdup(text);
+ sbtn->text = text;
sbtn->text_color = text_color;
}
diff --git a/src/button.h b/src/button.h
index 4f4285f..0fb821c 100644
--- a/src/button.h
+++ b/src/button.h
@@ -42,7 +42,8 @@ typedef struct {
Button *button_simple_create(PangoAlignment align, Color color, Color line_color);
-void button_simple_set_text(Button *btn, const char *text, Color text_color);
+// Takes ownership of text
+void button_simple_set_text(Button *btn, char *text, Color text_color);
const char *button_simple_get_text(Button *btn);
diff --git a/src/comet.c b/src/comet.c
index 6257bf1..d6fc0d1 100644
--- a/src/comet.c
+++ b/src/comet.c
@@ -146,7 +146,6 @@ static gboolean ram_update(gpointer data)
int usage = 100 * (total - unused - buffers - cached) / total;
button_simple_set_text((gpointer)btn, g_strdup_printf(" %d%%", usage), btn->text_color);
-
size_t len2 = g_utf8_strlen(btn->text, -1);
log_debug("Updated ram percentage");
@@ -198,11 +197,13 @@ static void quit_action(Button *btn)
static void menu_action(Button *btn)
{
+ ButtonSimple *sbtn = CAST(btn, ButtonSimple);
struct {
ButtonGroup *group;
+ char *strings[2];
GList *toggled;
State *state;
- } *menu_ctx = CAST(btn, ButtonSimple)->action_data;
+ } *menu_ctx = sbtn->action_data;
// Otherwise the menu can't be closed
g_assert(menu_ctx->group->children->data == btn);
@@ -211,7 +212,11 @@ static void menu_action(Button *btn)
menu_ctx->group->children = menu_ctx->toggled;
menu_ctx->toggled = temp;
- log_debug("Toggled menu");
+ bool closed = menu_ctx->group->children->next == NULL;
+
+ button_simple_set_text(btn, g_strdup(menu_ctx->strings[!closed]), sbtn->text_color);
+
+ log_debug("%s menu", closed ? "Closed" : "Opened");
state_redraw(menu_ctx->state, true);
}
@@ -222,14 +227,14 @@ static void register_buttons(State *state, Color color, Color line_color, Color
for (int i = 0; i < 9; ++i) {
char text[] = { '1' + i, '\0' };
Button *btn = button_simple_create(PANGO_ALIGN_LEFT, color, line_color);
- button_simple_set_text(btn, text, text_color);
+ button_simple_set_text(btn, g_strdup(text), text_color);
button_simple_set_action(btn, show_action, NULL);
state_add_button(state, btn);
}
// Cpu usage button
Button *cpu_btn = button_simple_create(PANGO_ALIGN_RIGHT, color, line_color);
- button_simple_set_text(cpu_btn, " ?%", text_color);
+ button_simple_set_text(cpu_btn, g_strdup(" ?%"), text_color);
button_simple_set_action(cpu_btn, show_action, state);
state_add_button(state, cpu_btn);
@@ -238,7 +243,7 @@ static void register_buttons(State *state, Color color, Color line_color, Color
// Temperature button
Button *temp_btn = button_simple_create(PANGO_ALIGN_RIGHT, color, line_color);
- button_simple_set_text(temp_btn, "temp", text_color);
+ button_simple_set_text(temp_btn, g_strdup("temp"), text_color);
button_simple_set_action(temp_btn, show_action, state);
state_add_button(state, temp_btn);
@@ -247,7 +252,7 @@ static void register_buttons(State *state, Color color, Color line_color, Color
// Ram usage button
Button *ram_btn = button_simple_create(PANGO_ALIGN_RIGHT, color, line_color);
- button_simple_set_text(ram_btn, "ram", text_color);
+ button_simple_set_text(ram_btn, g_strdup("ram"), text_color);
button_simple_set_action(ram_btn, show_action, state);
state_add_button(state, ram_btn);
@@ -256,7 +261,7 @@ static void register_buttons(State *state, Color color, Color line_color, Color
// Disk usage button
Button *disk_btn = button_simple_create(PANGO_ALIGN_RIGHT, color, line_color);
- button_simple_set_text(disk_btn, "disk", text_color);
+ button_simple_set_text(disk_btn, g_strdup("disk"), text_color);
button_simple_set_action(disk_btn, show_action, state);
state_add_button(state, disk_btn);
@@ -304,7 +309,7 @@ int main(int argc, char **argv)
// Date & time button
Button *date_btn = button_simple_create(PANGO_ALIGN_CENTER, color, line_color);
- button_simple_set_text(date_btn, "date", text_color);
+ button_simple_set_text(date_btn, g_strdup("date"), text_color);
button_simple_set_action(date_btn, show_action, &date_ctx);
state_add_button(state, date_btn);
@@ -318,7 +323,7 @@ int main(int argc, char **argv)
// Quit button
Color purple = { 0.502, 0.168, 0.886, 1 };
Button *q_btn = button_simple_create(PANGO_ALIGN_RIGHT, purple, line_color);
- button_simple_set_text(q_btn, "", text_color);
+ button_simple_set_text(q_btn, g_strdup(""), text_color);
button_simple_set_action(q_btn, quit_action, mainloop);
state_add_button(state, q_btn);
@@ -328,27 +333,28 @@ int main(int argc, char **argv)
Button *child1 = button_simple_create(PANGO_ALIGN_CENTER, color, line_color);
button_set_padding(child1, 1);
- button_simple_set_text(child1, "C1", text_color);
+ button_simple_set_text(child1, g_strdup("C1"), text_color);
button_simple_set_action(child1, show_action, NULL);
Button *child2 = button_simple_create(PANGO_ALIGN_CENTER, color, line_color);
button_set_padding(child2, 1);
- button_simple_set_text(child2, "C2", text_color);
+ button_simple_set_text(child2, g_strdup("C2"), text_color);
button_simple_set_action(child2, show_action, NULL);
Button *child3 = button_simple_create(PANGO_ALIGN_CENTER, color, line_color);
button_set_padding(child3, 1);
- button_simple_set_text(child3, "C3", text_color);
+ button_simple_set_text(child3, g_strdup("C3"), text_color);
button_simple_set_action(child3, show_action, NULL);
struct {
ButtonGroup *group;
+ char *strings[2];
GList *toggled;
State *state;
- } menu_ctx = { (gpointer)group, NULL, state };
+ } menu_ctx = { (gpointer)group, {"", ""}, NULL, state };
Button *menu = button_simple_create(PANGO_ALIGN_CENTER, color, line_color);
- button_simple_set_text(menu, "Open", text_color);
+ button_simple_set_text(menu, g_strdup(menu_ctx.strings[0]), text_color);
button_simple_set_action(menu, menu_action, &menu_ctx);
menu_ctx.toggled = g_list_append(menu_ctx.toggled, menu);