aboutsummaryrefslogtreecommitdiffstats
path: root/mail/mail-config.c
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@redhat.com>2008-04-05 23:26:26 +0800
committerMatthew Barnes <mbarnes@src.gnome.org>2008-04-05 23:26:26 +0800
commit52ba74cef488e616e07b2ae8f5e93df8a9e31081 (patch)
tree629dd2edcd1f27ccb9b6661e4a95a85ea0656413 /mail/mail-config.c
parent20fca64c5a4d78d11a61b5689d97cf164caea08f (diff)
downloadgsoc2013-evolution-52ba74cef488e616e07b2ae8f5e93df8a9e31081.tar
gsoc2013-evolution-52ba74cef488e616e07b2ae8f5e93df8a9e31081.tar.gz
gsoc2013-evolution-52ba74cef488e616e07b2ae8f5e93df8a9e31081.tar.bz2
gsoc2013-evolution-52ba74cef488e616e07b2ae8f5e93df8a9e31081.tar.lz
gsoc2013-evolution-52ba74cef488e616e07b2ae8f5e93df8a9e31081.tar.xz
gsoc2013-evolution-52ba74cef488e616e07b2ae8f5e93df8a9e31081.tar.zst
gsoc2013-evolution-52ba74cef488e616e07b2ae8f5e93df8a9e31081.zip
** Fixes part of bug #526152, plus some tangential code cleanup.
2008-04-05 Matthew Barnes <mbarnes@redhat.com> ** Fixes part of bug #526152, plus some tangential code cleanup. * mail/Makefile.am: Remove all the IDL crud for GnomeSpell. * mail/em-composer-prefs.c: * mail/evolution-mail.schemas.in: * mail/mail-config.c: Define our own GConf keys for active spell checking languages and the underline color for misspelled words, instead of relying on GnomeSpell's GConf keys. The new keys are: /apps/evolution/mail/composer/spell_color (string) /apps/evolution/mail/composer/spell_languages (list of strings) * mail/em-composer-prefs.c: * mail/em-composer-prefs.h: Cleanup the logic a bit to improve readability. * mail/mail-config.c: Cleanup the GConf notification logic: - We don't need the notification IDs for GConf keys we're watching. - Minimize the repetition of GConf keys to reduce the risk of typos. - Reduce the number of notification callback functions. * mail/Spell.idl: Remove this file; we don't use GnomeSpell anymore. * composer/e-msg-composer.c: * composer/e-composer-private.h: Initialize a new composer's spell checking language menu via our new "spell_languages" GConf key. * tools/killev.c (main): No need to continue killing the GnomeSpell Bonobo server. svn path=/trunk/; revision=35322
Diffstat (limited to 'mail/mail-config.c')
-rw-r--r--mail/mail-config.c346
1 files changed, 196 insertions, 150 deletions
diff --git a/mail/mail-config.c b/mail/mail-config.c
index a00e00e2d8..09c4cd662c 100644
--- a/mail/mail-config.c
+++ b/mail/mail-config.c
@@ -88,36 +88,20 @@ typedef struct {
ESignatureList *signatures;
GSList *labels;
- guint label_notify_id;
-
- guint font_notify_id;
- guint spell_notify_id;
- guint mark_citations__notify_id;
- guint citation_colour_notify_id;
- guint address_count_notify_id;
- guint address_compress_notify_id;
+
gboolean address_compress;
gint address_count;
- guint mlimit_size_notify_id;
- guint mlimit_notify_id;
gboolean mlimit;
gint mlimit_size;
- guint magic_spacebar_notify_id;
gboolean magic_spacebar;
guint error_time;
- guint error_notify_id;
guint error_level;
- guint error_level_id;
GPtrArray *mime_types;
- guint mime_types_notify_id;
GSList *jh_header;
gboolean jh_check;
- guint jh_header_id;
- guint jh_check_id;
gboolean book_lookup;
- guint book_lookup_id;
} MailConfig;
static MailConfig *config = NULL;
@@ -163,20 +147,16 @@ config_cache_mime_types (void)
g_ptr_array_add (config->mime_types, NULL);
}
-#define CONFIG_GET_SPELL_VALUE(t,x,prop,f,c) G_STMT_START { \
- val = gconf_client_get_without_default (config->gconf, "/GNOME/Spell" x, NULL); \
- if (val) { f; prop = c (gconf_value_get_ ## t (val)); \
- gconf_value_free (val); } } G_STMT_END
-
static void
config_write_style (void)
{
- int red = 0xffff, green = 0, blue = 0;
- GConfValue *val;
+ GConfClient *client;
gboolean custom;
- char *fix_font;
- char *var_font;
- char *citation_color;
+ gchar *fix_font;
+ gchar *var_font;
+ gchar *citation_color;
+ gchar *spell_color;
+ const gchar *key;
FILE *rc;
if (!(rc = g_fopen (config->gtkrc, "wt"))) {
@@ -184,17 +164,26 @@ config_write_style (void)
return;
}
- custom = gconf_client_get_bool (config->gconf, "/apps/evolution/mail/display/fonts/use_custom", NULL);
- var_font = gconf_client_get_string (config->gconf, "/apps/evolution/mail/display/fonts/variable", NULL);
- fix_font = gconf_client_get_string (config->gconf, "/apps/evolution/mail/display/fonts/monospace", NULL);
- citation_color = gconf_client_get_string (config->gconf, "/apps/evolution/mail/display/citation_colour", NULL);
- CONFIG_GET_SPELL_VALUE (int, "/spell_error_color_red", red, (void)0, (int));
- CONFIG_GET_SPELL_VALUE (int, "/spell_error_color_green", green, (void)0, (int));
- CONFIG_GET_SPELL_VALUE (int, "/spell_error_color_blue", blue, (void)0, (int));
+ client = config->gconf;
+
+ key = "/apps/evolution/mail/display/fonts/use_custom";
+ custom = gconf_client_get_bool (client, key, NULL);
+
+ key = "/apps/evolution/mail/display/fonts/variable";
+ var_font = gconf_client_get_string (client, key, NULL);
+
+ key = "/apps/evolution/mail/display/fonts/monospace";
+ fix_font = gconf_client_get_string (client, key, NULL);
+
+ key = "/apps/evolution/mail/display/citation_colour";
+ citation_color = gconf_client_get_string (client, key, NULL);
+
+ key = "/apps/evolution/mail/composer/spell_color";
+ spell_color = gconf_client_get_string (client, key, NULL);
fprintf (rc, "style \"evolution-mail-custom-fonts\" {\n");
- fprintf (rc, " GtkHTML::spell_error_color = \"#%02x%02x%02x\"\n",
- 0xff & (red >> 8), 0xff & (green >> 8), 0xff & (blue >> 8));
+ fprintf (rc, " GtkHTML::spell_error_color = \"%s\"\n", spell_color);
+ g_free (spell_color);
if (gconf_client_get_bool (config->gconf, "/apps/evolution/mail/display/mark_citations", NULL))
fprintf (rc, " GtkHTML::cite_color = \"%s\"\n",
@@ -284,15 +273,8 @@ gconf_jh_check_changed (GConfClient *client, guint cnxn_id,
}
static void
-gconf_lookup_book_changed (GConfClient *client, guint cnxn_id,
- GConfEntry *entry, gpointer data)
-{
- config->book_lookup = gconf_client_get_bool (config->gconf, "/apps/evolution/mail/junk/lookup_addressbook", NULL);
-}
-
-static void
gconf_jh_headers_changed (GConfClient *client, guint cnxn_id,
- GConfEntry *entry, gpointer user_data)
+ GConfEntry *entry, gpointer user_data)
{
config->jh_header = gconf_client_get_list (config->gconf, "/apps/evolution/mail/junk/custom_header", GCONF_VALUE_STRING, NULL);
GSList *node = config->jh_header;
@@ -309,59 +291,39 @@ gconf_jh_headers_changed (GConfClient *client, guint cnxn_id,
mail_session_set_junk_headers ((const char **)name->pdata, (const char **)value->pdata, name->len);
}
-
-static void
-gconf_address_count_changed (GConfClient *client, guint cnxn_id,
- GConfEntry *entry, gpointer user_data)
-{
- config->address_count = gconf_client_get_int (config->gconf, "/apps/evolution/mail/display/address_count", NULL);
-}
-
-static void
-gconf_error_time_changed (GConfClient *client, guint cnxn_id,
- GConfEntry *entry, gpointer user_data)
-{
- config->error_time = gconf_client_get_int (config->gconf, "/apps/evolution/mail/display/error_timeout", NULL);
-}
-
-static void
-gconf_error_level_changed (GConfClient *client, guint cnxn_id,
- GConfEntry *entry, gpointer user_data)
-{
- config->error_level = gconf_client_get_int (config->gconf, "/apps/evolution/mail/display/error_level", NULL);
-}
-
static void
-gconf_address_compress_changed (GConfClient *client, guint cnxn_id,
- GConfEntry *entry, gpointer user_data)
+gconf_bool_value_changed (GConfClient *client,
+ guint cnxn_id,
+ GConfEntry *entry,
+ gboolean *save_location)
{
- config->address_compress = gconf_client_get_bool (config->gconf, "/apps/evolution/mail/display/address_compress", NULL);
-}
+ GError *error = NULL;
-static void
-gconf_mlimit_size_changed (GConfClient *client, guint cnxn_id,
- GConfEntry *entry, gpointer user_data)
-{
- config->mlimit_size = gconf_client_get_int (config->gconf, "/apps/evolution/mail/display/message_text_part_limit", NULL);
+ *save_location = gconf_client_get_bool (client, entry->key, &error);
+ if (error != NULL) {
+ g_warning ("%s", error->message);
+ g_error_free (error);
+ }
}
static void
-gconf_mlimit_changed (GConfClient *client, guint cnxn_id,
- GConfEntry *entry, gpointer user_data)
+gconf_int_value_changed (GConfClient *client,
+ guint cnxn_id,
+ GConfEntry *entry,
+ gint *save_location)
{
- config->mlimit = gconf_client_get_bool (config->gconf, "/apps/evolution/mail/display/force_message_limit", NULL);
-}
+ GError *error = NULL;
-static void
-gconf_magic_spacebar_changed (GConfClient *client, guint cnxn_id,
- GConfEntry *entry, gpointer user_data)
-{
- config->magic_spacebar = gconf_client_get_bool (config->gconf, "/apps/evolution/mail/display/magic_spacebar", NULL);
+ *save_location = gconf_client_get_int (client, entry->key, &error);
+ if (error != NULL) {
+ g_warning ("%s", error->message);
+ g_error_free (error);
+ }
}
static void
gconf_mime_types_changed (GConfClient *client, guint cnxn_id,
- GConfEntry *entry, gpointer user_data)
+ GConfEntry *entry, gpointer user_data)
{
config_clear_mime_types ();
config_cache_mime_types ();
@@ -371,89 +333,173 @@ gconf_mime_types_changed (GConfClient *client, guint cnxn_id,
void
mail_config_init (void)
{
+ GConfClientNotifyFunc func;
+ const gchar *key;
+
if (config)
return;
config = g_new0 (MailConfig, 1);
config->gconf = gconf_client_get_default ();
config->mime_types = g_ptr_array_new ();
- config->gtkrc = g_build_filename (e_get_user_data_dir (), "mail", "config", "gtkrc-mail-fonts", NULL);
+ config->gtkrc = g_build_filename (
+ e_get_user_data_dir (), "mail",
+ "config", "gtkrc-mail-fonts", NULL);
mail_config_clear ();
+ config->accounts = e_account_list_new (config->gconf);
+ config->signatures = e_signature_list_new (config->gconf);
+
gtk_rc_parse (config->gtkrc);
- gconf_client_add_dir (config->gconf, "/apps/evolution/mail/display",
- GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
- gconf_client_add_dir (config->gconf, "/apps/evolution/mail/display/fonts",
- GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
- gconf_client_add_dir (config->gconf, "/GNOME/Spell",
- GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
- gconf_client_add_dir (config->gconf, "/apps/evolution/mail/junk",
- GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
-
- config->font_notify_id = gconf_client_notify_add (config->gconf, "/apps/evolution/mail/display/fonts",
- gconf_style_changed, NULL, NULL, NULL);
- config->font_notify_id = gconf_client_notify_add (config->gconf, "/apps/evolution/mail/display/address_compress",
- gconf_address_compress_changed, NULL, NULL, NULL);
- config->font_notify_id = gconf_client_notify_add (config->gconf, "/apps/evolution/mail/display/address_count",
- gconf_address_count_changed, NULL, NULL, NULL);
- config->error_notify_id = gconf_client_notify_add (config->gconf, "/apps/evolution/mail/display/error_timeout",
- gconf_error_time_changed, NULL, NULL, NULL);
- config->error_level_id = gconf_client_notify_add (config->gconf, "/apps/evolution/mail/display/error_level",
- gconf_error_level_changed, NULL, NULL, NULL);
-
- config->mlimit_notify_id = gconf_client_notify_add (config->gconf, "/apps/evolution/mail/display/force_message_limit",
- gconf_mlimit_changed, NULL, NULL, NULL);
- config->mlimit_size_notify_id = gconf_client_notify_add (config->gconf, "/apps/evolution/mail/display/message_text_part_limit",
- gconf_mlimit_size_changed, NULL, NULL, NULL);
- config->magic_spacebar_notify_id = gconf_client_notify_add (config->gconf, "/apps/evolution/mail/display/magic_spacebar",
- gconf_magic_spacebar_changed, NULL, NULL, NULL);
- config->spell_notify_id = gconf_client_notify_add (config->gconf, "/GNOME/Spell",
- gconf_style_changed, NULL, NULL, NULL);
- config->mark_citations__notify_id = gconf_client_notify_add (config->gconf, "/apps/evolution/mail/display/mark_citations",
- gconf_style_changed, NULL, NULL, NULL);
- config->citation_colour_notify_id = gconf_client_notify_add (config->gconf, "/apps/evolution/mail/display/citation_colour",
- gconf_style_changed, NULL, NULL, NULL);
-
- gconf_client_add_dir (config->gconf, E_UTIL_LABELS_GCONF_KEY,
- GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
- config->label_notify_id =
- gconf_client_notify_add (config->gconf, E_UTIL_LABELS_GCONF_KEY,
- gconf_labels_changed, NULL, NULL, NULL);
-
- gconf_client_add_dir (config->gconf, "/apps/evolution/mail/mime_types",
- GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
- config->mime_types_notify_id =
- gconf_client_notify_add (config->gconf, "/apps/evolution/mail/mime_types",
- gconf_mime_types_changed, NULL, NULL, NULL);
+ /* Composer Configuration */
+
+ gconf_client_add_dir (
+ config->gconf, "/apps/evolution/mail/composer",
+ GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
+
+ key = "/apps/evolution/mail/composer/spell_color";
+ func = (GConfClientNotifyFunc) gconf_style_changed;
+ gconf_client_notify_add (
+ config->gconf, key, func, NULL, NULL, NULL);
+
+ /* Display Configuration */
+
+ gconf_client_add_dir (
+ config->gconf, "/apps/evolution/mail/display",
+ GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
+
+ key = "/apps/evolution/mail/display/address_compress";
+ func = (GConfClientNotifyFunc) gconf_bool_value_changed;
+ gconf_client_notify_add (
+ config->gconf, key, func,
+ &config->address_compress, NULL, NULL);
+ config->address_compress =
+ gconf_client_get_bool (config->gconf, key, NULL);
+
+ key = "/apps/evolution/mail/display/address_count";
+ func = (GConfClientNotifyFunc) gconf_int_value_changed;
+ gconf_client_notify_add (
+ config->gconf, key, func,
+ &config->address_count, NULL, NULL);
+ config->address_count =
+ gconf_client_get_int (config->gconf, key, NULL);
+
+ key = "/apps/evolution/mail/display/citation_colour";
+ func = (GConfClientNotifyFunc) gconf_style_changed;
+ gconf_client_notify_add (
+ config->gconf, key, func, NULL, NULL, NULL);
+
+ key = "/apps/evolution/mail/display/error_timeout";
+ func = (GConfClientNotifyFunc) gconf_int_value_changed;
+ gconf_client_notify_add (
+ config->gconf, key, func,
+ &config->error_time, NULL, NULL);
+ config->error_time =
+ gconf_client_get_int (config->gconf, key, NULL);
+
+ key = "/apps/evolution/mail/display/error_level";
+ func = (GConfClientNotifyFunc) gconf_int_value_changed;
+ gconf_client_notify_add (
+ config->gconf, key, func,
+ &config->error_level, NULL, NULL);
+ config->error_level =
+ gconf_client_get_int (config->gconf, key, NULL);
+
+ key = "/apps/evolution/mail/display/force_message_limit";
+ func = (GConfClientNotifyFunc) gconf_bool_value_changed;
+ gconf_client_notify_add (
+ config->gconf, key, func,
+ &config->mlimit, NULL, NULL);
+ config->mlimit =
+ gconf_client_get_bool (config->gconf, key, NULL);
+
+ key = "/apps/evolution/mail/display/message_text_part_limit";
+ func = (GConfClientNotifyFunc) gconf_int_value_changed;
+ gconf_client_notify_add (
+ config->gconf, key, func,
+ &config->mlimit_size, NULL, NULL);
+ config->mlimit_size =
+ gconf_client_get_int (config->gconf, key, NULL);
+
+ key = "/apps/evolution/mail/display/magic_spacebar";
+ func = (GConfClientNotifyFunc) gconf_bool_value_changed;
+ gconf_client_notify_add (
+ config->gconf, key, func,
+ &config->magic_spacebar, NULL, NULL);
+ config->magic_spacebar =
+ gconf_client_get_bool (config->gconf, key, NULL);
+
+ key = "/apps/evolution/mail/display/mark_citations";
+ func = (GConfClientNotifyFunc) gconf_style_changed;
+ gconf_client_notify_add (
+ config->gconf, key, func, NULL, NULL, NULL);
+
+ /* Font Configuration */
+
+ gconf_client_add_dir (
+ config->gconf, "/apps/evolution/mail/display/fonts",
+ GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
+
+ key = "/apps/evolution/mail/display/fonts";
+ func = (GConfClientNotifyFunc) gconf_style_changed;
+ gconf_client_notify_add (
+ config->gconf, key, func, NULL, NULL, NULL);
+
+ /* Label Configuration */
+
+ gconf_client_add_dir (
+ config->gconf, E_UTIL_LABELS_GCONF_KEY,
+ GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
+
+ gconf_client_notify_add (
+ config->gconf, E_UTIL_LABELS_GCONF_KEY,
+ gconf_labels_changed, NULL, NULL, NULL);
config_cache_labels (config->gconf);
+
+ /* MIME Type Configuration */
+
+ gconf_client_add_dir (
+ config->gconf, "/apps/evolution/mail/mime_types",
+ GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
+
+ key = "/apps/evolution/mail/mime_types";
+ func = (GConfClientNotifyFunc) gconf_mime_types_changed,
+ gconf_client_notify_add (
+ config->gconf, key, func, NULL, NULL, NULL);
+
config_cache_mime_types ();
- config->address_compress = gconf_client_get_bool (config->gconf, "/apps/evolution/mail/display/address_compress", NULL);
- config->address_count = gconf_client_get_int (config->gconf, "/apps/evolution/mail/display/address_count", NULL);
- config->error_time = gconf_client_get_int (config->gconf, "/apps/evolution/mail/display/error_timeout", NULL);
- config->error_level= gconf_client_get_int (config->gconf, "/apps/evolution/mail/display/error_level", NULL);
-
- config->mlimit = gconf_client_get_bool (config->gconf, "/apps/evolution/mail/display/force_message_limit", NULL);
- config->mlimit_size = gconf_client_get_int (config->gconf, "/apps/evolution/mail/display/message_text_part_limit", NULL);
- config->magic_spacebar = gconf_client_get_bool (config->gconf, "/apps/evolution/mail/display/magic_spacebar", NULL);
- config->accounts = e_account_list_new (config->gconf);
- config->signatures = e_signature_list_new (config->gconf);
- config->jh_check = gconf_client_get_bool (config->gconf, "/apps/evolution/mail/junk/check_custom_header", NULL);
- config->jh_check_id = gconf_client_notify_add (config->gconf, "/apps/evolution/mail/junk/check_custom_header",
- gconf_jh_check_changed, NULL, NULL, NULL);
- config->jh_header_id = gconf_client_notify_add (config->gconf, "/apps/evolution/mail/junk/custom_header",
- gconf_jh_headers_changed, NULL, NULL, NULL);
- config->book_lookup = gconf_client_get_bool (config->gconf, "/apps/evolution/mail/junk/lookup_addressbook", NULL);
- config->book_lookup_id = gconf_client_notify_add (config->gconf, "/apps/evolution/mail/junk/lookup_addressbook",
- gconf_lookup_book_changed, NULL, NULL, NULL);
+ /* Junk Configuration */
- gconf_jh_check_changed (config->gconf, 0, NULL, config);
+ gconf_client_add_dir (
+ config->gconf, "/apps/evolution/mail/junk",
+ GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
-}
+ key = "/apps/evolution/mail/junk/check_custom_header";
+ func = (GConfClientNotifyFunc) gconf_jh_check_changed;
+ gconf_client_notify_add (
+ config->gconf, key, func, NULL, NULL, NULL);
+ config->jh_check =
+ gconf_client_get_bool (config->gconf, key, NULL);
+
+ key = "/apps/evolution/mail/junk/custom_header";
+ func = (GConfClientNotifyFunc) gconf_jh_headers_changed;
+ gconf_client_notify_add (
+ config->gconf, key, func, NULL, NULL, NULL);
+ key = "/apps/evolution/mail/junk/lookup_addressbook";
+ func = (GConfClientNotifyFunc) gconf_bool_value_changed;
+ gconf_client_notify_add (
+ config->gconf, key, func,
+ &config->book_lookup, NULL, NULL);
+ config->book_lookup =
+ gconf_client_get_bool (config->gconf, key, NULL);
+
+ gconf_jh_check_changed (config->gconf, 0, NULL, config);
+}
void
mail_config_clear (void)