+2009-06-05
+- fixed issue 46 and 59 : urgent task
+ limitation : just one urgent task at a time
+
2009-06-04
- patch by dmitry.medvinsky : right/left clic command
static char buf_date[40];
+void init_precision()
+{
+ if (!time1_format) time_precision = 60;
+ else if (strchr(time1_format, 'S')) time_precision = 1;
+ else if (strchr(time1_format, 'T')) time_precision = 1;
+ else if (strchr(time1_format, 'r')) time_precision = 1;
+ else time_precision = 60;
+}
+
+
void init_clock()
{
Panel *panel;
clock->area.panel = panel;
clock->area._draw_foreground = draw_clock;
clock->area._resize = resize_clock;
-
- if (!clock->area.on_screen) continue;
-
- if (strchr(time1_format, 'S')) time_precision = 1;
- else if (strchr(time1_format, 'T')) time_precision = 1;
- else if (strchr(time1_format, 'r')) time_precision = 1;
- else time_precision = 60;
+ init_precision();
// update clock to force update (-time_precision)
struct timeval stv;
time_clock.tv_sec = stv.tv_sec - time_precision;
time_clock.tv_sec -= time_clock.tv_sec % time_precision;
+ if (!clock->area.on_screen) continue;
+
clock->area.posy = panel->area.pix.border.width + panel->area.paddingy;
clock->area.height = panel->area.height - (2 * clock->area.posy);
clock->area.resize = 1;
// initialize clock : y position, precision, ...
void init_clock();
+void init_precision();
void draw_clock (void *obj, cairo_t *c, int active);
int panel_position;
int panel_refresh;
-Task *task_active = 0;
-Task *task_drag = 0;
+Task *task_active;
+Task *task_drag;
+Task *task_urgent;
Panel *panel1 = 0;
int nb_panel;
{
if (!panel1) return;
+ task_active = 0;
+ task_drag = 0;
+ task_urgent = 0;
cleanup_systray();
cleanup_taskbar();
extern Task *task_active;
extern Task *task_drag;
+extern Task *task_urgent;
typedef struct {
XMoveResizeWindow(server.dsp, traywin->id, traywin->x, traywin->y, icon_size, icon_size);
// ceci intervertie les fonds : le premier icone prend le fond du dernier
// le dernier prend le fond de l'avant dernier, ...
+ XSetWindowBackgroundPixmap (server.dsp, panel->main_win, systray.area.pix.pmap);
// resize our window so that the new window can fit in it
//fix_geometry();
// show the window
XMapRaised(server.dsp, traywin->id);
}
- XSetWindowBackgroundPixmap (server.dsp, panel->main_win, systray.area.pix.pmap);
}
}
Window w1 = window_get_active ();
Task *t = task_get_task(w1);
+ if (task_urgent == t) {
+ init_precision();
+ task_urgent = 0;
+ }
if (!t) {
Window w2;
if (XGetTransientForHint(server.dsp, w1, &w2) != 0)
// Demand attention
else if (at == server.atom._NET_WM_STATE) {
if (window_is_urgent (win)) {
- printf(" event_property_notify _NET_WM_STATE_DEMANDS_ATTENTION\n");
- }
- else {
+ task_urgent = tsk;
+ time_precision = 1;
}
}
else if (at == server.atom.WM_STATE) {
void event_timer()
{
struct timeval stv;
-
- if (!time1_format) return;
+ int i;
if (gettimeofday(&stv, 0)) return;
if (abs(stv.tv_sec - time_clock.tv_sec) < time_precision) return;
+ // urgent task
+ if (task_urgent) {
+ task_urgent->area.is_active = !task_urgent->area.is_active;
+ task_urgent->area.redraw = 1;
+ }
+
// update battery
- if (panel1[0].battery.area.on_screen)
+ if (panel1[0].battery.area.on_screen) {
update_battery(&battery_state);
+ for (i=0 ; i < nb_panel ; i++)
+ panel1[i].battery.area.resize = 1;
+ }
// update clock
- time_clock.tv_sec = stv.tv_sec;
- time_clock.tv_sec -= time_clock.tv_sec % time_precision;
-
- int i;
- for (i=0 ; i < nb_panel ; i++) {
- panel1[i].clock.area.resize = 1;
- panel1[i].battery.area.resize = 1;
+ if (time1_format) {
+ time_clock.tv_sec = stv.tv_sec;
+ time_clock.tv_sec -= time_clock.tv_sec % time_precision;
+ for (i=0 ; i < nb_panel ; i++)
+ panel1[i].clock.area.resize = 1;
}
panel_refresh = 1;
}