/* * grn_config.c: functions for configuration saving/retrieving * * $Id: grn_config.c,v 1.32 2000/06/28 11:28:28 sc Exp $ */ /* Copyright (C) 1999-2000 Sergey Chernikov (sc@ivvs.ul.ru) * * Authors: Sergey Chernikov * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA */ #include "grn_consts.h" #include #include #include #include "grn_config.h" #include "grn_vars.h" #include "grn_util.h" static void grn_prefs_alloc(void) { } static void grn_prefs_free(void) { gint i; GSList *l; str_free(&(grn_prefs.nntp_server)); str_free(&(grn_prefs.nntp_login)); str_free(&(grn_prefs.nntp_passwd)); str_free(&(grn_prefs.smtp_server)); str_free(&(grn_prefs.re_quoting)); str_free(&(grn_prefs.name)); str_free(&(grn_prefs.email)); str_free(&(grn_prefs.replyto)); str_free(&(grn_prefs.org)); str_free(&(grn_prefs.ua)); for (i=0; inext) g_free(l->data); for (l=grn_prefs.colorpal; l; l=l->next) g_free(l->data); g_slist_free(grn_prefs.fontpal); grn_prefs.fontpal = NULL; g_slist_free(grn_prefs.colorpal); grn_prefs.colorpal = NULL; } #define FNT_BODY_P "-*-helvetica-medium-r-normal--12-*" #define FNT_BODY_M "-*-fixed-medium-r-normal-*-*-140-*" static void fill_fonts() { grn_prefs.fonts[0] = g_strdup(FNT_BODY_P); grn_prefs.fonts[1] = g_strdup(FNT_BODY_M); grn_prefs.fonts[2] = g_strdup(FNT_BODY_P); grn_prefs.fonts[3] = g_strdup(FNT_BODY_P); grn_prefs.fonts[4] = g_strdup(FNT_BODY_P); } gchar *prefs_fg_colors_ids[NCOLORS] = { "/GRN/Fg_Colors/article_body", "/GRN/Fg_Colors/quoted_text", "/GRN/Fg_Colors/signature" }; gchar *prefs_bg_colors_ids[NCOLORS] = { "/GRN/Bg_Colors/article_body", "/GRN/Bg_Colors/quoted_text", "/GRN/Bg_Colors/signature" }; static void fill_def_fg_colors(GdkColor *colors) { colors[0].red = 0; colors[0].green = 0; colors[0].blue = 0; colors[1].red = 0xffff; colors[1].green = 0; colors[1].blue = 0xffff; colors[2].red = 0; colors[2].green = 0; colors[2].blue = 0xffff; } static void fill_def_bg_colors(GdkColor *colors) { colors[0].red = 0xffff; colors[0].green = 0xffff; colors[0].blue = 0xffff; colors[1].red = 0; colors[1].green = 0; colors[1].blue = 0; colors[2].red = 0; colors[2].green = 0; colors[2].blue = 0; } void grn_prefs_init(void) { gint i; struct passwd *pwd; gchar *buf, *p; grn_prefs_alloc(); grn_prefs.srv_autoconnect = FALSE; grn_prefs.nntp_auth = FALSE; grn_prefs.groups_desc = TRUE; grn_prefs.scripts_autoload = TRUE; grn_prefs.tl_show_read = FALSE; grn_prefs.tl_ac = TRUE; grn_prefs.mw_prop = TRUE; grn_prefs.tooltips = TRUE; grn_prefs.smooth_scrolling = FALSE; for (i=0; ipw_gecos); p = strchr(buf, ','); if (p) *p = 0; grn_prefs.name = g_strdup(buf); str_free(&buf); grn_prefs.nntp_server = g_strdup("news"); grn_prefs.nntp_login = NULL; grn_prefs.nntp_passwd = NULL; grn_prefs.smtp_server = g_strdup("mail"); grn_prefs.email = g_strdup_printf("%s@%s", g_get_user_name(), get_fqdn(NULL)); grn_prefs.replyto = g_strdup(""); grn_prefs.org = g_strdup(_("@un_n (change this!)")); grn_prefs.ua = g_strdup(_("@longpid v.@ver [@uname]")); grn_prefs.re_quoting = g_strdup("^ *[A-Za-z_@.]*[>|]+"); grn_prefs.paths[0] = g_strdup("~/.newsrc"); grn_prefs.paths[1] = g_strdup("~/.oldnewsrc"); fill_fonts(); for (i=0; idata)); gf->data = gnome_config_get_string(GRN_SRCH_DATA); str_free(&(gf->hdr)); gf->hdr = gnome_config_get_string(GRN_SRCH_HDR_DATA"=X-Comment-To"); gf->search_from = gnome_config_get_bool(GRN_SRCH_FROM"=false"); gf->search_subj = gnome_config_get_bool(GRN_SRCH_SUBJ"=true"); gf->search_body = gnome_config_get_bool(GRN_SRCH_BODY"=false"); gf->search_hdr = gnome_config_get_bool(GRN_SRCH_HDR"=false"); gf->is_regex = gnome_config_get_bool(GRN_SRCH_REGEX"=false"); gf->sensitive = gnome_config_get_bool(GRN_SRCH_SENS"=false"); gf->unread_only = gnome_config_get_bool(GRN_SRCH_UNREAD"=true"); } void grn_prefs_load(void) { gint flag, i, n; GdkColor def_fg_colors[NCOLORS], def_bg_colors[NCOLORS]; gchar *buf; grn_prefs.srv_autoconnect = gnome_config_get_bool(GRN_PREFS_AUTOCONNECT"=false"); grn_prefs.nntp_auth = gnome_config_get_bool(GRN_PREFS_NNTP_AUTH"=false"); grn_prefs.groups_desc = gnome_config_get_bool(GRN_PREFS_GROUPS_DESC"=true"); grn_prefs.scripts_autoload = gnome_config_get_bool(GRN_PREFS_SCR_AUTOLOAD"=true"); grn_prefs.tl_show_read = gnome_config_get_bool(GRN_PREFS_TL_SHOW_READ"=false"); grn_prefs.tl_ac = gnome_config_get_bool(GRN_PREFS_TL_AC"=true"); grn_prefs.mw_prop = gnome_config_get_bool(GRN_PREFS_MW_PROP"=true"); grn_prefs.tooltips = gnome_config_get_bool(GRN_PREFS_TOOLTIPS"=true"); grn_prefs.smooth_scrolling = gnome_config_get_bool(GRN_PREFS_SSCROLL"=false"); grn_prefs.srt_ng_subscr = gnome_config_get_int(GRN_PREFS_SRT_NG_SUBSCR"=0"); grn_prefs.srt_ng_col = gnome_config_get_int(GRN_PREFS_SRT_NG_COL"=3"); grn_prefs.thrd_tl_type = gnome_config_get_int(GRN_PREFS_THRD_TL_TYPE"=0"); grn_prefs.srt_tl_col = gnome_config_get_int(GRN_PREFS_SRT_TL_COL"=6"); grn_prefs.toolbar_style = gnome_config_get_int_with_default(GRN_PREFS_TBSTYLE, &flag); if (flag) grn_prefs.toolbar_style = -1; str_free(&(grn_prefs.nntp_server)); grn_prefs.nntp_server = gnome_config_get_string(GRN_PREFS_NNTPSERV"=news"); str_free(&(grn_prefs.nntp_login)); grn_prefs.nntp_login = gnome_config_get_string(GRN_PREFS_NNTP_LOGIN"=login"); str_free(&(grn_prefs.nntp_passwd)); grn_prefs.nntp_passwd = gnome_config_get_string(GRN_PREFS_NNTP_PWD"=password"); str_free(&(grn_prefs.smtp_server)); grn_prefs.smtp_server = gnome_config_get_string(GRN_PREFS_SMTPSERV"=mail"); buf = gnome_config_get_string_with_default(GRN_PREFS_NAME, &flag); if (! flag) { str_free(&(grn_prefs.name)); grn_prefs.name = buf; } else str_free(&buf); buf = gnome_config_get_string_with_default(GRN_PREFS_EMAIL, &flag); if (! flag) { str_free(&(grn_prefs.email)); grn_prefs.email = buf; } else str_free(&buf); str_free(&(grn_prefs.replyto)); grn_prefs.replyto = gnome_config_get_string(GRN_PREFS_REPLYTO"="); buf = gnome_config_get_string_with_default(GRN_PREFS_ORG, &flag); if (! flag) { str_free(&(grn_prefs.org)); grn_prefs.org = buf; } else str_free(&buf); buf = gnome_config_get_string_with_default(GRN_PREFS_UA, &flag); if (! flag) { str_free(&(grn_prefs.ua)); grn_prefs.ua = buf; } else str_free(&buf); str_free(&(grn_prefs.re_quoting)); grn_prefs.re_quoting = gnome_config_get_string(GRN_PREFS_QUOTING"=^ *[A-Za-z_@.]*[>|]+.+"); for (i=0; ired = gnome_config_get_int(buf); str_free(&buf); buf = g_strdup_printf("%s%d_g=", GRN_PREFS_COLOR_PAL, i); clr->green = gnome_config_get_int(buf); str_free(&buf); buf = g_strdup_printf("%s%d_b=", GRN_PREFS_COLOR_PAL, i); clr->blue = gnome_config_get_int(buf); str_free(&buf); grn_prefs.colorpal = g_slist_prepend(grn_prefs.colorpal, clr); } grn_prefs.colorpal = g_slist_reverse(grn_prefs.colorpal); for (i=0; idata); gnome_config_set_string(GRN_SRCH_HDR_DATA, gf->hdr); gnome_config_set_bool(GRN_SRCH_FROM, gf->search_from); gnome_config_set_bool(GRN_SRCH_SUBJ, gf->search_subj); gnome_config_set_bool(GRN_SRCH_BODY, gf->search_body); gnome_config_set_bool(GRN_SRCH_HDR, gf->search_hdr); gnome_config_set_bool(GRN_SRCH_REGEX, gf->is_regex); gnome_config_set_bool(GRN_SRCH_SENS, gf->sensitive); gnome_config_set_bool(GRN_SRCH_UNREAD, gf->unread_only); gnome_config_sync(); } void grn_prefs_save(void) { gint i, n; GSList *l; gnome_config_set_bool(GRN_PREFS_AUTOCONNECT, grn_prefs.srv_autoconnect); gnome_config_set_bool(GRN_PREFS_NNTP_AUTH, grn_prefs.nntp_auth); gnome_config_set_bool(GRN_PREFS_GROUPS_DESC, grn_prefs.groups_desc); gnome_config_set_bool(GRN_PREFS_SCR_AUTOLOAD, grn_prefs.scripts_autoload); gnome_config_set_bool(GRN_PREFS_TL_SHOW_READ, grn_prefs.tl_show_read); gnome_config_set_bool(GRN_PREFS_TL_AC, grn_prefs.tl_ac); gnome_config_set_bool(GRN_PREFS_MW_PROP, grn_prefs.mw_prop); gnome_config_set_bool(GRN_PREFS_TOOLTIPS, grn_prefs.tooltips); gnome_config_set_bool(GRN_PREFS_SSCROLL, grn_prefs.smooth_scrolling); gnome_config_set_int(GRN_PREFS_TBSTYLE, grn_prefs.toolbar_style); gnome_config_set_int(GRN_PREFS_SRT_NG_SUBSCR, grn_prefs.srt_ng_subscr); gnome_config_set_int(GRN_PREFS_SRT_NG_COL, grn_prefs.srt_ng_col); gnome_config_set_int(GRN_PREFS_THRD_TL_TYPE, grn_prefs.thrd_tl_type); gnome_config_set_int(GRN_PREFS_SRT_TL_COL, grn_prefs.srt_tl_col); gnome_config_set_string(GRN_PREFS_NNTPSERV, grn_prefs.nntp_server); gnome_config_set_string(GRN_PREFS_NNTP_LOGIN, grn_prefs.nntp_login); gnome_config_set_string(GRN_PREFS_NNTP_PWD, grn_prefs.nntp_passwd); gnome_config_set_string(GRN_PREFS_SMTPSERV, grn_prefs.smtp_server); gnome_config_set_string(GRN_PREFS_NAME, grn_prefs.name); gnome_config_set_string(GRN_PREFS_EMAIL, grn_prefs.email); gnome_config_set_string(GRN_PREFS_REPLYTO, grn_prefs.replyto); gnome_config_set_string(GRN_PREFS_ORG, grn_prefs.org); gnome_config_set_string(GRN_PREFS_UA, grn_prefs.ua); gnome_config_set_string(GRN_PREFS_QUOTING, grn_prefs.re_quoting); gnome_config_set_string(GRN_PREFS_FNT_BODY_P, grn_prefs.fonts[0]); gnome_config_set_string(GRN_PREFS_FNT_BODY_M, grn_prefs.fonts[1]); gnome_config_set_string(GRN_PREFS_FNT_HDRS, grn_prefs.fonts[2]); gnome_config_set_string(GRN_PREFS_FNT_THRDLIST, grn_prefs.fonts[3]); gnome_config_set_string(GRN_PREFS_FNT_NGLIST, grn_prefs.fonts[4]); for (i=0; i 0) { gnome_config_set_int(GRN_PREFS_FONT_N_PAL, n); l = grn_prefs.fontpal; i = 0; while (l && (i < n)) { gchar *buf = g_strdup_printf("%s%d", GRN_PREFS_FONT_PAL, i); gnome_config_set_string(buf, l->data); str_free(&buf); l = l->next; i++; } } n = g_slist_length(grn_prefs.colorpal); if (n > 0) { gnome_config_set_int(GRN_PREFS_COLOR_N_PAL, n); l = grn_prefs.colorpal; i = 0; while (l && (i < n)) { gchar *buf; GdkColor *clr = (GdkColor *) l->data; buf = g_strdup_printf("%s%d_r", GRN_PREFS_COLOR_PAL, i); gnome_config_set_int(buf, clr->red); str_free(&buf); buf = g_strdup_printf("%s%d_g", GRN_PREFS_COLOR_PAL, i); gnome_config_set_int(buf, clr->green); str_free(&buf); buf = g_strdup_printf("%s%d_b", GRN_PREFS_COLOR_PAL, i); gnome_config_set_int(buf, clr->blue); str_free(&buf); l = l->next; i++; } } for (i=0; iwindow), GNOME_APP_TOOLBAR_NAME); if (item) { toolbar = gnome_dock_item_get_child(item); if (toolbar) gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), grn_get_toolbar_style()); } if (GRN->tooltips) { if (grn_prefs.tooltips) gtk_tooltips_enable(GRN->tooltips); else gtk_tooltips_disable(GRN->tooltips); } if (GRN->msgwin) { GtkWidget *text = gtk_object_get_data(GTK_OBJECT(GRN->msgwin), KEY_TXT_BODY); GtkWidget *w; gchar *fnt_name; if (grn_prefs.mw_prop) fnt_name = grn_prefs.fonts[0]; else fnt_name = grn_prefs.fonts[1]; if (text) grn_widget_set_style(text, fnt_name, NULL, &(grn_prefs.bg_colors[0]), grn_prefs.pixmaps[0]); w = gtk_object_get_data(GTK_OBJECT(GRN->msgwin), KEY_MW_FROM); if (w) grn_widget_set_style(w, grn_prefs.fonts[2], NULL, NULL, NULL); w = gtk_object_get_data(GTK_OBJECT(GRN->msgwin), KEY_MW_TO); if (w) grn_widget_set_style(w, grn_prefs.fonts[2], NULL, NULL, NULL); w = gtk_object_get_data(GTK_OBJECT(GRN->msgwin), KEY_MW_DATE); if (w) grn_widget_set_style(w, grn_prefs.fonts[2], NULL, NULL, NULL); w = gtk_object_get_data(GTK_OBJECT(GRN->msgwin), KEY_MW_SUBJ); if (w) grn_widget_set_style(w, grn_prefs.fonts[2], NULL, NULL, NULL); } if (GRN->threadlist) { GtkWidget *ctree = gtk_object_get_data(GTK_OBJECT(GRN->threadlist), KEY_CT_MSGS); if (ctree) grn_widget_set_style(ctree, grn_prefs.fonts[3], NULL, NULL, NULL); } if (GRN->grouplist) { GtkWidget *clist = gtk_object_get_data(GTK_OBJECT(GRN->grouplist), KEY_CL_GROUPS); if (clist) grn_widget_set_style(clist, grn_prefs.fonts[4], NULL, NULL, NULL); } } gint grn_get_toolbar_style(void) { if (grn_prefs.toolbar_style > (-1)) return grn_prefs.toolbar_style; if (gnome_preferences_get_toolbar_labels()) return GTK_TOOLBAR_BOTH; else return GTK_TOOLBAR_ICONS; }