]> Dogcows Code - chaz/tint2/blobdiff - src/config.c
fixed issue 13, removed Window magager s menu for stability reason
[chaz/tint2] / src / config.c
index acb49e89ea65e78c40466c81d4a781af5993fb0a..e292375c1ab1d4ebc9f0d08aed973cbd00cf49c0 100644 (file)
@@ -77,9 +77,10 @@ void cleanup ()
    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);
    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 (time1_format) g_free(time1_format);
+   if (time2_format) g_free(time2_format);
    if (server.monitor) free(server.monitor);
+   XFreeGC(server.dsp, server.gc);
    XCloseDisplay(server.dsp);
 }
 
@@ -103,23 +104,42 @@ void copy_file(const char *pathSrc, const char *pathDest)
 }
 
 
-void extract_values (const char *value, char **value1, char **value2)
+void extract_values (const char *value, char **value1, char **value2, char **value3)
 {
-   char *b;
+   char *b=0, *c=0;
 
    if (*value1) free (*value1);
    if (*value2) free (*value2);
+   if (*value3) free (*value3);
 
    if ((b = strchr (value, ' '))) {
       b[0] = '\0';
       b++;
-      *value2 = strdup (b);
-      g_strstrip(*value2);
-   }
-   else *value2 = 0;
-
-   *value1 = strdup (value);
-   g_strstrip(*value1);
+       }
+       else {
+       *value2 = 0;
+       *value3 = 0;
+       }
+       *value1 = strdup (value);
+       g_strstrip(*value1);
+
+       if (b) {
+               if ((c = strchr (b, ' '))) {
+                       c[0] = '\0';
+                       c++;
+               }
+               else {
+                       c = 0;
+                       *value3 = 0;
+               }
+               *value2 = strdup (b);
+               g_strstrip(*value2);
+       }
+
+       if (c) {
+               *value3 = strdup (c);
+               g_strstrip(*value3);
+       }
 }
 
 
@@ -194,7 +214,7 @@ void get_action (char *event, int *action)
 
 void add_entry (char *key, char *value)
 {
-   char *value1=0, *value2=0;
+   char *value1=0, *value2=0, *value3=0;
 
    /* Background and border */
    if (strcmp (key, "rounded") == 0) {
@@ -209,14 +229,14 @@ void add_entry (char *key, char *value)
    }
    else if (strcmp (key, "background_color") == 0) {
       Area *a = g_slist_last(list_back)->data;
-      extract_values(value, &value1, &value2);
+      extract_values(value, &value1, &value2, &value3);
       get_color (value1, a->pix.back.color);
       if (value2) a->pix.back.alpha = (atoi (value2) / 100.0);
       else a->pix.back.alpha = 0.5;
    }
    else if (strcmp (key, "border_color") == 0) {
       Area *a = g_slist_last(list_back)->data;
-      extract_values(value, &value1, &value2);
+      extract_values(value, &value1, &value2, &value3);
       get_color (value1, a->pix.border.color);
       if (value2) a->pix.border.alpha = (atoi (value2) / 100.0);
       else a->pix.border.alpha = 0.5;
@@ -228,22 +248,24 @@ void add_entry (char *key, char *value)
       if (panel.monitor > 0) panel.monitor -= 1;
    }
    else if (strcmp (key, "panel_size") == 0) {
-      extract_values(value, &value1, &value2);
+      extract_values(value, &value1, &value2, &value3);
       panel.area.width = atoi (value1);
       if (value2) panel.area.height = atoi (value2);
    }
    else if (strcmp (key, "panel_margin") == 0) {
-      extract_values(value, &value1, &value2);
-      panel.marginx = atoi (value1);
+      extract_values(value, &value1, &value2, &value3);
+      panel.marginleft = panel.marginright = atoi (value1);
       if (value2) panel.marginy = atoi (value2);
+      if (value3) panel.marginright = atoi (value3);
    }
    else if (strcmp (key, "panel_padding") == 0) {
-      extract_values(value, &value1, &value2);
-      panel.area.paddingx = atoi (value1);
+      extract_values(value, &value1, &value2, &value3);
+      panel.area.paddingxlr = panel.area.paddingx = atoi (value1);
       if (value2) panel.area.paddingy = atoi (value2);
+      if (value3) panel.area.paddingx = atoi (value3);
    }
    else if (strcmp (key, "panel_position") == 0) {
-      extract_values(value, &value1, &value2);
+      extract_values(value, &value1, &value2, &value3);
       if (strcmp (value1, "top") == 0) panel.position = TOP;
       else panel.position = BOTTOM;
 
@@ -267,14 +289,14 @@ void add_entry (char *key, char *value)
 
    /* Clock */
    else if (strcmp (key, "time1_format") == 0) {
-      if (panel.clock.time1_format) g_free(panel.clock.time1_format);
-      if (strlen(value) > 0) panel.clock.time1_format = strdup (value);
-      else panel.clock.time1_format = 0;
+      if (time1_format) g_free(time1_format);
+      if (strlen(value) > 0) time1_format = strdup (value);
+      else time1_format = 0;
    }
    else if (strcmp (key, "time2_format") == 0) {
-      if (panel.clock.time2_format) g_free(panel.clock.time2_format);
-      if (strlen(value) > 0) panel.clock.time2_format = strdup (value);
-      else panel.clock.time2_format = 0;
+      if (time2_format) g_free(time2_format);
+      if (strlen(value) > 0) time2_format = strdup (value);
+      else time2_format = 0;
    }
    else if (strcmp (key, "time1_font") == 0) {
       if (panel.clock.time1_font_desc) pango_font_description_free(panel.clock.time1_font_desc);
@@ -285,15 +307,16 @@ void add_entry (char *key, char *value)
       panel.clock.time2_font_desc = pango_font_description_from_string (value);
    }
    else if (strcmp (key, "clock_font_color") == 0) {
-      extract_values(value, &value1, &value2);
+      extract_values(value, &value1, &value2, &value3);
       get_color (value1, panel.clock.font.color);
       if (value2) panel.clock.font.alpha = (atoi (value2) / 100.0);
       else panel.clock.font.alpha = 0.1;
    }
    else if (strcmp (key, "clock_padding") == 0) {
-      extract_values(value, &value1, &value2);
-      panel.clock.area.paddingx = atoi (value1);
+      extract_values(value, &value1, &value2, &value3);
+      panel.clock.area.paddingxlr = panel.clock.area.paddingx = atoi (value1);
       if (value2) panel.clock.area.paddingy = atoi (value2);
+      if (value3) panel.clock.area.paddingx = atoi (value3);
    }
    else if (strcmp (key, "clock_background_id") == 0) {
       int id = atoi (value);
@@ -309,9 +332,10 @@ void add_entry (char *key, char *value)
       else panel.mode = SINGLE_DESKTOP;
    }
    else if (strcmp (key, "taskbar_padding") == 0) {
-      extract_values(value, &value1, &value2);
-      g_taskbar.paddingx = atoi (value1);
+      extract_values(value, &value1, &value2, &value3);
+      g_taskbar.paddingxlr = g_taskbar.paddingx = atoi (value1);
       if (value2) g_taskbar.paddingy = atoi (value2);
+      if (value3) g_taskbar.paddingx = atoi (value3);
    }
    else if (strcmp (key, "taskbar_background_id") == 0) {
       int id = atoi (value);
@@ -330,24 +354,23 @@ void add_entry (char *key, char *value)
    else if (strcmp (key, "task_width") == 0)
       g_task.maximum_width = atoi (value);
    else if (strcmp (key, "task_padding") == 0) {
-      extract_values(value, &value1, &value2);
-      g_task.area.paddingx = atoi (value1);
-      if (value2) {
-         g_task.area.paddingy = atoi (value2);
-      }
+      extract_values(value, &value1, &value2, &value3);
+      g_task.area.paddingxlr = g_task.area.paddingx = atoi (value1);
+      if (value2) g_task.area.paddingy = atoi (value2);
+      if (value3) g_task.area.paddingx = atoi (value3);
    }
    else if (strcmp (key, "task_font") == 0) {
       if (g_task.font_desc) pango_font_description_free(g_task.font_desc);
       g_task.font_desc = pango_font_description_from_string (value);
    }
    else if (strcmp (key, "task_font_color") == 0) {
-      extract_values(value, &value1, &value2);
+      extract_values(value, &value1, &value2, &value3);
       get_color (value1, g_task.font.color);
       if (value2) g_task.font.alpha = (atoi (value2) / 100.0);
       else g_task.font.alpha = 0.1;
    }
    else if (strcmp (key, "task_active_font_color") == 0) {
-      extract_values(value, &value1, &value2);
+      extract_values(value, &value1, &value2, &value3);
       get_color (value1, g_task.font_active.color);
       if (value2) g_task.font_active.alpha = (atoi (value2) / 100.0);
       else g_task.font_active.alpha = 0.1;
@@ -427,6 +450,7 @@ void add_entry (char *key, char *value)
 
    if (value1) free (value1);
    if (value2) free (value2);
+   if (value3) free (value3);
 }
 
 
@@ -499,7 +523,7 @@ void config_taskbar()
          panel.area.list = g_slist_append(panel.area.list, tskbar);
       }
    }
-   if (panel.clock.time1_format)
+   if (time1_format)
       panel.area.list = g_slist_append(panel.area.list, &panel.clock);
 
    //printf("taskbar (desktop x monitor) : (%d x %d)\n", panel.nb_desktop, panel.nb_monitor);
@@ -520,7 +544,7 @@ void config_finish ()
 
    if (panel.monitor > (server.nb_monitor-1)) {
       panel.sleep_mode = 1;
-      printf("tint2 sleep and wait monitor %d.\n", panel.monitor+1);
+      fprintf(stderr, "tint2 sleep and wait monitor %d.\n", panel.monitor+1);
    }
    else {
       panel.sleep_mode = 0;
@@ -529,7 +553,8 @@ void config_finish ()
          fprintf(stderr, "tint2 error : invalid monitor size.\n");
    }
 
-   if (!panel.area.width) panel.area.width = server.monitor[panel.monitor].width - 1;
+       // use panel.marginleft and panel.marginright even in full width mode
+   if (!panel.area.width) panel.area.width = server.monitor[panel.monitor].width - panel.marginleft - panel.marginright;
 
    // taskbar
    g_taskbar.posy = panel.area.pix.border.width + panel.area.paddingy;
@@ -556,7 +581,7 @@ void config_finish ()
    g_task.text_posy = (g_task.area.height - height) / 2.0;
 
    // add task_icon_size
-   g_task.text_posx = g_task.area.paddingx + g_task.area.pix.border.width;
+   g_task.text_posx = g_task.area.paddingxlr + g_task.area.pix.border.width;
    if (g_task.icon) {
       g_task.icon_size1 = g_task.area.height - (2 * g_task.area.paddingy);
       g_task.text_posx += g_task.icon_size1;
@@ -631,8 +656,8 @@ int config_read_file (const char *path)
 void save_config ()
 {
    fprintf(stderr, "tint2 warning : convert user's config file\n");
-   panel.area.paddingx = panel.area.paddingy = panel.marginx;
-   panel.marginx = panel.marginy = 0;
+   panel.area.paddingx = panel.area.paddingy = panel.marginleft;
+   panel.marginleft = panel.marginright = panel.marginy = 0;
 
    if (panel.old_task_icon == 0) g_task.icon_size1 = 0;
    if (panel.old_panel_background == 0) panel.area.pix.back.alpha = 0;
@@ -667,7 +692,7 @@ void save_config ()
    else if (panel.position & RIGHT) fputs(" right\n", fp);
    else fputs(" center\n", fp);
    fprintf(fp, "panel_size = %d %d\n", panel.area.width, panel.area.height);
-   fprintf(fp, "panel_margin = %d %d\n", panel.marginx, panel.marginy);
+   fprintf(fp, "panel_margin = %d %d\n", panel.marginleft, panel.marginy);
    fprintf(fp, "panel_padding = %d %d\n", panel.area.paddingx, panel.area.paddingy);
    fprintf(fp, "font_shadow = %d\n", g_task.font_shadow);
 
This page took 0.033702 seconds and 4 git commands to generate.