X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Ftaskbar%2Ftaskbar.c;h=ce1338a341c2170493fca669a2a7fd7ad6361468;hb=fdf46b0955014ba7d955de46e67b4aff797a85db;hp=b2c7f952e0cf5d2e2ed6cde31cf53480e4d663c2;hpb=0357305cec0f78ba4d4717467025ead6be25ce0c;p=chaz%2Ftint2 diff --git a/src/taskbar/taskbar.c b/src/taskbar/taskbar.c index b2c7f95..ce1338a 100644 --- a/src/taskbar/taskbar.c +++ b/src/taskbar/taskbar.c @@ -42,17 +42,25 @@ void init_taskbar() for (i=0 ; i < nb_panel ; i++) { panel = &panel1[i]; + if (panel->taskbar) { + free(panel->taskbar); + panel->taskbar = 0; + } + // taskbar + panel->g_taskbar._resize = resize_taskbar; panel->g_taskbar.posy = panel->area.pix.border.width + panel->area.paddingy; panel->g_taskbar.height = panel->area.height - (2 * panel->g_taskbar.posy); panel->g_taskbar.redraw = 1; + panel->g_taskbar.on_screen = 1; // task - panel->g_task.area.draw_foreground = draw_foreground_task; + panel->g_task.area._draw_foreground = draw_task; panel->g_task.area.posy = panel->g_taskbar.posy + panel->g_taskbar.pix.border.width + panel->g_taskbar.paddingy; panel->g_task.area.height = panel->area.height - (2 * panel->g_task.area.posy); panel->g_task.area.use_active = 1; panel->g_task.area.redraw = 1; + panel->g_task.area.on_screen = 1; if (panel->g_task.area.pix.border.rounded > panel->g_task.area.height/2) { panel->g_task.area.pix.border.rounded = panel->g_task.area.height/2; @@ -83,39 +91,47 @@ void init_taskbar() tskbar = &panel->taskbar[j]; memcpy(&tskbar->area, &panel->g_taskbar, sizeof(Area)); tskbar->desktop = j; - } - resize_taskbar(panel); + // add taskbar to the panel + panel->area.list = g_slist_append(panel->area.list, tskbar); + } } - } void cleanup_taskbar() { Panel *panel; + Taskbar *tskbar; int i, j; GSList *l0; Task *tsk; for (i=0 ; i < nb_panel ; i++) { panel = &panel1[i]; - if (!panel->taskbar) continue; for (j=0 ; j < panel->nb_desktop ; j++) { - l0 = panel->taskbar[j].area.list; + tskbar = &panel->taskbar[j]; + l0 = tskbar->area.list; while (l0) { tsk = l0->data; l0 = l0->next; // careful : remove_task change l0->next remove_task (tsk); } + free_area (&tskbar->area); - free_area (&panel->taskbar[j].area); + // remove taskbar from the panel + panel->area.list = g_slist_remove(panel->area.list, tskbar); } + } - free(panel->taskbar); - panel->taskbar = 0; + for (i=0 ; i < nb_panel ; i++) { + panel = &panel1[i]; + if (panel->taskbar) { + free(panel->taskbar); + panel->taskbar = 0; + } } } @@ -173,7 +189,7 @@ void task_refresh_tasklist () if (tsk->win == win[k]) break; } // careful : remove_task change l0->next - if (tsk->win != win[k]) remove_task (tsk); + if (k == num_results) remove_task (tsk); } } } @@ -187,14 +203,19 @@ void task_refresh_tasklist () } -int resize_tasks (Taskbar *taskbar) +void resize_taskbar(void *obj) { - int ret, task_count, pixel_width, modulo_width=0; - int x, taskbar_width; - Task *tsk; + Taskbar *taskbar = (Taskbar*)obj; Panel *panel = (Panel*)taskbar->area.panel; + int task_count, pixel_width, modulo_width=0; + int x, taskbar_width; + Task *tsk; GSList *l; +//printf("resize_taskbar : posx et width des taches\n"); + + taskbar->area.redraw = 1; + // new task width for 'desktop' task_count = g_slist_length(taskbar->area.list); if (!task_count) pixel_width = panel->g_task.maximum_width; @@ -208,13 +229,10 @@ int resize_tasks (Taskbar *taskbar) else modulo_width = taskbar_width % task_count; } - //printf("monitor %d, resize_tasks %d %d\n", panel->monitor, task_count, pixel_width); if ((taskbar->task_width == pixel_width) && (taskbar->task_modulo == modulo_width)) { - ret = 0; } else { - ret = 1; 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; @@ -226,6 +244,7 @@ int resize_tasks (Taskbar *taskbar) tsk = l->data; tsk->area.posx = x; tsk->area.width = pixel_width; + tsk->area.redraw = 1; if (modulo_width) { tsk->area.width++; modulo_width--; @@ -233,46 +252,7 @@ int resize_tasks (Taskbar *taskbar) x += tsk->area.width + panel->g_taskbar.paddingx; } - return ret; } -// initialise taskbar posx and width -void resize_taskbar(void *p) -{ - Panel *panel = p; - int taskbar_width, modulo_width, taskbar_on_screen; - - if (panel_mode == MULTI_DESKTOP) taskbar_on_screen = panel->nb_desktop; - else taskbar_on_screen = 1; - - taskbar_width = panel->area.width - (2 * panel->area.paddingxlr) - (2 * panel->area.pix.border.width); - if (time1_format) - taskbar_width -= (panel->clock.area.width + panel->area.paddingx); - taskbar_width = (taskbar_width - ((taskbar_on_screen-1) * panel->area.paddingx)) / taskbar_on_screen; - - if (taskbar_on_screen > 1) - modulo_width = (taskbar_width - ((taskbar_on_screen-1) * panel->area.paddingx)) % taskbar_on_screen; - else - modulo_width = 0; - - int i, modulo=0, posx=0; - for (i=0 ; i < panel->nb_desktop ; i++) { - if ((i % taskbar_on_screen) == 0) { - posx = panel->area.pix.border.width + panel->area.paddingxlr; - modulo = modulo_width; - } - else posx += taskbar_width + panel->area.paddingx; - - panel->taskbar[i].area.posx = posx; - panel->taskbar[i].area.width = taskbar_width; - if (modulo) { - panel->taskbar[i].area.width++; - modulo--; - } - - resize_tasks(&panel->taskbar[i]); - } -} -