Update clock only when time changes
authorHugo Villeneuve <hugo@hugovil.com>
Sun, 21 Dec 2014 21:41:19 +0000 (16:41 -0500)
committerHugo Villeneuve <hugo@hugovil.com>
Sun, 24 Apr 2016 22:31:09 +0000 (18:31 -0400)
src/clock.c

index b26d125..05964b5 100644 (file)
@@ -447,8 +447,29 @@ static gboolean
 hvclock_update(gpointer data)
 {
        GtkWidget *clock = GTK_WIDGET(data);
+       static struct tm previous;
+       struct tm *now;
+       int update = false;
 
-       hvclock_redraw_canvas(clock);
+       now = clock_get_time();
+
+       /* Update only if time has changed. If the hours or minutes have
+        * changed, force update. */
+       if ((now->tm_hour != previous.tm_hour) ||
+           (now->tm_min != previous.tm_min)) {
+               update = true;
+       }
+
+       /* If the seconds have changed, force update only if displaying of
+        * the seconds hand is requested. */
+       if (hvclock_infos.show_seconds && (now->tm_sec != previous.tm_sec)) {
+               update = true;
+       }
+
+       if (update) {
+               hvclock_redraw_canvas(clock);
+               previous = *now;
+       }
 
        return TRUE; /* keep running this event */
 }