fixed issue 46 and 59 : urgent task

git-svn-id: http://tint2.googlecode.com/svn/trunk@85 121b4492-b84c-0410-8b4c-0d4edfb3f3cc
This commit is contained in:
lorthiois@bbsoft.fr 2009-06-05 18:53:49 +00:00
parent 26ab02d533
commit 41b8b3aa53
8 changed files with 48 additions and 23 deletions

View file

@ -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 2009-06-04
- patch by dmitry.medvinsky : right/left clic command - patch by dmitry.medvinsky : right/left clic command

View file

@ -44,6 +44,16 @@ static char buf_time[40];
static char buf_date[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() void init_clock()
{ {
Panel *panel; Panel *panel;
@ -58,13 +68,7 @@ void init_clock()
clock->area.panel = panel; clock->area.panel = panel;
clock->area._draw_foreground = draw_clock; clock->area._draw_foreground = draw_clock;
clock->area._resize = resize_clock; clock->area._resize = resize_clock;
init_precision();
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;
// update clock to force update (-time_precision) // update clock to force update (-time_precision)
struct timeval stv; struct timeval stv;
@ -72,6 +76,8 @@ void init_clock()
time_clock.tv_sec = stv.tv_sec - time_precision; time_clock.tv_sec = stv.tv_sec - time_precision;
time_clock.tv_sec -= time_clock.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.posy = panel->area.pix.border.width + panel->area.paddingy;
clock->area.height = panel->area.height - (2 * clock->area.posy); clock->area.height = panel->area.height - (2 * clock->area.posy);
clock->area.resize = 1; clock->area.resize = 1;

View file

@ -36,6 +36,7 @@ extern char *clock_rclick_command;
// initialize clock : y position, precision, ... // initialize clock : y position, precision, ...
void init_clock(); void init_clock();
void init_precision();
void draw_clock (void *obj, cairo_t *c, int active); void draw_clock (void *obj, cairo_t *c, int active);

View file

@ -43,8 +43,9 @@ int panel_mode;
int panel_position; int panel_position;
int panel_refresh; int panel_refresh;
Task *task_active = 0; Task *task_active;
Task *task_drag = 0; Task *task_drag;
Task *task_urgent;
Panel *panel1 = 0; Panel *panel1 = 0;
int nb_panel; int nb_panel;
@ -136,6 +137,9 @@ void cleanup_panel()
{ {
if (!panel1) return; if (!panel1) return;
task_active = 0;
task_drag = 0;
task_urgent = 0;
cleanup_systray(); cleanup_systray();
cleanup_taskbar(); cleanup_taskbar();

View file

@ -43,6 +43,7 @@ extern int panel_refresh;
extern Task *task_active; extern Task *task_active;
extern Task *task_drag; extern Task *task_drag;
extern Task *task_urgent;
typedef struct { typedef struct {

View file

@ -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); 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 // ceci intervertie les fonds : le premier icone prend le fond du dernier
// le dernier prend le fond de l'avant 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 // resize our window so that the new window can fit in it
//fix_geometry(); //fix_geometry();
@ -124,7 +125,6 @@ void draw_systray(void *obj, cairo_t *c, int active)
// show the window // show the window
XMapRaised(server.dsp, traywin->id); XMapRaised(server.dsp, traywin->id);
} }
XSetWindowBackgroundPixmap (server.dsp, panel->main_win, systray.area.pix.pmap);
} }

View file

@ -302,6 +302,10 @@ void event_property_notify (XEvent *e)
} }
Window w1 = window_get_active (); Window w1 = window_get_active ();
Task *t = task_get_task(w1); Task *t = task_get_task(w1);
if (task_urgent == t) {
init_precision();
task_urgent = 0;
}
if (!t) { if (!t) {
Window w2; Window w2;
if (XGetTransientForHint(server.dsp, w1, &w2) != 0) if (XGetTransientForHint(server.dsp, w1, &w2) != 0)
@ -358,9 +362,8 @@ void event_property_notify (XEvent *e)
// Demand attention // Demand attention
else if (at == server.atom._NET_WM_STATE) { else if (at == server.atom._NET_WM_STATE) {
if (window_is_urgent (win)) { if (window_is_urgent (win)) {
printf(" event_property_notify _NET_WM_STATE_DEMANDS_ATTENTION\n"); task_urgent = tsk;
} time_precision = 1;
else {
} }
} }
else if (at == server.atom.WM_STATE) { else if (at == server.atom.WM_STATE) {
@ -473,25 +476,31 @@ void event_configure_notify (Window win)
void event_timer() void event_timer()
{ {
struct timeval stv; struct timeval stv;
int i;
if (!time1_format) return;
if (gettimeofday(&stv, 0)) return; if (gettimeofday(&stv, 0)) return;
if (abs(stv.tv_sec - time_clock.tv_sec) < time_precision) 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 // update battery
if (panel1[0].battery.area.on_screen) if (panel1[0].battery.area.on_screen) {
update_battery(&battery_state); update_battery(&battery_state);
for (i=0 ; i < nb_panel ; i++)
panel1[i].battery.area.resize = 1;
}
// update clock // update clock
time_clock.tv_sec = stv.tv_sec; if (time1_format) {
time_clock.tv_sec -= time_clock.tv_sec % time_precision; 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++)
for (i=0 ; i < nb_panel ; i++) { panel1[i].clock.area.resize = 1;
panel1[i].clock.area.resize = 1;
panel1[i].battery.area.resize = 1;
} }
panel_refresh = 1; panel_refresh = 1;
} }

BIN
src/tint2

Binary file not shown.