[gedit/wip/merge-encoding-settings: 5/5] Use candidate-encodings gsetting in ComboBox and Dialog
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gedit/wip/merge-encoding-settings: 5/5] Use candidate-encodings gsetting in ComboBox and Dialog
- Date: Tue, 12 Aug 2014 17:44:36 +0000 (UTC)
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]