diff options
| author | Federico Angelilli <code@fedang.net> | 2023-11-26 23:19:19 +0100 |
|---|---|---|
| committer | Federico Angelilli <code@fedang.net> | 2023-11-26 23:19:19 +0100 |
| commit | 7da583328758e3e8e3ace381aab9e98313f76767 (patch) | |
| tree | b131ab8e893444217750864e184aa5af9a4cfcd9 | |
| parent | 52668d11f90a25c917d29353bf3a2dab2fa13bc4 (diff) | |
Change behaviour of button_simple_set_text
| -rw-r--r-- | src/button.c | 4 | ||||
| -rw-r--r-- | src/button.h | 3 | ||||
| -rw-r--r-- | src/comet.c | 36 |
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); |
