diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/comet.c | 45 |
1 files changed, 31 insertions, 14 deletions
diff --git a/src/comet.c b/src/comet.c index 4341a14..b8cce7d 100644 --- a/src/comet.c +++ b/src/comet.c @@ -71,11 +71,15 @@ static gboolean cpu_update(Button *btn) char *perc = cpu_percentage(); // Don't update on error - if (perc != NULL) { - ButtonSimple *sbtn = CAST(btn, ButtonSimple); - button_simple_set_text(btn, perc, sbtn->text_color); + if (perc == NULL) + return G_SOURCE_CONTINUE; + + ButtonSimple *sbtn = CAST(btn, ButtonSimple); + bool update = g_strcmp0(perc, sbtn->text) != 0; + button_simple_set_text(btn, perc, sbtn->text_color); + + if (update) state_request_redraw(sbtn->data, false); - } return G_SOURCE_CONTINUE; } @@ -97,26 +101,35 @@ static gboolean ram_update(Button *btn) int usage = 100 * (total - unused - buffers - cached) / total; fclose(meminfo); + ButtonSimple *sbtn = CAST(btn, ButtonSimple); - button_simple_set_text(btn, g_strdup_printf(" %d%%", usage), sbtn->text_color); + char *ram = g_strdup_printf(" %d%%", usage); + bool update = g_strcmp0(ram, sbtn->text) != 0; + button_simple_set_text(btn, ram, sbtn->text_color); + + if (update) + state_request_redraw(sbtn->data, false); - 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); + FILE *thermal = fopen("/sys/class/thermal/thermal_zone2/temp", "rb"); + g_assert_nonnull(thermal); uintmax_t value; - g_assert(1 == fscanf(temp, "%ju\n", &value)); - fclose(temp); + g_assert(1 == fscanf(thermal, "%ju\n", &value)); + fclose(thermal); ButtonSimple *sbtn = CAST(btn, ButtonSimple); - button_simple_set_text(btn, g_strdup_printf(" %d °C", (int)(value / 1000)), sbtn->text_color); + char *temp = g_strdup_printf(" %d °C", (int)(value / 1000)); + bool update = g_strcmp0(temp, sbtn->text) != 0; + button_simple_set_text(btn, temp, sbtn->text_color); + + if (update) + state_request_redraw(sbtn->data, false); - state_request_redraw(sbtn->data, false); return G_SOURCE_CONTINUE; } @@ -127,9 +140,13 @@ static gboolean disk_update(Button *btn) 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); + char *disk = g_strdup_printf(" %d%%", (int)round(used * 100.0)); + bool update = g_strcmp0(disk, sbtn->text) != 0; + button_simple_set_text(btn, disk, sbtn->text_color); + + if (update) + state_request_redraw(sbtn->data, false); - state_request_redraw(sbtn->data, false); return G_SOURCE_CONTINUE; } |
