X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Ftaskbar%2Ftaskbar.c;h=6ea6b4d18ef260220dcb1005b37cd04b016b55d0;hb=8abd6d423bffc9cd35928e1911c138163f7dbda9;hp=6fe5173aa1306eb33860aa183d1ab5877cc2fb66;hpb=bdf5fa4daad88f6a65b6f4be3acae7b663906e86;p=chaz%2Ftint2 diff --git a/src/taskbar/taskbar.c b/src/taskbar/taskbar.c index 6fe5173..6ea6b4d 100644 --- a/src/taskbar/taskbar.c +++ b/src/taskbar/taskbar.c @@ -36,8 +36,8 @@ void init_taskbar() { - Panel *panel; - int i, j; + Panel *panel; + int i, j; for (i=0 ; i < nb_panel ; i++) { panel = &panel1[i]; @@ -115,9 +115,9 @@ void init_taskbar() void cleanup_taskbar() { - Panel *panel; + Panel *panel; Taskbar *tskbar; - int i, j; + int i, j; GSList *l0; Task *tsk; @@ -152,11 +152,11 @@ void cleanup_taskbar() Task *task_get_task (Window win) { - Task *tsk; - GSList *l0; - int i, j; + Task *tsk; + GSList *l0; + int i, j; - for (i=0 ; i < nb_panel ; i++) { + 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; @@ -164,27 +164,42 @@ Task *task_get_task (Window win) return tsk; } } - } - return 0; + } + return 0; } -void task_refresh_tasklist () +GSList* task_get_tasks(Window win) { - Window *win, active_win; - int num_results, i, j, k; - GSList *l0; - Task *tsk; - - win = server_get_property (server.root_win, server.atom._NET_CLIENT_LIST, XA_WINDOW, &num_results); - if (!win) return; - - // Remove any old and set active win - active_win = window_get_active (); - if (task_active) { - task_active->area.is_active = 0; - task_active = 0; + GSList* l = 0; + GSList* it; + Task* tsk; + int i, j; + for (i=0; inext) { + tsk = it->data; + if (win == tsk->win) + l = g_slist_prepend(l, tsk); + } + } } + return l; +} + + +void task_refresh_tasklist () +{ + Window *win; + int num_results, i, j, k; + GSList *l0; + Task *tsk; + + win = server_get_property (server.root_win, server.atom._NET_CLIENT_LIST, XA_WINDOW, &num_results); + if (!win) return; + + // Remove any old and set active win + active_task(); for (i=0 ; i < nb_panel ; i++) { for (j=0 ; j < panel1[i].nb_desktop ; j++) { @@ -193,11 +208,6 @@ void task_refresh_tasklist () tsk = l0->data; l0 = l0->next; - if (tsk->win == active_win) { - tsk->area.is_active = 1; - task_active = tsk; - } - for (k = 0; k < num_results; k++) { if (tsk->win == win[k]) break; } @@ -205,28 +215,32 @@ void task_refresh_tasklist () if (k == num_results) remove_task (tsk); } } - } + } - // Add any new - for (i = 0; i < num_results; i++) - if (!task_get_task (win[i])) - add_task (win[i]); + // Add any new + for (i = 0; i < num_results; i++) + if (!task_get_task (win[i])) + add_task (win[i]); - XFree (win); + XFree (win); } void resize_taskbar(void *obj) { Taskbar *taskbar = (Taskbar*)obj; - Panel *panel = (Panel*)taskbar->area.panel; - Task *tsk; - GSList *l; - int task_count; + Panel *panel = (Panel*)taskbar->area.panel; + Task *tsk; + GSList *l; + int task_count, border_width; -//printf("resize_taskbar : posx et width des taches\n"); + //printf("resize_taskbar : posx et width des taches\n"); + taskbar->area.redraw = 1; - taskbar->area.redraw = 1; + if (taskbar->area.is_active && taskbar->area.use_active) + border_width = taskbar->area.pix_active.border.width; + else + border_width = taskbar->area.pix.border.width; if (panel_horizontal) { int pixel_width, modulo_width=0; @@ -236,7 +250,7 @@ void resize_taskbar(void *obj) task_count = g_slist_length(taskbar->area.list); if (!task_count) pixel_width = panel->g_task.maximum_width; else { - taskbar_width = taskbar->area.width - (2 * panel->g_taskbar.pix.border.width) - (2 * panel->g_taskbar.paddingxlr); + taskbar_width = taskbar->area.width - (2 * border_width) - (2 * panel->g_taskbar.paddingxlr); if (task_count>1) taskbar_width -= ((task_count-1) * panel->g_taskbar.paddingx); pixel_width = taskbar_width / task_count; @@ -246,21 +260,17 @@ void resize_taskbar(void *obj) modulo_width = taskbar_width % task_count; } - if ((taskbar->task_width == pixel_width) && (taskbar->task_modulo == modulo_width)) { - } - else { - taskbar->task_width = pixel_width; - taskbar->task_modulo = modulo_width; - taskbar->text_width = pixel_width - panel->g_task.text_posx - panel->g_task.area.pix.border.width - panel->g_task.area.paddingx; - } + taskbar->task_width = pixel_width; + taskbar->task_modulo = modulo_width; + taskbar->text_width = pixel_width - panel->g_task.text_posx - panel->g_task.area.pix.border.width - panel->g_task.area.paddingx; // change pos_x and width for all tasks - x = taskbar->area.posx + taskbar->area.pix.border.width + taskbar->area.paddingxlr; + x = taskbar->area.posx + border_width + taskbar->area.paddingxlr; for (l = taskbar->area.list; l ; l = l->next) { tsk = l->data; + if (!tsk->area.on_screen) continue; tsk->area.posx = x; tsk->area.width = pixel_width; - tsk->area.redraw = 1; if (modulo_width) { tsk->area.width++; modulo_width--; @@ -277,7 +287,7 @@ void resize_taskbar(void *obj) task_count = g_slist_length(taskbar->area.list); if (!task_count) pixel_height = panel->g_task.maximum_height; else { - taskbar_height = taskbar->area.height - (2 * panel->g_taskbar.pix.border.width) - (2 * panel->g_taskbar.paddingxlr); + taskbar_height = taskbar->area.height - (2 * border_width) - (2 * panel->g_taskbar.paddingxlr); if (task_count>1) taskbar_height -= ((task_count-1) * panel->g_taskbar.paddingx); pixel_height = taskbar_height / task_count; @@ -287,21 +297,17 @@ void resize_taskbar(void *obj) modulo_height = taskbar_height % task_count; } - if ((taskbar->task_width == pixel_height) && (taskbar->task_modulo == modulo_height)) { - } - else { - taskbar->task_width = pixel_height; - taskbar->task_modulo = modulo_height; - taskbar->text_width = taskbar->area.width - (2 * panel->g_taskbar.paddingy) - panel->g_task.text_posx - panel->g_task.area.pix.border.width - panel->g_task.area.paddingx; - } + taskbar->task_width = pixel_height; + taskbar->task_modulo = modulo_height; + taskbar->text_width = taskbar->area.width - (2 * panel->g_taskbar.paddingy) - panel->g_task.text_posx - panel->g_task.area.pix.border.width - panel->g_task.area.paddingx; // change pos_y and height for all tasks - y = taskbar->area.posy + taskbar->area.pix.border.width + taskbar->area.paddingxlr; + y = taskbar->area.posy + border_width + taskbar->area.paddingxlr; for (l = taskbar->area.list; l ; l = l->next) { tsk = l->data; + if (!tsk->area.on_screen) continue; tsk->area.posy = y; tsk->area.height = pixel_height; - tsk->area.redraw = 1; if (modulo_height) { tsk->area.height++; modulo_height--;