From e9bbe8178ab45cb9880c9b6b0324e9b4467f26d5 Mon Sep 17 00:00:00 2001 From: Federico Angelilli Date: Sat, 25 Nov 2023 18:42:33 +0100 Subject: Recalculate layouts only when needed --- src/comet.c | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) (limited to 'src/comet.c') diff --git a/src/comet.c b/src/comet.c index fd393bc..45de1f6 100644 --- a/src/comet.c +++ b/src/comet.c @@ -43,14 +43,17 @@ static gboolean disk_update(gpointer 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); + g_free(btn->text); btn->text = g_strdup_printf(" %d%%", (int)round(used * 100.0)); + size_t len2 = g_utf8_strlen(btn->text, -1); + log_debug("Updated disk percentage"); - state_redraw(btn->action_data); + state_redraw(btn->action_data, len1 != len2); return G_SOURCE_CONTINUE; } @@ -86,9 +89,13 @@ static gboolean cpu_update(gpointer data) char *perc = cpu_percentage(); // Don't update on error if (perc != NULL) { + size_t len1 = g_utf8_strlen(btn->text, -1); + g_free(btn->text); btn->text = perc; - state_redraw(btn->action_data); + + size_t len2 = g_utf8_strlen(btn->text, -1); + state_redraw(btn->action_data, len1 != len2); } log_debug("Updated cpu percentage"); @@ -111,11 +118,15 @@ static gboolean ram_update(gpointer data) &total, &unused, &buffers, &buffers, &cached)); fclose(meminfo); + size_t len1 = g_utf8_strlen(btn->text, -1); + g_free(btn->text); btn->text = g_strdup_printf(" %d%%", (int)(100 * (total - unused - buffers - cached) / total)); + size_t len2 = g_utf8_strlen(btn->text, -1); + log_debug("Updated ram percentage"); - state_redraw(btn->action_data); + state_redraw(btn->action_data, len1 != len2); return G_SOURCE_CONTINUE; } @@ -123,11 +134,15 @@ static gboolean date_update(gpointer data) { Button *btn = data; + size_t len1 = g_utf8_strlen(btn->text, -1); g_free(btn->text); + GDateTime *time = g_date_time_new_now_local(); char *date = g_date_time_format(time, "%A %d %H:%M"); g_assert(date != NULL); + btn->text = date; + size_t len2 = g_utf8_strlen(btn->text, -1); struct { State *state; @@ -135,7 +150,7 @@ static gboolean date_update(gpointer data) } *date_ctx = btn->action_data; log_debug("Updated date and time"); - state_redraw(date_ctx->state); + state_redraw(date_ctx->state, len1 != len2); struct timespec current; clock_gettime(CLOCK_REALTIME, ¤t); @@ -251,7 +266,7 @@ int main(int argc, char **argv) guint source_term = g_unix_signal_add(SIGTERM, mainloop_quit, mainloop); guint source_int = g_unix_signal_add(SIGINT, mainloop_quit, mainloop); - state_redraw(state); + state_redraw(state, true); log_debug("Starting main loop"); g_main_loop_run(mainloop); -- cgit v1.2.3