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:
parent
8847de07c1
commit
cb6ac44a9c
4 changed files with 48 additions and 39 deletions
|
@ -168,6 +168,7 @@ void init_panel()
|
|||
init_taskbar();
|
||||
visible_object();
|
||||
task_refresh_tasklist();
|
||||
active_task();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
39
src/tint.c
39
src/tint.c
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue