+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;
+}
+
+
+void init_clock()
+{
+ if(time1_format && clock_timeout==0) {
+ if (strchr(time1_format, 'S') || strchr(time1_format, 'T') || strchr(time1_format, 'r'))
+ clock_timeout = add_timeout(10, 1000, update_clocks_sec, 0);
+ else
+ clock_timeout = add_timeout(10, 1000, update_clocks_min, 0);
+ }
+}
+
+
+void init_clock_panel(void *p)
+{
+ Panel *panel =(Panel*)p;
+ Clock *clock = &panel->clock;
+
+ clock->area.parent = p;
+ clock->area.panel = p;
+ clock->area._draw_foreground = draw_clock;
+ clock->area.size_mode = SIZE_BY_CONTENT;
+ clock->area._resize = resize_clock;
+ clock->area.resize = 1;
+ clock->area.redraw = 1;
+ // check consistency
+ if (time1_format == 0)
+ return;
+
+ clock->area.on_screen = 1;
+
+ if (time_tooltip_format) {
+ clock->area._get_tooltip_text = clock_get_tooltip;
+ strftime(buf_tooltip, sizeof(buf_tooltip), time_tooltip_format, clock_gettime_for_tz(time_tooltip_timezone));
+ }
+}
+
+
+void draw_clock (void *obj, cairo_t *c)
+{
+ Clock *clock = obj;
+ PangoLayout *layout;
+
+ layout = pango_cairo_create_layout (c);
+
+ // draw layout
+ pango_layout_set_font_description (layout, time1_font_desc);
+ pango_layout_set_width (layout, clock->area.width * PANGO_SCALE);
+ pango_layout_set_alignment (layout, PANGO_ALIGN_CENTER);
+ pango_layout_set_text (layout, buf_time, strlen(buf_time));
+
+ cairo_set_source_rgba (c, clock->font.color[0], clock->font.color[1], clock->font.color[2], clock->font.alpha);
+
+ pango_cairo_update_layout (c, layout);
+ cairo_move_to (c, 0, clock->time1_posy);
+ pango_cairo_show_layout (c, layout);
+
+ if (time2_format) {
+ pango_layout_set_font_description (layout, time2_font_desc);
+ pango_layout_set_indent(layout, 0);
+ pango_layout_set_text (layout, buf_date, strlen(buf_date));
+ pango_layout_set_width (layout, clock->area.width * PANGO_SCALE);
+
+ pango_cairo_update_layout (c, layout);
+ cairo_move_to (c, 0, clock->time2_posy);
+ pango_cairo_show_layout (c, layout);
+ }
+
+ g_object_unref (layout);
+}
+
+
+int resize_clock (void *obj)
+{
+ Clock *clock = obj;
+ Panel *panel = clock->area.panel;
+ int time_height_ink, time_height, time_width, date_height_ink, date_height, date_width, ret = 0;