]> Dogcows Code - chaz/tint2/blobdiff - src/config.c
fixed decorated window with compiz
[chaz/tint2] / src / config.c
index c38cfec074ab9979c6d29983499ce86eebb96e5b..9bcc84ca1066cdd5fd4e643a82831261b60d4178 100644 (file)
 
 
 void cleanup_taskbar() 
-{
-   Task *tsk;
-   Taskbar *tskbar;
+{   
    GSList *l0;
-   for (l0 = panel.area.list; l0 ; l0 = l0->next) {
-      tskbar = l0->data;
-      GSList *l1;
-      for (l1 = tskbar->area.list; l1 ; l1 = l1->next) {
-         tsk = l1->data;
+   Task *tsk;
+   
+   int i, nb;
+   nb = panel.nb_desktop * panel.nb_monitor;
+   for (i=0 ; i < nb ; i++) {
+      l0 = panel.taskbar[i].area.list;
+      while (l0) {
+         tsk = l0->data;
+         l0 = l0->next;
+         // careful : remove_task change l0->next
          remove_task (tsk);
       }
-      g_slist_free(tskbar->area.list);
+      
+      free_area (&panel.taskbar[i].area);
    }
-   g_slist_free(panel.area.list);
-   panel.area.list = 0;
+
+   free(panel.taskbar);
+   panel.taskbar = 0;
+   
+   free_area(&panel.area);
 }
 
 
@@ -69,7 +76,7 @@ void cleanup ()
    if (g_task.font_desc) pango_font_description_free(g_task.font_desc);
    if (panel.clock.time1_font_desc) pango_font_description_free(panel.clock.time1_font_desc);
    if (panel.clock.time2_font_desc) pango_font_description_free(panel.clock.time2_font_desc);
-   cleanup_taskbar();
+   if (panel.taskbar) cleanup_taskbar();
    if (panel.clock.time1_format) g_free(panel.clock.time1_format);
    if (panel.clock.time2_format) g_free(panel.clock.time2_format);
    if (server.monitor) free(server.monitor);
@@ -473,37 +480,31 @@ void config_taskbar()
       fprintf(stderr, "tint2 warning : cannot found number of desktop.\n");
    }
 
-   cleanup_taskbar();
+   if (panel.taskbar) cleanup_taskbar();
    
    panel.nb_desktop = server.nb_desktop;
    if (panel.mode == MULTI_MONITOR) panel.nb_monitor = server.nb_monitor;
    else panel.nb_monitor = 1;
-   // TODO: mémoriser le pointeur sur la première
-   // malgré l'apparant désordre, les taskbars sont ordonnées
-   Taskbar *new_tskbar;
+   panel.taskbar = calloc(panel.nb_desktop * panel.nb_monitor, sizeof(Taskbar));
+   g_slist_free(panel.area.list);
+   panel.area.list = 0;
+
+   Taskbar *tskbar;
    for (i=0 ; i < panel.nb_desktop ; i++) {
       for (j=0 ; j < panel.nb_monitor ; j++) {
-         new_tskbar = calloc(1, sizeof(Taskbar));
-         memcpy(&new_tskbar->area, &g_taskbar, sizeof(Area));
-         new_tskbar->desktop = i;
-         new_tskbar->monitor = j;
+         tskbar = &panel.taskbar[index(i,j)];
+         memcpy(&tskbar->area, &g_taskbar, sizeof(Area));
+         tskbar->desktop = i;
+         tskbar->monitor = j;
          
-         panel.area.list = g_slist_append(panel.area.list, new_tskbar);
+         // TODO: redefinir panel.area.list en fonction des objets visibles
+         panel.area.list = g_slist_append(panel.area.list, tskbar);
       }
    }
-   /*
-   comment faire pour parcourir les barres de taches ? on ne peut pas se baser sur l'ordre des éléments !!
-   a t'on besoin de parcourir les barres de taches ?? OUI !! bof ??
-   => resize_taskbar() dans panel.c => 
-   => task_refresh_tasklist () dans taskbar.c
-   => Task *task_get_task (Window win) dans taskbar.c
-   => event_button_press (int x, int y) dans tint.c => area->event_button_press() est conseillé !!
-   cela enlève aussi l'organisation des barres de taches en tableau à 2 dimensions
-   il est possible de mémoriser un pointeur sur la première barre de taches
-*/
+   if (panel.clock.time1_format)
+      panel.area.list = g_slist_append(panel.area.list, &panel.clock);
    
-   //printf("tasbar (desktop x monitor) : (%d x %d)\n", panel.nb_desktop, panel.nb_monitor);
+   //printf("taskbar (desktop x monitor) : (%d x %d)\n", panel.nb_desktop, panel.nb_monitor);
    resize_taskbar();
    task_refresh_tasklist ();
    panel.refresh = 1;
@@ -529,7 +530,7 @@ void config_finish ()
       if (!server.monitor[panel.monitor].width || !server.monitor[panel.monitor].height) 
          fprintf(stderr, "tint2 error : invalid monitor size.\n");
    }
-      
+
    if (!panel.area.width) panel.area.width = server.monitor[panel.monitor].width;
    
    // taskbar
@@ -551,9 +552,6 @@ void config_finish ()
       panel.area.border.rounded = panel.area.height/2;
 
    // clock
-   panel.clock.area.posy = panel.area.border.width + panel.area.paddingy;
-   panel.clock.area.height = panel.area.height - (2 * panel.clock.area.posy);
-   panel.clock.area.redraw = 1;      
    init_clock(&panel.clock, panel.area.height);
 
    // compute vertical position : text and icon
@@ -569,13 +567,15 @@ void config_finish ()
    }
    
    config_taskbar();
-   
+   visible_object();
+
    // cleanup background list
    GSList *l0;
    for (l0 = list_back; l0 ; l0 = l0->next) {
       free(l0->data);
    }
    g_slist_free(list_back);
+   list_back = NULL;
 }
 
 
This page took 0.023818 seconds and 4 git commands to generate.