X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Fconfig.c;h=d93d2c3d4166115c237fe9fadb8ec2d0bf5771f2;hb=1b1f2a1a069edcf3db99ae07020eeedae3023f76;hp=0e7eae43f47a6374a4f356bf8bd8731cfe65b6b2;hpb=d1325f97fb4fb3267c4c8955d9f2bf4c165da928;p=chaz%2Ftint2 diff --git a/src/config.c b/src/config.c index 0e7eae4..d93d2c3 100644 --- a/src/config.c +++ b/src/config.c @@ -32,6 +32,7 @@ #include #include #include +#include #include #include "common.h" @@ -51,16 +52,16 @@ // global path char *config_path = 0; -char *thumbnail_path = 0; +char *snapshot_path = 0; // -------------------------------------------------- // backward compatibility static int old_task_icon_size; -static char *old_task_font; -static char *old_time1_font; -static char *old_time2_font; -static Area *area_task, *area_task_active; - +static Area *area_task; +static Area *area_task_active; +// detect if it's an old config file +// ==1 +static int old_config_file; // temporary list of background static GSList *list_back; @@ -74,19 +75,30 @@ void init_config() // tint2 could reload config, so we cleanup objects cleanup_systray(); +#ifdef ENABLE_BATTERY cleanup_battery(); +#endif cleanup_clock(); cleanup_tooltip(); // panel's default value + if (panel_config.g_task.font_desc) { + pango_font_description_free(panel_config.g_task.font_desc); + } memset(&panel_config, 0, sizeof(Panel)); panel_config.g_task.alpha = 100; panel_config.g_task.alpha_active = 100; systray.sort = 3; + old_config_file = 1; // window manager's menu default value == false wm_menu = 0; max_tick_urgent = 7; + + // flush pango cache if possible + //pango_xft_shutdown_display(server.dsp, server.screen); + //PangoFontMap *font_map = pango_xft_get_font_map(server.dsp, server.screen); + //pango_fc_font_map_shutdown(font_map); } @@ -161,6 +173,10 @@ void get_action (char *event, int *action) *action = DESKTOP_LEFT; else if (strcmp (event, "desktop_right") == 0) *action = DESKTOP_RIGHT; + else if (strcmp (event, "next_task") == 0) + *action = NEXT_TASK; + else if (strcmp (event, "prev_task") == 0) + *action = PREV_TASK; } @@ -370,6 +386,10 @@ void add_entry (char *key, char *value) memcpy(&panel_config.clock.area.pix.back, &a->pix.back, sizeof(Color)); memcpy(&panel_config.clock.area.pix.border, &a->pix.border, sizeof(Border)); } + else if (strcmp(key, "clock_tooltip") == 0) { + if (strlen(value) > 0) + time_tooltip_format = strdup (value); + } else if (strcmp(key, "clock_lclick_command") == 0) { if (strlen(value) > 0) clock_lclick_command = strdup(value); @@ -471,10 +491,13 @@ void add_entry (char *key, char *value) /* Systray */ else if (strcmp (key, "systray") == 0) { - if(atoi(value) == 1) - systray_enabled = 1; + systray_enabled = atoi(value); + // systray is latest option added. files without 'systray' are old. + old_config_file = 0; } else if (strcmp (key, "systray_padding") == 0) { + if (old_config_file) + systray_enabled = 1; extract_values(value, &value1, &value2, &value3); systray.area.paddingxlr = systray.area.paddingx = atoi (value1); if (value2) systray.area.paddingy = atoi (value2); @@ -503,14 +526,18 @@ void add_entry (char *key, char *value) else if (strcmp (key, "tooltip_show_timeout") == 0) { double timeout = atof(value); int sec = (int)timeout; - int usec = (timeout-sec)*1e6; - g_tooltip.show_timeout.it_value = (struct timeval){.tv_sec=sec, .tv_usec=usec}; + int nsec = (timeout-sec)*1e9; + if (nsec < 0) // can happen because of double is not precise such that (sec > timeout)==TRUE + nsec = 0; + g_tooltip.show_timeout = (struct timespec){.tv_sec=sec, .tv_nsec=nsec}; } else if (strcmp (key, "tooltip_hide_timeout") == 0) { double timeout = atof(value); int sec = (int)timeout; - int usec = (timeout-sec)*1e6; - g_tooltip.hide_timeout.it_value = (struct timeval){.tv_sec=sec, .tv_usec=usec}; + int nsec = (timeout-sec)*1e9; + if (nsec < 0) // can happen because of double is not precise such that (sec > timeout)==TRUE + nsec = 0; + g_tooltip.hide_timeout = (struct timespec){.tv_sec=sec, .tv_nsec=nsec}; } else if (strcmp (key, "tooltip_padding") == 0) { extract_values(value, &value1, &value2, &value3); @@ -645,7 +672,6 @@ int config_read () g_free(path1); // copy tint2rc from system directory to user directory - g_free(path1); char *path2 = 0; system_dirs = g_get_system_config_dirs(); for (i = 0; system_dirs[i]; i++) { @@ -682,9 +708,6 @@ int config_read_file (const char *path) char *key, *value; if ((fp = fopen(path, "r")) == NULL) return 0; - old_task_font = 0; - old_time1_font = 0; - old_time2_font = 0; while (fgets(line, sizeof(line), fp) != NULL) { if (parse_line(line, &key, &value)) { @@ -698,18 +721,6 @@ int config_read_file (const char *path) if (old_task_icon_size) { panel_config.g_task.area.paddingy = ((int)panel_config.area.height - (2 * panel_config.area.paddingy) - old_task_icon_size) / 2; } - if (old_task_font) { - g_free(old_task_font); - old_task_font = 0; - } - if (old_time1_font) { - g_free(old_time1_font); - old_time1_font = 0; - } - if (old_time2_font) { - g_free(old_time2_font); - old_time2_font = 0; - } return 1; }