diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/comet.c | 115 |
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) |
