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(); init_taskbar();
visible_object(); visible_object();
task_refresh_tasklist(); 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_icon (Task *tsk);
void get_title(Task *tsk); void get_title(Task *tsk);
void active_task();
#endif #endif

View File

@@ -457,44 +457,7 @@ void event_property_notify (XEvent *e)
} }
// Change active // Change active
else if (at == server.atom._NET_ACTIVE_WINDOW) { else if (at == server.atom._NET_ACTIVE_WINDOW) {
GSList *l0; active_task();
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;
}
panel_refresh = 1; panel_refresh = 1;
} }
else if (at == server.atom._XROOTPMAP_ID) { else if (at == server.atom._XROOTPMAP_ID) {