[evolution/webkit-composer: 125/130] Add e_editor_spell_check_dialog_update_dictionaries().



commit d4d2d10ac1e313ccec4eb24aaa12c0a6fb17da34
Author: Matthew Barnes <mbarnes redhat com>
Date:   Fri Jan 18 07:45:14 2013 -0500

    Add e_editor_spell_check_dialog_update_dictionaries().
    
    Replaces e_editor_spell_check_dialog_get/set_dictionaries().
    
    The dialog has access to the active spell check languages through
    ESpellChecker, so there's no need for it to keep its own list.

 doc/reference/libeutil/libeutil-sections.txt |    3 +-
 e-util/e-editor-actions.c                    |    4 --
 e-util/e-editor-spell-check-dialog.c         |   70 +++++++++++++++++---------
 e-util/e-editor-spell-check-dialog.h         |   12 ++---
 e-util/e-editor.c                            |    9 ++--
 5 files changed, 56 insertions(+), 42 deletions(-)
---
diff --git a/doc/reference/libeutil/libeutil-sections.txt b/doc/reference/libeutil/libeutil-sections.txt
index bc648c7..d308a8d 100644
--- a/doc/reference/libeutil/libeutil-sections.txt
+++ b/doc/reference/libeutil/libeutil-sections.txt
@@ -1741,8 +1741,7 @@ EEditorSelectionPrivate
 <TITLE>EEditorSpellCheckDialog</TITLE>
 EEditorSpellCheckDialog
 e_editor_spell_check_dialog_new
-e_editor_spell_check_dialog_get_dictionaries
-e_editor_spell_check_dialog_set_dictionaries
+e_editor_spell_check_dialog_update_dictionaries
 <SUBSECTION Standard>
 E_EDITOR_SPELL_CHECK_DIALOG
 E_IS_EDITOR_SPELL_CHECK_DIALOG
diff --git a/e-util/e-editor-actions.c b/e-util/e-editor-actions.c
index ea36a05..d751e1d 100644
--- a/e-util/e-editor-actions.c
+++ b/e-util/e-editor-actions.c
@@ -863,10 +863,6 @@ action_spell_check_cb (GtkAction *action,
 	if (editor->priv->spell_check_dialog == NULL) {
 		editor->priv->spell_check_dialog =
 			e_editor_spell_check_dialog_new (editor);
-
-		e_editor_spell_check_dialog_set_dictionaries (
-			E_EDITOR_SPELL_CHECK_DIALOG (editor->priv->spell_check_dialog),
-			editor->priv->active_dictionaries);
 	}
 
 	gtk_window_present (GTK_WINDOW (editor->priv->spell_check_dialog));
diff --git a/e-util/e-editor-spell-check-dialog.c b/e-util/e-editor-spell-check-dialog.c
index 64b5cd1..75b0122 100644
--- a/e-util/e-editor-spell-check-dialog.c
+++ b/e-util/e-editor-spell-check-dialog.c
@@ -46,7 +46,6 @@ struct _EEditorSpellCheckDialogPrivate {
 	GtkWidget *suggestion_label;
 	GtkWidget *tree_view;
 
-	GList *dictionaries;
 	WebKitDOMDOMSelection *selection;
 
 	gchar *word;
@@ -448,6 +447,19 @@ editor_spell_check_dialog_finalize (GObject *object)
 }
 
 static void
+editor_spell_check_dialog_constructed (GObject *object)
+{
+	EEditorSpellCheckDialog *dialog;
+
+	/* Chain up to parent's constructed() method. */
+	G_OBJECT_CLASS (e_editor_spell_check_dialog_parent_class)->
+		constructed (object);
+
+	dialog = E_EDITOR_SPELL_CHECK_DIALOG (object);
+	e_editor_spell_check_dialog_update_dictionaries (dialog);
+}
+
+static void
 e_editor_spell_check_dialog_class_init (EEditorSpellCheckDialogClass *class)
 {
 	GtkWidgetClass *widget_class;
@@ -458,6 +470,7 @@ e_editor_spell_check_dialog_class_init (EEditorSpellCheckDialogClass *class)
 
 	object_class = G_OBJECT_CLASS (class);
 	object_class->finalize = editor_spell_check_dialog_finalize;
+	object_class->constructed = editor_spell_check_dialog_constructed;
 
 	widget_class = GTK_WIDGET_CLASS (class);
 	widget_class->show = editor_spell_check_dialog_show;
@@ -623,32 +636,40 @@ e_editor_spell_check_dialog_new (EEditor *editor)
 		NULL);
 }
 
-GList *
-e_editor_spell_check_dialog_get_dictionaries (EEditorSpellCheckDialog *dialog)
-{
-	g_return_val_if_fail (E_IS_EDITOR_SPELL_CHECK_DIALOG (dialog), NULL);
-
-	return g_list_copy (dialog->priv->dictionaries);
-}
-
 void
-e_editor_spell_check_dialog_set_dictionaries (EEditorSpellCheckDialog *dialog,
-                                              GList *dictionaries)
+e_editor_spell_check_dialog_update_dictionaries (EEditorSpellCheckDialog *dialog)
 {
+	EEditor *editor;
+	EEditorWidget *editor_widget;
+	ESpellChecker *spell_checker;
 	GtkComboBox *combo_box;
 	GtkListStore *store;
-	GList *list;
+	GQueue queue = G_QUEUE_INIT;
+	gchar **languages;
+	guint n_languages = 0;
+	guint ii;
 
 	g_return_if_fail (E_IS_EDITOR_SPELL_CHECK_DIALOG (dialog));
 
-	/* Free the old list of spell checkers. */
-	g_list_free (dialog->priv->dictionaries);
-
-	/* Copy and sort the new list of spell checkers. */
-	list = g_list_sort (
-		g_list_copy (dictionaries),
-		(GCompareFunc) e_spell_dictionary_compare);
-	dialog->priv->dictionaries = list;
+	editor = e_editor_dialog_get_editor (E_EDITOR_DIALOG (dialog));
+	editor_widget = e_editor_get_editor_widget (editor);
+	spell_checker = e_editor_widget_get_spell_checker (editor_widget);
+
+	languages = e_spell_checker_list_active_languages (
+		spell_checker, &n_languages);
+	for (ii = 0; ii < n_languages; ii++) {
+		ESpellDictionary *dictionary;
+
+		dictionary = e_spell_checker_ref_dictionary (
+			spell_checker, languages[ii]);
+		if (dictionary != NULL)
+			g_queue_push_tail (&queue, dictionary);
+		else
+			g_warning (
+				"%s: No '%s' dictionary found",
+				G_STRFUNC, languages[ii]);
+	}
+	g_strfreev (languages);
 
 	/* Populate a list store for the combo box. */
 	store = gtk_list_store_new (
@@ -656,12 +677,12 @@ e_editor_spell_check_dialog_set_dictionaries (EEditorSpellCheckDialog *dialog,
 		G_TYPE_STRING,			/* COLUMN_NAME */
 		E_TYPE_SPELL_DICTIONARY);	/* COLUMN_DICTIONARY */
 
-	while (list != NULL) {
-		ESpellDictionary *dictionary = list->data;
+	while (!g_queue_is_empty (&queue)) {
+		ESpellDictionary *dictionary;
 		GtkTreeIter iter;
 		const gchar *name;
 
-		dictionary = E_SPELL_DICTIONARY (list->data);
+		dictionary = g_queue_pop_head (&queue);
 		name = e_spell_dictionary_get_name (dictionary);
 
 		gtk_list_store_append (store, &iter);
@@ -671,7 +692,7 @@ e_editor_spell_check_dialog_set_dictionaries (EEditorSpellCheckDialog *dialog,
 			COLUMN_DICTIONARY, dictionary,
 			-1);
 
-		list = g_list_next (list);
+		g_object_unref (dictionary);
 	}
 
 	/* FIXME Try to restore selection. */
@@ -681,3 +702,4 @@ e_editor_spell_check_dialog_set_dictionaries (EEditorSpellCheckDialog *dialog,
 
 	g_object_unref (store);
 }
+
diff --git a/e-util/e-editor-spell-check-dialog.h b/e-util/e-editor-spell-check-dialog.h
index 1df962e..c368ec6 100644
--- a/e-util/e-editor-spell-check-dialog.h
+++ b/e-util/e-editor-spell-check-dialog.h
@@ -62,13 +62,11 @@ struct _EEditorSpellCheckDialogClass {
 };
 
 GType		e_editor_spell_check_dialog_get_type
-						(void) G_GNUC_CONST;
-GtkWidget *	e_editor_spell_check_dialog_new	(EEditor *editor);
-GList *		e_editor_spell_check_dialog_get_dictionaries
-						(EEditorSpellCheckDialog *dialog);
-void		e_editor_spell_check_dialog_set_dictionaries
-						(EEditorSpellCheckDialog *dialog,
-						 GList *dictionaries);
+					(void) G_GNUC_CONST;
+GtkWidget *	e_editor_spell_check_dialog_new
+					(EEditor *editor);
+void		e_editor_spell_check_dialog_update_dictionaries
+					(EEditorSpellCheckDialog *dialog);
 
 G_END_DECLS
 
diff --git a/e-util/e-editor.c b/e-util/e-editor.c
index e06df9f..91567b2 100644
--- a/e-util/e-editor.c
+++ b/e-util/e-editor.c
@@ -455,11 +455,10 @@ editor_spell_languages_changed (EEditor *editor,
 		"spell-checking-languages", languages->str,
 		NULL);
 
-	if (editor->priv->spell_check_dialog != NULL) {
-		e_editor_spell_check_dialog_set_dictionaries (
-			E_EDITOR_SPELL_CHECK_DIALOG (editor->priv->spell_check_dialog),
-			dictionaries);
-	}
+	if (editor->priv->spell_check_dialog != NULL)
+		e_editor_spell_check_dialog_update_dictionaries (
+			E_EDITOR_SPELL_CHECK_DIALOG (
+			editor->priv->spell_check_dialog));
 
 	g_string_free (languages, TRUE);
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]