+void init_taskbar()
+{
+ Panel *panel;
+ int i, j;
+
+ 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_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;
+ panel->g_task.area.pix_active.border.rounded = panel->g_task.area.pix.border.rounded;
+ }
+
+ // compute vertical position : text and icon
+ int height_ink, height;
+ get_text_size(panel->g_task.font_desc, &height_ink, &height, panel->area.height, "TAjpg", 5);
+
+ if (!panel->g_task.maximum_width)
+ panel->g_task.maximum_width = server.monitor[panel->monitor].width;
+
+ // add task_icon_size
+ panel->g_task.text_posx = panel->g_task.area.paddingxlr + panel->g_task.area.pix.border.width;
+ panel->g_task.text_posy = (panel->g_task.area.height - height) / 2.0;
+ if (panel->g_task.icon) {
+ panel->g_task.icon_size1 = panel->g_task.area.height - (2 * panel->g_task.area.paddingy);
+ panel->g_task.text_posx += panel->g_task.icon_size1;
+ panel->g_task.icon_posy = (panel->g_task.area.height - panel->g_task.icon_size1) / 2;
+ }
+ //printf("monitor %d, task_maximum_width %d\n", panel->monitor, panel->g_task.maximum_width);
+
+ Taskbar *tskbar;
+ panel->nb_desktop = server.nb_desktop;
+ panel->taskbar = calloc(panel->nb_desktop, sizeof(Taskbar));
+ for (j=0 ; j < panel->nb_desktop ; j++) {
+ tskbar = &panel->taskbar[j];
+ memcpy(&tskbar->area, &panel->g_taskbar, sizeof(Area));
+ tskbar->desktop = j;
+
+ // 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];
+
+ for (j=0 ; j < panel->nb_desktop ; j++) {
+ 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);
+
+ // remove taskbar from the panel
+ panel->area.list = g_slist_remove(panel->area.list, tskbar);
+ }
+ }
+
+ for (i=0 ; i < nb_panel ; i++) {
+ panel = &panel1[i];
+ if (panel->taskbar) {
+ free(panel->taskbar);
+ panel->taskbar = 0;
+ }
+ }
+}
+
+