#include <cairo.h>
#include <cairo-xlib.h>
#include <pango/pangocairo.h>
-#include <unistd.h>
-#include <signal.h>
#include <stdlib.h>
#include "window.h"
#include "server.h"
-#include "area.h"
#include "panel.h"
-#include "taskbar.h"
#include "clock.h"
#include "timer.h"
+#include "common.h"
char *time1_format;
void cleanup_clock()
{
-printf("*** cleanup_clock()\n");
if (time1_font_desc) pango_font_description_free(time1_font_desc);
if (time2_font_desc) pango_font_description_free(time2_font_desc);
if (time1_format) g_free(time1_format);
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;
- clock->area.on_screen = 1;
+ // check consistency
+ if (time1_format == 0)
+ return;
+ clock->area.on_screen = 1;
strftime(buf_time, sizeof(buf_time), time1_format, clock_gettime_for_tz(time1_timezone));
get_text_size(time1_font_desc, &time_height_ink, &time_height, panel->area.height, buf_time, strlen(buf_time));
if (time2_format) {
}
else {
// panel vertical => fixed width, height, posy and posx
- clock->area.posy = panel->area.bg->border.width + panel->area.paddingxlr;
- clock->area.height = (2 * clock->area.paddingxlr) + (time_height + date_height);
clock->area.posx = panel->area.bg->border.width + panel->area.paddingy;
clock->area.width = panel->area.width - (2 * panel->area.bg->border.width) - (2 * panel->area.paddingy);
}
}
-void resize_clock (void *obj)
+int resize_clock (void *obj)
{
Clock *clock = obj;
PangoLayout *layout;
- int time_width, date_width, new_width;
+ int time_width, date_width, new_width, ret = 0;
clock->area.redraw = 1;
time_width = date_width = 0;
strftime(buf_date, sizeof(buf_date), time2_format, clock_gettime_for_tz(time2_timezone));
// vertical panel doen't adjust width
- if (!panel_horizontal) return;
+ if (!panel_horizontal) {
+// clock->area.posy = panel->area.bg->border.width + panel->area.paddingxlr;
+// clock->area.height = (2 * clock->area.paddingxlr) + (time_height + date_height);
+ return ret;
+ }
//printf(" resize_clock\n");
cairo_surface_t *cs;
else new_width = date_width;
new_width += (2*clock->area.paddingxlr) + (2*clock->area.bg->border.width);
- Panel *panel = ((Area*)obj)->panel;
if (new_width > clock->area.width || new_width < (clock->area.width-6)) {
// resize clock
// we try to limit the number of resize
clock->area.width = new_width + 1;
// resize other objects on panel
- panel->area.resize = 1;
-#ifdef ENABLE_BATTERY
- panel->battery.area.resize = 1;
-#endif
- systray.area.resize = 1;
+ ret = 1;
panel_refresh = 1;
}
- clock->area.posx = panel->area.width - clock->area.width - panel->area.paddingxlr - panel->area.bg->border.width;
-
g_object_unref (layout);
cairo_destroy (c);
cairo_surface_destroy (cs);
XFreePixmap (server.dsp, pmap);
+ return ret;
}
command = clock_rclick_command;
break;
}
- if (command) {
- pid_t pid;
- pid = fork();
- if (pid == 0) {
- // change for the fork the signal mask
-// sigset_t sigset;
-// sigprocmask(SIG_SETMASK, &sigset, 0);
-// sigprocmask(SIG_UNBLOCK, &sigset, 0);
- execl("/bin/sh", "/bin/sh", "-c", command, NULL);
- _exit(0);
- }
- }
+ tint_exec(command);
}