[evolution/wip/webkit-composer: 191/372] EEditor: Remove private "active_dictionaries" list.



commit baeca1c3a6e98586d4bd23ee103a34129989d9da
Author: Matthew Barnes <mbarnes redhat com>
Date:   Fri Jan 18 08:28:01 2013 -0500

    EEditor: Remove private "active_dictionaries" list.
    
    This can be obtained from ESpellChecker, no need to keep another
    redundant list.

 e-util/e-editor-actions.c |   35 +++++---------------------
 e-util/e-editor-private.h |    1 -
 e-util/e-editor.c         |   60 ++++++++++++++++++++++++++++----------------
 3 files changed, 45 insertions(+), 51 deletions(-)
---
diff --git a/e-util/e-editor-actions.c b/e-util/e-editor-actions.c
index d751e1d..2216816 100644
--- a/e-util/e-editor-actions.c
+++ b/e-util/e-editor-actions.c
@@ -577,56 +577,35 @@ action_language_cb (GtkToggleAction *toggle_action,
                     EEditor *editor)
 {
        ESpellChecker *checker;
-       ESpellDictionary *dictionary;
        EEditorWidget *editor_widget;
        const gchar *language_code;
        GtkAction *add_action;
-       GList *list;
-       guint length;
+       guint count;
        gchar *action_name;
        gboolean active;
 
        editor_widget = e_editor_get_editor_widget (editor);
        checker = e_editor_widget_get_spell_checker (editor_widget);
        language_code = gtk_action_get_name (GTK_ACTION (toggle_action));
-       dictionary = e_spell_checker_ref_dictionary (checker, language_code);
-       g_return_if_fail (dictionary != NULL);
 
        active = gtk_toggle_action_get_active (toggle_action);
        e_spell_checker_set_language_active (checker, language_code, active);
 
-       /* Update the list of active dictionaries */
-       list = editor->priv->active_dictionaries;
-       if (active) {
-               list = g_list_insert_sorted (
-                       list, (EnchantDict *) dictionary,
-                       (GCompareFunc) e_spell_dictionary_compare);
-       } else {
-               GList *link;
-
-               link = g_list_find (list, dictionary);
-               g_return_if_fail (link != NULL);
-               g_object_unref (link->data);
-               list = g_list_delete_link (list, link);
-       }
-       editor->priv->active_dictionaries = list;
-       length = g_list_length (list);
-
        /* Update "Add Word To" context menu item visibility. */
        action_name = g_strdup_printf ("context-spell-add-%s", language_code);
        add_action = e_editor_get_action (editor, action_name);
        gtk_action_set_visible (add_action, active);
        g_free (action_name);
 
-       gtk_action_set_visible (ACTION (CONTEXT_SPELL_ADD), length == 1);
-       gtk_action_set_visible (ACTION (CONTEXT_SPELL_ADD_MENU), length > 1);
-       gtk_action_set_visible (ACTION (CONTEXT_SPELL_IGNORE), length > 0);
+       count = e_spell_checker_count_active_languages (checker);
 
-       gtk_action_set_sensitive (ACTION (SPELL_CHECK), length > 0);
+       gtk_action_set_visible (ACTION (CONTEXT_SPELL_ADD), count == 1);
+       gtk_action_set_visible (ACTION (CONTEXT_SPELL_ADD_MENU), count > 1);
+       gtk_action_set_visible (ACTION (CONTEXT_SPELL_IGNORE), count > 0);
 
-       e_editor_emit_spell_languages_changed (editor);
+       gtk_action_set_sensitive (ACTION (SPELL_CHECK), count > 0);
 
-       g_object_unref (dictionary);
+       e_editor_emit_spell_languages_changed (editor);
 }
 
 static gboolean
diff --git a/e-util/e-editor-private.h b/e-util/e-editor-private.h
index cf313f6..5c9cf23 100644
--- a/e-util/e-editor-private.h
+++ b/e-util/e-editor-private.h
@@ -87,7 +87,6 @@ struct _EEditorPrivate {
        gchar *filename;
 
        guint spell_suggestions_merge_id;
-       GList *active_dictionaries;
 
        WebKitDOMNode *image;
        WebKitDOMNode *table_cell;
diff --git a/e-util/e-editor.c b/e-util/e-editor.c
index dd39a2c..611e175 100644
--- a/e-util/e-editor.c
+++ b/e-util/e-editor.c
@@ -96,8 +96,7 @@ action_context_spell_suggest_cb (GtkAction *action,
 }
 
 static void
-editor_inline_spelling_suggestions (EEditor *editor,
-                                    EnchantDict *dictionary)
+editor_inline_spelling_suggestions (EEditor *editor)
 {
        EEditorWidget *widget;
        EEditorSelection *selection;
@@ -196,12 +195,13 @@ editor_inline_spelling_suggestions (EEditor *editor,
 
 /* Helper for editor_update_actions() */
 static void
-editor_spell_checkers_foreach (ESpellDictionary *dictionary,
-                               EEditor *editor)
+editor_spell_checkers_foreach (EEditor *editor,
+                               const gchar *language_code)
 {
        EEditorWidget *editor_widget;
        EEditorSelection *selection;
-       const gchar *language_code;
+       ESpellChecker *spell_checker;
+       ESpellDictionary *dictionary;
        GtkActionGroup *action_group;
        GtkUIManager *manager;
        GList *list, *link;
@@ -210,15 +210,23 @@ editor_spell_checkers_foreach (ESpellDictionary *dictionary,
        gint ii = 0;
        guint merge_id;
 
-       language_code = e_spell_dictionary_get_code (dictionary);
-
        editor_widget = e_editor_get_editor_widget (editor);
        selection = e_editor_widget_get_selection (editor_widget);
+       spell_checker = e_editor_widget_get_spell_checker (editor_widget);
+
        word = e_editor_selection_get_caret_word (selection);
        if (word == NULL || *word == '\0')
                return;
 
-       list = e_spell_dictionary_get_suggestions (dictionary, word, -1);
+       dictionary = e_spell_checker_ref_dictionary (
+               spell_checker, language_code);
+       if (dictionary != NULL) {
+               list = e_spell_dictionary_get_suggestions (
+                       dictionary, word, -1);
+               g_object_unref (dictionary);
+       } else {
+               list = NULL;
+       }
 
        manager = e_editor_get_ui_manager (editor);
        action_group = editor->priv->suggestion_actions;
@@ -288,17 +296,22 @@ editor_update_actions (EEditor *editor,
        WebKitHitTestResult *hit_test;
        WebKitHitTestResultContext context;
        WebKitDOMNode *node;
-       EEditorWidget *widget;
        EEditorSelection *selection;
+       EEditorWidget *editor_widget;
+       ESpellChecker *spell_checker;
        GtkUIManager *manager;
        GtkActionGroup *action_group;
        GList *list;
+       gchar **languages;
+       guint ii, n_languages;
        gboolean visible;
        guint merge_id;
        gint loc, len;
 
-       widget = e_editor_get_editor_widget (editor);
-       webview = WEBKIT_WEB_VIEW (widget);
+       editor_widget = e_editor_get_editor_widget (editor);
+       spell_checker = e_editor_widget_get_spell_checker (editor_widget);
+
+       webview = WEBKIT_WEB_VIEW (editor_widget);
        manager = e_editor_get_ui_manager (editor);
 
        editor->priv->image = NULL;
@@ -382,12 +395,14 @@ editor_update_actions (EEditor *editor,
                list = g_list_delete_link (list, list);
        }
 
+       languages = e_spell_checker_list_active_languages (
+               spell_checker, &n_languages);
+
        /* Decide if we should show spell checking items. */
        checker = WEBKIT_SPELL_CHECKER (webkit_get_text_checker ());
-       selection = e_editor_widget_get_selection (widget);
+       selection = e_editor_widget_get_selection (editor_widget);
        visible = FALSE;
-       if ((g_list_length (editor->priv->active_dictionaries) > 0) &&
-           e_editor_selection_has_text (selection)) {
+       if ((n_languages > 0) && e_editor_selection_has_text (selection)) {
                gchar *word = e_editor_selection_get_caret_word (selection);
                if (word && *word) {
                        webkit_spell_checker_check_spelling_of_string (
@@ -404,21 +419,25 @@ editor_update_actions (EEditor *editor,
 
        /* Exit early if spell checking items are invisible. */
        if (!visible) {
+               g_strfreev (languages);
                return;
        }
 
-       list = editor->priv->active_dictionaries;
        merge_id = gtk_ui_manager_new_merge_id (manager);
        editor->priv->spell_suggestions_merge_id = merge_id;
 
        /* Handle a single active language as a special case. */
-       if (g_list_length (list) == 1) {
-               editor_inline_spelling_suggestions (editor, list->data);
+       if (n_languages == 1) {
+               editor_inline_spelling_suggestions (editor);
+               g_strfreev (languages);
                return;
        }
 
-       /* Add actions and context menu content for active languages */
-       g_list_foreach (list, (GFunc) editor_spell_checkers_foreach, editor);
+       /* Add actions and context menu content for active languages. */
+       for (ii = 0; ii < n_languages; ii++)
+               editor_spell_checkers_foreach (editor, languages[ii]);
+
+       g_strfreev (languages);
 }
 
 static void
@@ -685,9 +704,6 @@ editor_dispose (GObject *object)
        g_clear_object (&priv->spell_check_actions);
        g_clear_object (&priv->suggestion_actions);
 
-       g_list_free_full (priv->active_dictionaries, g_object_unref);
-       priv->active_dictionaries = NULL;
-
        g_clear_object (&priv->main_menu);
        g_clear_object (&priv->main_toolbar);
        g_clear_object (&priv->edit_toolbar);


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