[gedit/wip/merge-encoding-settings: 5/5] Use candidate-encodings gsetting in ComboBox and Dialog



commit 9dd865d22024d4ed93e40b737b54cc8a4d7caf1f
Author: Sébastien Wilmet <swilmet gnome org>
Date:   Tue Aug 12 18:51:58 2014 +0200

    Use candidate-encodings gsetting in ComboBox and Dialog
    
    It adds the private function gedit_settings_get_candidate_encodings().

 gedit/gedit-encodings-combo-box.c |   15 ++---------
 gedit/gedit-encodings-dialog.c    |   37 ++--------------------------
 gedit/gedit-settings.c            |   47 ++++++++++++++++++++++++++++++++++++-
 gedit/gedit-settings.h            |    2 +
 gedit/gedit-tab.c                 |   38 ++++++-----------------------
 5 files changed, 62 insertions(+), 77 deletions(-)
---
diff --git a/gedit/gedit-encodings-combo-box.c b/gedit/gedit-encodings-combo-box.c
index dad6b6d..83a5b57 100644
--- a/gedit/gedit-encodings-combo-box.c
+++ b/gedit/gedit-encodings-combo-box.c
@@ -32,8 +32,6 @@
 
 struct _GeditEncodingsComboBoxPrivate
 {
-       GSettings *enc_settings;
-
        GtkListStore *store;
        glong changed_id;
 
@@ -108,7 +106,6 @@ gedit_encodings_combo_box_dispose (GObject *object)
        GeditEncodingsComboBox *combo = GEDIT_ENCODINGS_COMBO_BOX (object);
 
        g_clear_object (&combo->priv->store);
-       g_clear_object (&combo->priv->enc_settings);
 
        G_OBJECT_CLASS (gedit_encodings_combo_box_parent_class)->dispose (object);
 }
@@ -288,11 +285,11 @@ update_menu (GeditEncodingsComboBox *menu)
 {
        GtkListStore *store;
        GtkTreeIter iter;
-       GSList *encodings, *l;
+       GSList *encodings;
+       GSList *l;
        gchar *str;
        const GtkSourceEncoding *utf8_encoding;
        const GtkSourceEncoding *current_encoding;
-       gchar **enc_strv;
 
        store = menu->priv->store;
 
@@ -351,11 +348,7 @@ update_menu (GeditEncodingsComboBox *menu)
                g_free (str);
        }
 
-       enc_strv = g_settings_get_strv (menu->priv->enc_settings,
-                                       GEDIT_SETTINGS_ENCODING_SHOWN_IN_MENU);
-
-       encodings = _gedit_utils_encoding_strv_to_list ((const gchar * const *)enc_strv);
-       g_strfreev (enc_strv);
+       encodings = gedit_settings_get_candidate_encodings ();
 
        for (l = encodings; l != NULL; l = g_slist_next (l))
        {
@@ -402,8 +395,6 @@ gedit_encodings_combo_box_init (GeditEncodingsComboBox *menu)
 {
        menu->priv = gedit_encodings_combo_box_get_instance_private (menu);
 
-       menu->priv->enc_settings = g_settings_new ("org.gnome.gedit.preferences.encodings");
-
        menu->priv->store = gtk_list_store_new (N_COLUMNS,
                                                G_TYPE_STRING,
                                                G_TYPE_POINTER,
diff --git a/gedit/gedit-encodings-dialog.c b/gedit/gedit-encodings-dialog.c
index 4e25762..a78b413 100644
--- a/gedit/gedit-encodings-dialog.c
+++ b/gedit/gedit-encodings-dialog.c
@@ -96,7 +96,7 @@ gedit_encodings_dialog_response (GtkDialog *dialog,
 
                        enc_strv = _gedit_utils_encoding_list_to_strv (priv->show_in_menu_list);
                        g_settings_set_strv (priv->enc_settings,
-                                            GEDIT_SETTINGS_ENCODING_SHOWN_IN_MENU,
+                                            GEDIT_SETTINGS_CANDIDATE_ENCODINGS,
                                             (const gchar * const *)enc_strv);
 
                        g_strfreev (enc_strv);
@@ -258,37 +258,6 @@ remove_button_clicked_cb (GtkWidget            *button,
 }
 
 static void
-init_shown_in_menu_tree_model (GeditEncodingsDialog *dialog)
-{
-       GtkTreeIter iter;
-       gchar **enc_strv;
-       GSList *list;
-       GSList *l;
-
-       /* add data to the list store */
-       enc_strv = g_settings_get_strv (dialog->priv->enc_settings,
-                                       GEDIT_SETTINGS_ENCODING_SHOWN_IN_MENU);
-
-       list = _gedit_utils_encoding_strv_to_list ((const gchar * const *)enc_strv);
-
-       for (l = list; l != NULL; l = l->next)
-       {
-               const GtkSourceEncoding *cur_encoding = l->data;
-
-               dialog->priv->show_in_menu_list = g_slist_prepend (dialog->priv->show_in_menu_list,
-                                                                  (gpointer) cur_encoding);
-
-               gtk_list_store_append (dialog->priv->liststore_displayed, &iter);
-               gtk_list_store_set (dialog->priv->liststore_displayed, &iter,
-                                   COLUMN_CHARSET, gtk_source_encoding_get_charset (cur_encoding),
-                                   COLUMN_NAME, gtk_source_encoding_get_name (cur_encoding),
-                                   -1);
-       }
-
-       g_slist_free (list);
-}
-
-static void
 insert_available_encoding_foreach_cb (const GtkSourceEncoding *encoding,
                                      GeditEncodingsDialog    *dlg)
 {
@@ -347,8 +316,8 @@ gedit_encodings_dialog_init (GeditEncodingsDialog *dlg)
 
        /* Tree view of selected encodings */
 
-       /* Add the data */
-       init_shown_in_menu_tree_model (dlg);
+       dlg->priv->show_in_menu_list = gedit_settings_get_candidate_encodings ();
+       update_liststore_displayed (dlg);
 
        selection = gtk_tree_view_get_selection (dlg->priv->treeview_displayed);
 
diff --git a/gedit/gedit-settings.c b/gedit/gedit-settings.c
index 2dcea90..35b599f 100644
--- a/gedit/gedit-settings.c
+++ b/gedit/gedit-settings.c
@@ -25,12 +25,15 @@
 #include <config.h>
 #endif
 
+#include "gedit-settings.h"
+
 #include <string.h>
 #include <gtksourceview/gtksource.h>
+
 #include "gedit-app.h"
 #include "gedit-view.h"
 #include "gedit-window.h"
-#include "gedit-settings.h"
+#include "gedit-utils.h"
 
 #define GEDIT_SETTINGS_LOCKDOWN_COMMAND_LINE "disable-command-line"
 #define GEDIT_SETTINGS_LOCKDOWN_PRINTING "disable-printing"
@@ -490,4 +493,46 @@ gedit_settings_set_list (GSettings    *settings,
        g_free (values);
 }
 
+static gboolean
+strv_is_empty (gchar **strv)
+{
+       gint i;
+
+       for (i = 0; strv != NULL && strv[i] != NULL; i++)
+       {
+               if (strv[i][0] != '\0')
+               {
+                       return FALSE;
+               }
+       }
+
+       return TRUE;
+}
+
+GSList *
+gedit_settings_get_candidate_encodings (void)
+{
+       GSettings *settings;
+       gchar **enc_strv;
+       GSList *list;
+
+       settings = g_settings_new ("org.gnome.gedit.preferences.encodings");
+
+       enc_strv = g_settings_get_strv (settings, GEDIT_SETTINGS_CANDIDATE_ENCODINGS);
+
+       if (strv_is_empty (enc_strv))
+       {
+               list = gtk_source_encoding_get_default_candidates ();
+       }
+       else
+       {
+               list = _gedit_utils_encoding_strv_to_list ((const gchar * const *) enc_strv);
+               /* TODO ensure that UTF-8 and CURRENT are present. */
+       }
+
+       g_object_unref (settings);
+       g_strfreev (enc_strv);
+       return list;
+}
+
 /* ex:set ts=8 noet: */
diff --git a/gedit/gedit-settings.h b/gedit/gedit-settings.h
index de03f6a..1c6af12 100644
--- a/gedit/gedit-settings.h
+++ b/gedit/gedit-settings.h
@@ -71,6 +71,8 @@ void                   gedit_settings_set_list                        (GSettings     
*settings,
                                                                         const gchar   *key,
                                                                         const GSList  *list);
 
+GSList                 *gedit_settings_get_candidate_encodings         (void);
+
 /* key constants */
 #define GEDIT_SETTINGS_USE_DEFAULT_FONT                        "use-default-font"
 #define GEDIT_SETTINGS_EDITOR_FONT                     "editor-font"
diff --git a/gedit/gedit-tab.c b/gedit/gedit-tab.c
index dcbf61f..9c42130 100644
--- a/gedit/gedit-tab.c
+++ b/gedit/gedit-tab.c
@@ -1919,31 +1919,15 @@ end:
 static GSList *
 get_candidate_encodings (GeditTab *tab)
 {
+       GSList *list;
        GeditDocument *doc;
        GtkSourceFile *file;
-       GSettings *enc_settings;
-       gchar **enc_settings_strv;
        const GtkSourceEncoding *file_encoding;
        gchar *metadata_charset;
-       GSList *all_encodings = NULL;
 
-       enc_settings = g_settings_new ("org.gnome.gedit.preferences.encodings");
+       list = gedit_settings_get_candidate_encodings ();
 
-       enc_settings_strv = g_settings_get_strv (enc_settings, GEDIT_SETTINGS_CANDIDATE_ENCODINGS);
-
-       /* First take the candidate encodings from GSettings. If the gsetting is
-        * empty, take the default candidates of GtkSourceEncoding.
-        */
-       if (enc_settings_strv != NULL && enc_settings_strv[0] != NULL)
-       {
-               all_encodings = _gedit_utils_encoding_strv_to_list ((const gchar * const *)enc_settings_strv);
-       }
-       else
-       {
-               all_encodings = gtk_source_encoding_get_default_candidates ();
-       }
-
-       /* Then prepend the encoding stored in the metadata. */
+       /* Prepend the encoding stored in the metadata. */
        doc = gedit_tab_get_document (tab);
        metadata_charset = gedit_document_get_metadata (doc, GEDIT_METADATA_ATTRIBUTE_ENCODING);
 
@@ -1955,27 +1939,21 @@ get_candidate_encodings (GeditTab *tab)
 
                if (metadata_enc != NULL)
                {
-                       all_encodings = g_slist_prepend (all_encodings, (gpointer) metadata_enc);
+                       list = g_slist_prepend (list, (gpointer) metadata_enc);
                }
-
-               g_free (metadata_charset);
        }
 
-       /* Finally prepend the GtkSourceFile's encoding, if previously set by a
-        * file loader or file saver.
-        */
+       /* Prepend the GtkSourceFile's encoding */
        file = gedit_document_get_file (doc);
        file_encoding = gtk_source_file_get_encoding (file);
 
        if (file_encoding != NULL)
        {
-               all_encodings = g_slist_prepend (all_encodings, (gpointer) file_encoding);
+               list = g_slist_prepend (list, (gpointer) file_encoding);
        }
 
-       g_strfreev (enc_settings_strv);
-       g_object_unref (enc_settings);
-
-       return all_encodings;
+       g_free (metadata_charset);
+       return list;
 }
 
 static void


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