Index: pan/gui/group-prefs-dialog.cc =================================================================== --- pan/gui/group-prefs-dialog.cc (revision 360) +++ pan/gui/group-prefs-dialog.cc (working copy) @@ -73,6 +73,10 @@ // save path... const char * pch (file_entry_get (_save_path)); _group_prefs.set_string (_group, "default-group-save-path", pch); + + // spellchecker language + pch = (const char*)gtk_entry_get_text(GTK_ENTRY(_spellchecker_language)); + _group_prefs.set_string (_group, "spellcheck-language", pch); } void @@ -118,8 +122,29 @@ return w; } + + GtkWidget* + create_spellcheck_combo_box ( const Quark & group, + const GroupPrefs & group_prefs) + { + /*TODO: + * get a list of all the available spellchecking languages ( + - This depends on GtkSpell or adding enchant as a dependency + * list them in a combo box + */ + + GtkWidget * e = gtk_entry_new (); + + // get the custom spell checking language from the group preferences + std::string lang; + lang = group_prefs.get_string(group, "spellcheck-language",""); + gtk_entry_set_text(GTK_ENTRY(e),lang.c_str()); + + return e; } +} + GroupPrefsDialog :: GroupPrefsDialog (Data & data, const Quark & group, GroupPrefs & group_prefs, @@ -144,20 +169,31 @@ g_snprintf (buf, sizeof(buf), _("Properties for %s"), group.c_str()); HIG::workarea_add_section_title (t, &row, buf); HIG :: workarea_add_section_spacer (t, row, 3); + + /* Character encoding widget */ _charset = e_charset_picker_new (_group_prefs.get_string (group, "character-encoding", "UTF-8").c_str()); w = gtk_option_menu_new (); gtk_option_menu_set_menu (GTK_OPTION_MENU (w), _charset); HIG :: workarea_add_row (t, &row, _("Character _encoding:"), w); + + /* Save path widget */ w = _save_path = file_entry_new (_("Directory for Saving Attachments")); char * pch = g_build_filename (g_get_home_dir(), "News", NULL); const std::string dir (_group_prefs.get_string (_group, "default-group-save-path", pch)); g_free (pch); file_entry_set (w, dir.c_str()); HIG :: workarea_add_row (t, &row, _("Directory for _saving attachments:"), w); + + /* profile widget */ w = _profile = create_profiles_combo_box (data, group, group_prefs); l = HIG :: workarea_add_row (t, &row, _("Posting _profile:"), w); gtk_widget_set_sensitive (l, GTK_WIDGET_SENSITIVE(w)); + /* spellchecker languages widget */ + w = _spellchecker_language = create_spellcheck_combo_box ( group, group_prefs); + l = HIG :: workarea_add_row (t, &row, _("Spellchecker _language:"), w); + gtk_widget_set_sensitive (l, GTK_WIDGET_SENSITIVE(w)); + gtk_widget_show_all (t); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), t, true, true, 0); _root = dialog; Index: pan/gui/post-ui.h =================================================================== --- pan/gui/post-ui.h (revision 360) +++ pan/gui/post-ui.h (working copy) @@ -112,6 +112,7 @@ std::string _unchanged_body; int _wrap_pixels; GtkTooltips * _ttips; + std::string _spellcheck_language; private: void add_actions (GtkWidget* box); Index: pan/gui/group-prefs-dialog.h =================================================================== --- pan/gui/group-prefs-dialog.h (revision 360) +++ pan/gui/group-prefs-dialog.h (working copy) @@ -44,6 +44,7 @@ GtkWidget * _root; GtkWidget * _charset; GtkWidget * _profile; + GtkWidget * _spellchecker_language; GtkWidget * _save_path; private: Index: pan/gui/post-ui.cc =================================================================== --- pan/gui/post-ui.cc (revision 360) +++ pan/gui/post-ui.cc (working copy) @@ -88,12 +88,33 @@ #ifdef HAVE_GTKSPELL GtkTextView * view = GTK_TEXT_VIEW(_body_view); GError * err (0); - const char * locale = NULL; - gtkspell_new_attach (view, locale, &err); + + // set the language + if(!_spellcheck_language.empty()) // some language was set + { + g_debug("custom spellchecker\n"); + gtkspell_new_attach (view, _spellcheck_language.c_str(), &err); // sets custom spell checker if (err) { + g_debug("custom spellchecker failed. defaulted to system locale.\n"); + Log::add_err_va (_("Error setting custom spellchecker: %s"), err->message); + g_clear_error (&err); + // custom spellchecker failed. defaults to env spellchecker + gtkspell_new_attach (view, NULL, &err); // tries default env language + if (err) { Log::add_err_va (_("Error setting spellchecker: %s"), err->message); g_clear_error (&err); } + } + } + else + { + g_debug("default spellchecker\n"); + gtkspell_new_attach (view, NULL, &err); // tries default env language + if (err) { + Log::add_err_va (_("Error setting spellchecker: %s"), err->message); + g_clear_error (&err); + } + } #else GtkWidget * w = gtk_message_dialog_new_with_markup ( GTK_WINDOW(_root), @@ -1874,6 +1895,21 @@ g_assert (profiles.has_profiles()); g_return_if_fail (message != 0); + // set the spellchecker language according to the first destination newsgroup's options + StringView line (g_mime_message_get_header (message, "Newsgroups")); + StringView groupname; + // get the first newsgroup + while (line.pop_token (groupname, ',')) { + groupname.trim (); + if (groupname.empty()) + continue; + // set the language as defined in the newsgroup's options or, if it doesn't have one, the system locale + _spellcheck_language = group_prefs.get_string (groupname, "spellcheck-language", ""); + + if (!_spellcheck_language.empty()) + break; + } + // create the window _root = gtk_window_new (GTK_WINDOW_TOPLEVEL); g_signal_connect (_root, "delete-event", G_CALLBACK(delete_event_cb), this);