all repos — tint2 @ cb6ac44a9c62cf62737968e0397a4d0fa03c2b2d

fork of the tint2 desktop panel for my custom setup - only minimized windows across all desktops for the taskbar

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
commit

cb6ac44a9c62cf62737968e0397a4d0fa03c2b2d

parent

8847de07c1906d2065eddbc1aa9df39d6f6f45aa

4 files changed, 48 insertions(+), 39 deletions(-)

jump to
M src/panel.csrc/panel.c

@@ -168,6 +168,7 @@ refresh_systray = 1;

init_taskbar(); visible_object(); task_refresh_tasklist(); + active_task(); }
M src/taskbar/task.csrc/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.hsrc/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.csrc/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) {