From 0bcb780ab356a8ac3a9b23c054c6f702c8718b5b Mon Sep 17 00:00:00 2001 From: Thierry Lorthiois Date: Sun, 25 Oct 2009 16:36:40 +0000 Subject: [PATCH] more tint2conf cleanup --- configure.ac | 6 +-- src/config.c | 111 +++----------------------------------- src/tint2conf/Makefile.am | 3 +- src/tint2conf/main.c | 85 +++++++++++++++++++++-------- src/util/common.c | 95 ++++++++++++++++++++++++++++++++ src/util/common.h | 12 ++++- 6 files changed, 181 insertions(+), 131 deletions(-) diff --git a/configure.ac b/configure.ac index c6276c8..3c118fc 100644 --- a/configure.ac +++ b/configure.ac @@ -31,12 +31,12 @@ AM_CONDITIONAL([INSTALL_EXAMPLES], [test x$examples = xtrue]) # tint2conf AC_ARG_ENABLE([tint2conf], - [AS_HELP_STRING([--enable-tint2conf], [Build and install tint2conf, a GTK+2 configuration utility for tint2 (EXPERIMENTAL)])], + [AS_HELP_STRING([--disable-tint2conf], [Disable tint2conf build, a GTK+2 theme switcher for tint2])], [case "${enableval}" in yes) tint2conf=true ;; no) tint2conf=false ;; - *) AC_MSG_ERROR([bad value ${enableval} for --enable-tint2conf]) ;; - esac],[tint2conf=false]) + *) AC_MSG_ERROR([bad value ${enableval} for --disable-tint2conf]) ;; + esac],[tint2conf=true]) AM_CONDITIONAL([ENABLE_TINT2CONF], [test x$tint2conf = xtrue]) # diff --git a/src/config.c b/src/config.c index 9fa585b..90cb31e 100644 --- a/src/config.c +++ b/src/config.c @@ -100,25 +100,6 @@ void cleanup_config() } -void copy_file(const char *pathSrc, const char *pathDest) -{ - FILE *fileSrc, *fileDest; - char line[100]; - int nb; - - fileSrc = fopen(pathSrc, "rb"); - if (fileSrc == NULL) return; - - fileDest = fopen(pathDest, "wb"); - if (fileDest == NULL) return; - - while ((nb = fread(line, 1, 100, fileSrc)) > 0) fwrite(line, 1, nb, fileDest); - - fclose (fileDest); - fclose (fileSrc); -} - - void extract_values (const char *value, char **value1, char **value2, char **value3) { char *b=0, *c=0; @@ -158,58 +139,6 @@ void extract_values (const char *value, char **value1, char **value2, char **val } -int hex_char_to_int (char c) -{ - int r; - - if (c >= '0' && c <= '9') r = c - '0'; - else if (c >= 'a' && c <= 'f') r = c - 'a' + 10; - else if (c >= 'A' && c <= 'F') r = c - 'A' + 10; - else r = 0; - - return r; -} - - -int hex_to_rgb (char *hex, int *r, int *g, int *b) -{ - int len; - - if (hex == NULL || hex[0] != '#') return (0); - - len = strlen (hex); - if (len == 3 + 1) { - *r = hex_char_to_int (hex[1]); - *g = hex_char_to_int (hex[2]); - *b = hex_char_to_int (hex[3]); - } - else if (len == 6 + 1) { - *r = hex_char_to_int (hex[1]) * 16 + hex_char_to_int (hex[2]); - *g = hex_char_to_int (hex[3]) * 16 + hex_char_to_int (hex[4]); - *b = hex_char_to_int (hex[5]) * 16 + hex_char_to_int (hex[6]); - } - else if (len == 12 + 1) { - *r = hex_char_to_int (hex[1]) * 16 + hex_char_to_int (hex[2]); - *g = hex_char_to_int (hex[5]) * 16 + hex_char_to_int (hex[6]); - *b = hex_char_to_int (hex[9]) * 16 + hex_char_to_int (hex[10]); - } - else return 0; - - return 1; -} - - -void get_color (char *hex, double *rgb) -{ - int r, g, b; - hex_to_rgb (hex, &r, &g, &b); - - rgb[0] = (r / 255.0); - rgb[1] = (g / 255.0); - rgb[2] = (b / 255.0); -} - - void get_action (char *event, int *action) { if (strcmp (event, "none") == 0) @@ -709,35 +638,6 @@ void add_entry (char *key, char *value) } -int parse_line (const char *line) -{ - char *a, *b, *key, *value; - - /* Skip useless lines */ - if ((line[0] == '#') || (line[0] == '\n')) return 0; - if (!(a = strchr (line, '='))) return 0; - - /* overwrite '=' with '\0' */ - a[0] = '\0'; - key = strdup (line); - a++; - - /* overwrite '\n' with '\0' if '\n' present */ - if ((b = strchr (a, '\n'))) b[0] = '\0'; - - value = strdup (a); - - g_strstrip(key); - g_strstrip(value); - - add_entry (key, value); - - free (key); - free (value); - return 1; -} - - void config_finish () { if (panel_config.monitor > (server.nb_monitor-1)) { @@ -830,15 +730,20 @@ int config_read_file (const char *path) { FILE *fp; char line[80]; + 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) - parse_line (line); - + while (fgets(line, sizeof(line), fp) != NULL) { + if (parse_line(line, &key, &value)) { + add_entry (key, value); + free (key); + free (value); + } + } fclose (fp); if (save_file_config) diff --git a/src/tint2conf/Makefile.am b/src/tint2conf/Makefile.am index b7b625a..baf4a59 100644 --- a/src/tint2conf/Makefile.am +++ b/src/tint2conf/Makefile.am @@ -1,6 +1,7 @@ if ENABLE_TINT2CONF bin_PROGRAMS = tint2conf -tint2conf_SOURCES = main.c +tint2conf_SOURCES = main.c ../util/common.c +INCLUDES = -I../util AM_CFLAGS += @TINT2CONF_CFLAGS@ LIBS += @TINT2CONF_LIBS@ diff --git a/src/tint2conf/main.c b/src/tint2conf/main.c index 7e9ce05..f4a232d 100644 --- a/src/tint2conf/main.c +++ b/src/tint2conf/main.c @@ -24,6 +24,8 @@ #include #include +#include "common.h" + // TODO // ** add, saveas @@ -75,6 +77,9 @@ static void init_list(GtkWidget *list); static void add_to_list(GtkWidget *list, const gchar *str); void on_changed(GtkWidget *widget, gpointer label); +void read_config(char **defaultTheme); +void write_config(char *defaultTheme); +void check_theme(); // define menubar and toolbar @@ -136,7 +141,7 @@ int main (int argc, char ** argv) gtk_init (&argc, &argv); g_thread_init( NULL ); - checkConfig(); + check_theme(); // define main layout : container, menubar, toolbar window = gtk_window_new (GTK_WINDOW_TOPLEVEL); @@ -314,7 +319,6 @@ static void menuDelete (void) static void menuProperties (void) { - printf("menuProperties\n"); system("python /home/thil/Desktop/tintwizard/tintwizard.py"); } @@ -355,9 +359,11 @@ static void menuApply (void) gtk_tree_model_get(model, &iter, LIST_ITEM, &value, -1); name1 = g_build_filename (g_get_user_config_dir(), "tint2", value, NULL); name2 = g_strdup_printf("%s.tint2rc", name1); + g_free(name1); + copy_file(name2, pathConfig); + write_config(value); g_free(value); - g_free(name1); g_free(name2); // restart panel @@ -395,38 +401,71 @@ static void loadTheme(GtkWidget *list) } } g_dir_close(dir); -} + // search default theme + GtkTreeIter iter; + GtkTreeModel *model; + name = NULL; + read_config(&name); + if (name) { + printf("defaultTheme %s\n", name); + //gtk_tree_selection_select_iter(GtkTreeSelection *selection, GtkTreeIter *iter); + } +} -// config file management -void checkConfig() +// theme file management +void read_config(char **defaultTheme) { - pathDir = g_build_filename (g_get_user_config_dir(), "tint2", NULL); - if (!g_file_test (pathDir, G_FILE_TEST_IS_DIR)) - g_mkdir(pathDir, 0777); - - pathConfig = g_build_filename (g_get_user_config_dir(), "tint2", "tint2rc", NULL); - + char *path; + + path = g_build_filename (g_get_user_config_dir(), "tint2", "tint2confrc", NULL); + if (g_file_test (path, G_FILE_TEST_EXISTS)) { + FILE *fp; + char line[80]; + char *key, *value; + if ((fp = fopen(path, "r")) != NULL) { + while (fgets(line, sizeof(line), fp) != NULL) { + if (parse_line(line, &key, &value)) { + if (strcmp (key, "default_theme") == 0) { + *defaultTheme = strdup (value); + } + free (key); + free (value); + } + } + fclose (fp); + } + } + g_free(path); } -void copy_file(const char *pathSrc, const char *pathDest) +void write_config(char *defaultTheme) { - FILE *fileSrc, *fileDest; - char line[100]; - int nb; + char *path; + FILE *fp; + + path = g_build_filename (g_get_user_config_dir(), "tint2", "tint2confrc", NULL); + fp = fopen(path, "w"); + if (fp != NULL) { + fputs("#---------------------------------------------\n", fp); + fputs("# TINT2CONF CONFIG FILE\n", fp); + fprintf(fp, "default_theme = %s\n\n", defaultTheme); + fclose (fp); + } + g_free(path); +} - fileSrc = fopen(pathSrc, "rb"); - if (fileSrc == NULL) return; - fileDest = fopen(pathDest, "wb"); - if (fileDest == NULL) return; +void check_theme() +{ + pathDir = g_build_filename (g_get_user_config_dir(), "tint2", NULL); + if (!g_file_test (pathDir, G_FILE_TEST_IS_DIR)) + g_mkdir(pathDir, 0777); - while ((nb = fread(line, 1, 100, fileSrc)) > 0) fwrite(line, 1, nb, fileDest); + pathConfig = g_build_filename (g_get_user_config_dir(), "tint2", "tint2rc", NULL); - fclose (fileDest); - fclose (fileSrc); } diff --git a/src/util/common.c b/src/util/common.c index 55a853b..c0ca6c3 100644 --- a/src/util/common.c +++ b/src/util/common.c @@ -30,6 +30,101 @@ +void copy_file(const char *pathSrc, const char *pathDest) +{ + FILE *fileSrc, *fileDest; + char line[100]; + int nb; + + fileSrc = fopen(pathSrc, "rb"); + if (fileSrc == NULL) return; + + fileDest = fopen(pathDest, "wb"); + if (fileDest == NULL) return; + + while ((nb = fread(line, 1, 100, fileSrc)) > 0) fwrite(line, 1, nb, fileDest); + + fclose (fileDest); + fclose (fileSrc); +} + + +int parse_line (const char *line, char **key, char **value) +{ + char *a, *b; + + /* Skip useless lines */ + if ((line[0] == '#') || (line[0] == '\n')) return 0; + if (!(a = strchr (line, '='))) return 0; + + /* overwrite '=' with '\0' */ + a[0] = '\0'; + *key = strdup (line); + a++; + + /* overwrite '\n' with '\0' if '\n' present */ + if ((b = strchr (a, '\n'))) b[0] = '\0'; + + *value = strdup (a); + + g_strstrip(*key); + g_strstrip(*value); + return 1; +} + + +int hex_char_to_int (char c) +{ + int r; + + if (c >= '0' && c <= '9') r = c - '0'; + else if (c >= 'a' && c <= 'f') r = c - 'a' + 10; + else if (c >= 'A' && c <= 'F') r = c - 'A' + 10; + else r = 0; + + return r; +} + + +int hex_to_rgb (char *hex, int *r, int *g, int *b) +{ + int len; + + if (hex == NULL || hex[0] != '#') return (0); + + len = strlen (hex); + if (len == 3 + 1) { + *r = hex_char_to_int (hex[1]); + *g = hex_char_to_int (hex[2]); + *b = hex_char_to_int (hex[3]); + } + else if (len == 6 + 1) { + *r = hex_char_to_int (hex[1]) * 16 + hex_char_to_int (hex[2]); + *g = hex_char_to_int (hex[3]) * 16 + hex_char_to_int (hex[4]); + *b = hex_char_to_int (hex[5]) * 16 + hex_char_to_int (hex[6]); + } + else if (len == 12 + 1) { + *r = hex_char_to_int (hex[1]) * 16 + hex_char_to_int (hex[2]); + *g = hex_char_to_int (hex[5]) * 16 + hex_char_to_int (hex[6]); + *b = hex_char_to_int (hex[9]) * 16 + hex_char_to_int (hex[10]); + } + else return 0; + + return 1; +} + + +void get_color (char *hex, double *rgb) +{ + int r, g, b; + hex_to_rgb (hex, &r, &g, &b); + + rgb[0] = (r / 255.0); + rgb[1] = (g / 255.0); + rgb[2] = (b / 255.0); +} + + void adjust_asb(DATA32 *data, int w, int h, int alpha, float satur, float bright) { unsigned int x, y; diff --git a/src/util/common.h b/src/util/common.h index 16e1669..034666b 100644 --- a/src/util/common.h +++ b/src/util/common.h @@ -50,10 +50,20 @@ typedef struct config_color } config_color; +// copy file source to file dest +void copy_file(const char *pathSrc, const char *pathDest); + +// extract key = value +int parse_line (const char *line, char **key, char **value); + +// conversion +int hex_char_to_int (char c); +int hex_to_rgb (char *hex, int *r, int *g, int *b); +void get_color (char *hex, double *rgb); + // adjust Alpha/Saturation/Brightness on an ARGB icon // alpha from 0 to 100, satur from 0 to 1, bright from 0 to 1. void adjust_asb(DATA32 *data, int w, int h, int alpha, float satur, float bright); - #endif -- 2.45.2