fixed : lost of active task on SIGUSR1

git-svn-id: http://tint2.googlecode.com/svn/trunk@227 121b4492-b84c-0410-8b4c-0d4edfb3f3cc
This commit is contained in:
lorthiois@bbsoft.fr 2009-10-23 21:28:44 +00:00
parent 8847de07c1
commit cb6ac44a9c
4 changed files with 48 additions and 39 deletions

View file

@ -168,6 +168,7 @@ void init_panel()
init_taskbar();
visible_object();
task_refresh_tasklist();
active_task();
}

View file

@ -364,3 +364,48 @@ void draw_task (void *obj, cairo_t *c, int active)
}
void active_task()
{
GSList *l0;
int i, j;
Task *tsk1, *tsk2;
if (task_active) {
for (i=0 ; i < nb_panel ; i++) {
for (j=0 ; j < panel1[i].nb_desktop ; j++) {
for (l0 = panel1[i].taskbar[j].area.list; l0 ; l0 = l0->next) {
tsk1 = l0->data;
tsk1->area.is_active = 0;
}
}
}
task_active = 0;
}
Window w1 = window_get_active ();
tsk2 = task_get_task(w1);
if (!tsk2) {
Window w2;
if (XGetTransientForHint(server.dsp, w1, &w2) != 0)
if (w2) tsk2 = task_get_task(w2);
}
if (task_urgent == tsk2) {
init_precision();
task_urgent = 0;
}
// put active state on all task (multi_desktop)
if (tsk2) {
for (i=0 ; i < nb_panel ; i++) {
for (j=0 ; j < panel1[i].nb_desktop ; j++) {
for (l0 = panel1[i].taskbar[j].area.list; l0 ; l0 = l0->next) {
tsk1 = l0->data;
if (tsk1->win == tsk2->win) {
tsk1->area.is_active = 1;
}
}
}
}
task_active = tsk2;
}
}

View file

@ -62,7 +62,7 @@ void draw_task (void *obj, cairo_t *c, int active);
void get_icon (Task *tsk);
void get_title(Task *tsk);
void active_task();
#endif

View file

@ -457,44 +457,7 @@ void event_property_notify (XEvent *e)
}
// Change active
else if (at == server.atom._NET_ACTIVE_WINDOW) {
GSList *l0;
if (task_active) {
for (i=0 ; i < nb_panel ; i++) {
for (j=0 ; j < panel1[i].nb_desktop ; j++) {
for (l0 = panel1[i].taskbar[j].area.list; l0 ; l0 = l0->next) {
tsk = l0->data;
tsk->area.is_active = 0;
}
}
}
task_active = 0;
}
Window w1 = window_get_active ();
Task *t = task_get_task(w1);
if (!t) {
Window w2;
if (XGetTransientForHint(server.dsp, w1, &w2) != 0)
if (w2) t = task_get_task(w2);
}
if (task_urgent == t) {
init_precision();
task_urgent = 0;
}
// put active state on all task (multi_desktop)
if (t) {
for (i=0 ; i < nb_panel ; i++) {
for (j=0 ; j < panel1[i].nb_desktop ; j++) {
for (l0 = panel1[i].taskbar[j].area.list; l0 ; l0 = l0->next) {
tsk = l0->data;
if (tsk->win == t->win) {
tsk->area.is_active = 1;
//printf("active monitor %d, task %s\n", panel1[i].monitor, tsk->title);
}
}
}
}
task_active = t;
}
active_task();
panel_refresh = 1;
}
else if (at == server.atom._XROOTPMAP_ID) {