diff -ur sylpheed-2.2.0.orig/src/compose.c sylpheed-2.2.0/src/compose.c --- sylpheed-2.2.0.orig/src/compose.c 2006-02-07 11:53:05.000000000 +0900 +++ sylpheed-2.2.0/src/compose.c 2006-02-15 23:40:01.000000000 +0900 @@ -64,7 +64,7 @@ #if USE_GTKSPELL # include # include -# include +# include #endif #include @@ -459,6 +459,9 @@ GtkWidget *widget); static void compose_set_spell_lang_cb (GtkWidget *widget, gpointer data); +static void compose_list_dicts_cb (const char *lang_tag, + const char *provider_name, const char *provider_desc, + const char *provider_file, void *user_data); #endif static void compose_attach_drag_received_cb (GtkWidget *widget, @@ -4874,33 +4877,34 @@ } #if USE_GTKSPELL +static void compose_list_dicts_cb(const char *lang_tag, + const char *provider_name, const char *provider_desc, + const char *provider_file, void *user_data) +{ + GQueue *queue = (GQueue *)user_data; + + if (g_queue_index(queue, (gconstpointer)lang_tag) == -1) { + g_queue_push_tail(queue, g_strdup(lang_tag)); + } +} + static void compose_set_spell_lang_menu(Compose *compose) { - AspellConfig *config; - AspellDictInfoList *dlist; - AspellDictInfoEnumeration *dels; - const AspellDictInfo *entry; + EnchantBroker *broker; + GQueue *langs; GSList *dict_list = NULL, *menu_list = NULL, *cur; GtkWidget *menu; gboolean lang_set = FALSE; - config = new_aspell_config(); - dlist = get_aspell_dict_info_list(config); - delete_aspell_config(config); - - dels = aspell_dict_info_list_elements(dlist); - while ((entry = aspell_dict_info_enumeration_next(dels)) != 0) { - dict_list = g_slist_append(dict_list, (gchar *)entry->name); - if (compose->spell_lang != NULL && - g_ascii_strcasecmp(compose->spell_lang, entry->name) == 0) - lang_set = TRUE; - } - delete_aspell_dict_info_enumeration(dels); + broker = enchant_broker_init(); + langs = g_queue_new(); + enchant_broker_list_dicts(broker, compose_list_dicts_cb, langs); + enchant_broker_free(broker); menu = gtk_menu_new(); - for (cur = dict_list; cur != NULL; cur = cur->next) { - gchar *dict = (gchar *)cur->data; + while (g_queue_get_length(langs) > 0) { + gchar *dict = g_queue_pop_head(langs); GtkWidget *item; if (dict == NULL) continue; @@ -4910,13 +4914,16 @@ (GTK_RADIO_MENU_ITEM(item)); if (compose->spell_lang != NULL && g_ascii_strcasecmp(compose->spell_lang, dict) == 0) + { gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(item), TRUE); + lang_set = TRUE; + } gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(compose_set_spell_lang_cb), compose); - g_object_set_data(G_OBJECT(item), "spell-lang", dict); + g_object_set_data_full(G_OBJECT(item), "spell-lang", dict, g_free); gtk_widget_show(item); if (!lang_set && g_ascii_strcasecmp("en", dict) == 0) @@ -4924,6 +4931,8 @@ (GTK_CHECK_MENU_ITEM(item), TRUE); } + g_queue_free(langs); + gtk_widget_show(menu); gtk_menu_item_set_submenu(GTK_MENU_ITEM(compose->spell_menu), menu); }