From 0fae0eb881c82e304878bc47b0462b3caed05ed7 Mon Sep 17 00:00:00 2001 From: Thierry Lorthiois Date: Fri, 23 Oct 2009 21:28:44 +0000 Subject: [PATCH] fixed : lost of active task on SIGUSR1 --- src/panel.c | 1 + src/taskbar/task.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ src/taskbar/task.h | 2 +- src/tint.c | 39 +-------------------------------------- 4 files changed, 48 insertions(+), 39 deletions(-) diff --git a/src/panel.c b/src/panel.c index bdf8813..c6c706e 100644 --- a/src/panel.c +++ b/src/panel.c @@ -168,6 +168,7 @@ void init_panel() init_taskbar(); visible_object(); task_refresh_tasklist(); + active_task(); } diff --git a/src/taskbar/task.c b/src/taskbar/task.c index 6309f27..c180f85 100644 --- a/src/taskbar/task.c +++ b/src/taskbar/task.c @@ -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; + } +} + diff --git a/src/taskbar/task.h b/src/taskbar/task.h index 981509e..b29e576 100644 --- a/src/taskbar/task.h +++ b/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 diff --git a/src/tint.c b/src/tint.c index 3eebf88..ed1865c 100644 --- a/src/tint.c +++ b/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) { -- 2.44.0