From: Thierry Lorthiois Date: Fri, 5 Jun 2009 18:53:49 +0000 (+0000) Subject: fixed issue 46 and 59 : urgent task X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Ftint2;a=commitdiff_plain;h=11c177f708dc4f9cb0762050e3e376ced0272fd7 fixed issue 46 and 59 : urgent task --- diff --git a/ChangeLog b/ChangeLog index 34ab28f..07bbd86 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +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 diff --git a/src/clock/clock.c b/src/clock/clock.c index eaaf69c..a3061cb 100644 --- a/src/clock/clock.c +++ b/src/clock/clock.c @@ -44,6 +44,16 @@ static char buf_time[40]; 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; @@ -58,13 +68,7 @@ void init_clock() 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; @@ -72,6 +76,8 @@ void init_clock() 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; diff --git a/src/clock/clock.h b/src/clock/clock.h index 7b28e85..f607f72 100644 --- a/src/clock/clock.h +++ b/src/clock/clock.h @@ -36,6 +36,7 @@ extern char *clock_rclick_command; // initialize clock : y position, precision, ... void init_clock(); +void init_precision(); void draw_clock (void *obj, cairo_t *c, int active); diff --git a/src/panel.c b/src/panel.c index 7d0fa90..4e8547e 100644 --- a/src/panel.c +++ b/src/panel.c @@ -43,8 +43,9 @@ int panel_mode; 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; @@ -136,6 +137,9 @@ void cleanup_panel() { if (!panel1) return; + task_active = 0; + task_drag = 0; + task_urgent = 0; cleanup_systray(); cleanup_taskbar(); diff --git a/src/panel.h b/src/panel.h index f7fc0ff..8e0c305 100644 --- a/src/panel.h +++ b/src/panel.h @@ -43,6 +43,7 @@ extern int panel_refresh; extern Task *task_active; extern Task *task_drag; +extern Task *task_urgent; typedef struct { diff --git a/src/systray/systraybar.c b/src/systray/systraybar.c index ef1578f..4b1ac20 100644 --- a/src/systray/systraybar.c +++ b/src/systray/systraybar.c @@ -111,6 +111,7 @@ void draw_systray(void *obj, cairo_t *c, int active) 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(); @@ -124,7 +125,6 @@ void draw_systray(void *obj, cairo_t *c, int active) // show the window XMapRaised(server.dsp, traywin->id); } - XSetWindowBackgroundPixmap (server.dsp, panel->main_win, systray.area.pix.pmap); } diff --git a/src/tint.c b/src/tint.c index cfe0c70..ee6a848 100644 --- a/src/tint.c +++ b/src/tint.c @@ -302,6 +302,10 @@ void event_property_notify (XEvent *e) } 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) @@ -358,9 +362,8 @@ void event_property_notify (XEvent *e) // 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) { @@ -473,25 +476,31 @@ void event_configure_notify (Window win) 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; } diff --git a/src/tint2 b/src/tint2 index 35eeffa..3534023 100755 Binary files a/src/tint2 and b/src/tint2 differ