+void update_clocks_min(void* arg)
+{
+ // remember old_sec because after suspend/hibernate the clock should be updated directly, and not
+ // on next minute change
+ time_t old_sec = time_clock.tv_sec;
+ gettimeofday(&time_clock, 0);
+ if (time_clock.tv_sec % 60 == 0 || time_clock.tv_sec - old_sec > 60) {
+ int i;
+ if (time1_format) {
+ for (i=0 ; i < nb_panel ; i++)
+ panel1[i].clock.area.resize = 1;
+ }
+ panel_refresh = 1;
+ }
+}
+
+struct tm* clock_gettime_for_tz(const char* timezone) {
+ if (timezone) {
+ const char* old_tz = getenv("TZ");
+ setenv("TZ", timezone, 1);
+ struct tm* result = localtime(&time_clock.tv_sec);
+ if (old_tz) setenv("TZ", old_tz, 1);
+ else unsetenv("TZ");
+ return result;
+ }
+ else return localtime(&time_clock.tv_sec);
+}
+
+const char* clock_get_tooltip(void* obj)
+{
+ strftime(buf_tooltip, sizeof(buf_tooltip), time_tooltip_format, clock_gettime_for_tz(time_tooltip_timezone));
+ return buf_tooltip;
+}
+