aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFederico Angelilli <code@fedang.net>2024-03-16 21:41:48 +0100
committerFederico Angelilli <code@fedang.net>2024-03-16 21:41:48 +0100
commit90a4c7fb069a96424f45e253cd6eaf522cc0fa42 (patch)
treeca178c33e6819512df2cf2626793b7fc99fd6e0a
parentc89bd80db59e9f4828a9a8ce43bdf90ce1512158 (diff)
Refactor register_buttons and related buttons
-rw-r--r--src/comet.c115
1 files changed, 47 insertions, 68 deletions
diff --git a/src/comet.c b/src/comet.c
index 636683a..4341a14 100644
--- a/src/comet.c
+++ b/src/comet.c
@@ -38,49 +38,8 @@ static gboolean mainloop_quit(gpointer data)
return G_SOURCE_CONTINUE;
}
-static gboolean disk_update(gpointer data)
-{
- ButtonSimple *btn = data;
-
- struct statvfs buffer;
- g_assert(statvfs("/", &buffer) == 0);
- const double used = 1.0 - ((double)buffer.f_bavail / (double)buffer.f_blocks);
-
- size_t len1 = g_utf8_strlen(btn->text, -1);
-
- button_simple_set_text((gpointer)btn, g_strdup_printf(" %d%%", (int)round(used * 100.0)), btn->text_color);
-
- size_t len2 = g_utf8_strlen(btn->text, -1);
-
- log_debug("Updated disk percentage");
- state_request_redraw(btn->data, len1 != len2);
- return G_SOURCE_CONTINUE;
-}
-
-static gboolean temp_update(gpointer data)
-{
- ButtonSimple *btn = data;
-
- FILE *temp = fopen("/sys/class/thermal/thermal_zone2/temp", "rb");
- g_assert_nonnull(temp);
-
- uintmax_t value;
- g_assert(1 == fscanf(temp, "%ju\n", &value));
-
- fclose(temp);
-
- size_t len1 = g_utf8_strlen(btn->text, -1);
-
- button_simple_set_text((gpointer)btn, g_strdup_printf(" %d °C", (int)(value / 1000)), btn->text_color);
-
- size_t len2 = g_utf8_strlen(btn->text, -1);
-
- log_debug("Updated temperature");
- state_request_redraw(btn->data, len1 != len2);
- return G_SOURCE_CONTINUE;
-}
-
// Taken from slstatus
+// XXX: Change with something more robust
char *cpu_percentage(void)
{
static long double a[7];
@@ -107,29 +66,22 @@ char *cpu_percentage(void)
(a[0] + a[1] + a[2] + a[5] + a[6])) / sum));
}
-static gboolean cpu_update(gpointer data)
+static gboolean cpu_update(Button *btn)
{
- ButtonSimple *btn = data;
-
char *perc = cpu_percentage();
+
// Don't update on error
if (perc != NULL) {
- size_t len1 = g_utf8_strlen(btn->text, -1);
-
- button_simple_set_text((gpointer)btn, perc, btn->text_color);
-
- size_t len2 = g_utf8_strlen(btn->text, -1);
- state_request_redraw(btn->data, len1 != len2);
+ ButtonSimple *sbtn = CAST(btn, ButtonSimple);
+ button_simple_set_text(btn, perc, sbtn->text_color);
+ state_request_redraw(sbtn->data, false);
}
- log_debug("%s cpu percentage", perc != NULL ? "Updated" : "Unchanged");
return G_SOURCE_CONTINUE;
}
-static gboolean ram_update(gpointer data)
+static gboolean ram_update(Button *btn)
{
- ButtonSimple *btn = data;
-
FILE *meminfo = fopen("/proc/meminfo", "rb");
g_assert_nonnull(meminfo);
@@ -142,15 +94,42 @@ static gboolean ram_update(gpointer data)
"Cached: %ju kB\n",
&total, &unused, &buffers, &buffers, &cached));
- fclose(meminfo);
- size_t len1 = g_utf8_strlen(btn->text, -1);
int usage = 100 * (total - unused - buffers - cached) / total;
- button_simple_set_text((gpointer)btn, g_strdup_printf(" %d%%", usage), btn->text_color);
+ fclose(meminfo);
- size_t len2 = g_utf8_strlen(btn->text, -1);
+ ButtonSimple *sbtn = CAST(btn, ButtonSimple);
+ button_simple_set_text(btn, g_strdup_printf(" %d%%", usage), sbtn->text_color);
+
+ state_request_redraw(sbtn->data, false);
+ return G_SOURCE_CONTINUE;
+}
+
+static gboolean temp_update(Button *btn)
+{
+ FILE *temp = fopen("/sys/class/thermal/thermal_zone2/temp", "rb");
+ g_assert_nonnull(temp);
+
+ uintmax_t value;
+ g_assert(1 == fscanf(temp, "%ju\n", &value));
+ fclose(temp);
+
+ ButtonSimple *sbtn = CAST(btn, ButtonSimple);
+ button_simple_set_text(btn, g_strdup_printf(" %d °C", (int)(value / 1000)), sbtn->text_color);
+
+ state_request_redraw(sbtn->data, false);
+ return G_SOURCE_CONTINUE;
+}
+
+static gboolean disk_update(Button *btn)
+{
+ struct statvfs buffer;
+ g_assert(statvfs("/", &buffer) == 0);
+ const double used = 1.0 - ((double)buffer.f_bavail / (double)buffer.f_blocks);
+
+ ButtonSimple *sbtn = CAST(btn, ButtonSimple);
+ button_simple_set_text(btn, g_strdup_printf(" %d%%", (int)round(used * 100.0)), sbtn->text_color);
- log_debug("Updated ram percentage");
- state_request_redraw(btn->data, len1 != len2);
+ state_request_redraw(sbtn->data, false);
return G_SOURCE_CONTINUE;
}
@@ -236,40 +215,40 @@ static void register_buttons(State *state, Color color, Color text_color, Color
state_add_button(state, cpu_btn);
cpu_update(cpu_btn);
- g_timeout_add(1000, cpu_update, cpu_btn);
+ g_timeout_add(G_TIME_SPAN_MILLISECOND, G_SOURCE_FUNC(cpu_update), cpu_btn);
// Temperature button
Button *temp_btn = button_simple_create(PANGO_ALIGN_RIGHT, color);
- button_simple_set_text(temp_btn, g_strdup("temp"), text_color);
+ button_simple_set_text(temp_btn, NULL, text_color);
button_simple_set_action(temp_btn, show_action, state);
button_set_line(temp_btn, line_color, line_w);
button_set_width(temp_btn, 0, min_w);
state_add_button(state, temp_btn);
temp_update(temp_btn);
- g_timeout_add(20 * 1000, temp_update, temp_btn);
+ g_timeout_add(20 * G_TIME_SPAN_MILLISECOND, G_SOURCE_FUNC(temp_update), temp_btn);
// Ram usage button
Button *ram_btn = button_simple_create(PANGO_ALIGN_RIGHT, color);
- button_simple_set_text(ram_btn, g_strdup("ram"), text_color);
+ button_simple_set_text(ram_btn, NULL, text_color);
button_simple_set_action(ram_btn, show_action, state);
button_set_line(ram_btn, line_color, line_w);
button_set_width(ram_btn, 0, min_w);
state_add_button(state, ram_btn);
ram_update(ram_btn);
- g_timeout_add(10 * 1000, ram_update, ram_btn);
+ g_timeout_add(10 * G_TIME_SPAN_MILLISECOND, G_SOURCE_FUNC(ram_update), ram_btn);
// Disk usage button
Button *disk_btn = button_simple_create(PANGO_ALIGN_RIGHT, color);
- button_simple_set_text(disk_btn, g_strdup("disk"), text_color);
+ button_simple_set_text(disk_btn, NULL, text_color);
button_simple_set_action(disk_btn, show_action, state);
button_set_line(disk_btn, line_color, line_w);
button_set_width(disk_btn, 0, min_w);
state_add_button(state, disk_btn);
disk_update(disk_btn);
- g_timeout_add(60 * 1000, disk_update, disk_btn);
+ g_timeout_add(60 * G_TIME_SPAN_MILLISECOND, G_SOURCE_FUNC(disk_update), disk_btn);
}
int main(int argc, char **argv)