fixed : lost of active task on SIGUSR1 git-svn-id: http://tint2.googlecode.com/svn/trunk@227 121b4492-b84c-0410-8b4c-0d4edfb3f3cc
lorthiois@bbsoft.fr lorthiois@bbsoft.fr@121b4492-b84c-0410-8b4c-0d4edfb3f3cc
4 files changed,
48 insertions(+),
39 deletions(-)
M
src/panel.c
→
src/panel.c
@@ -168,6 +168,7 @@ refresh_systray = 1;
init_taskbar(); visible_object(); task_refresh_tasklist(); + active_task(); }
M
src/taskbar/task.c
→
src/taskbar/task.c
@@ -364,3 +364,48 @@ }
} +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; + } +} +
M
src/taskbar/task.h
→
src/taskbar/task.h
@@ -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
M
src/tint.c
→
src/tint.c
@@ -457,44 +457,7 @@ panel_refresh = 1;
} // 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) {