[gedit/wip/merge-encoding-settings] EncodingItems: get default candidates if the gsetting is empty
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gedit/wip/merge-encoding-settings] EncodingItems: get default candidates if the gsetting is empty
- Date: Sat, 28 Mar 2015 13:09:07 +0000 (UTC)
commit 8d418131f3715db2b6d946cf0b55b9564d7e1df2
Author: Sébastien Wilmet <swilmet gnome org>
Date: Sat Mar 28 13:59:41 2015 +0100
EncodingItems: get default candidates if the gsetting is empty
gedit/gedit-encoding-items.c | 84 ++++++++++++++++++++++++-----------------
1 files changed, 49 insertions(+), 35 deletions(-)
---
diff --git a/gedit/gedit-encoding-items.c b/gedit/gedit-encoding-items.c
index 6348c09..e580a72 100644
--- a/gedit/gedit-encoding-items.c
+++ b/gedit/gedit-encoding-items.c
@@ -74,63 +74,77 @@ gedit_encoding_item_get_name (GeditEncodingItem *item)
GSList *
gedit_encoding_items_get (void)
{
- GSList *ret = NULL;
const GtkSourceEncoding *utf8_encoding;
const GtkSourceEncoding *current_encoding;
- GSettings *enc_settings;
- gchar *str;
+ GSettings *settings;
+ gchar **settings_strv;
GSList *encodings;
- gchar **enc_strv;
+ GSList *ret = NULL;
+ GSList *l;
utf8_encoding = gtk_source_encoding_get_utf8 ();
current_encoding = gtk_source_encoding_get_current ();
- enc_settings = g_settings_new ("org.gnome.gedit.preferences.encodings");
+ settings = g_settings_new ("org.gnome.gedit.preferences.encodings");
+
+ settings_strv = g_settings_get_strv (settings, GEDIT_SETTINGS_CANDIDATE_ENCODINGS);
- if (utf8_encoding != current_encoding)
+ /* First take the candidate encodings from GSettings. If the gsetting is
+ * empty, take the default candidates of GtkSourceEncoding.
+ */
+ if (settings_strv != NULL && settings_strv[0] != NULL)
{
- str = gtk_source_encoding_to_string (utf8_encoding);
+ encodings = _gedit_utils_encoding_strv_to_list ((const gchar * const *)settings_strv);
+
+ /* Ensure that UTF-8 is present. */
+ if (utf8_encoding != current_encoding &&
+ g_slist_find (encodings, utf8_encoding) == NULL)
+ {
+ encodings = g_slist_prepend (encodings, (gpointer)utf8_encoding);
+ }
+
+ /* Ensure that the current locale encoding is present (if not
+ * present, it must be the first encoding).
+ */
+ if (g_slist_find (encodings, current_encoding) == NULL)
+ {
+ encodings = g_slist_prepend (encodings, (gpointer)current_encoding);
+ }
}
else
{
- str = g_strdup_printf (_("Current Locale (%s)"),
- gtk_source_encoding_get_charset (utf8_encoding));
+ encodings = gtk_source_encoding_get_default_candidates ();
}
- ret = g_slist_prepend (ret, gedit_encoding_item_new (utf8_encoding, str));
-
- if (current_encoding != utf8_encoding &&
- current_encoding != NULL)
+ for (l = encodings; l != NULL; l = l->next)
{
- str = g_strdup_printf (_("Current Locale (%s)"),
- gtk_source_encoding_get_charset (current_encoding));
+ const GtkSourceEncoding *enc = l->data;
+ gchar *name;
- ret = g_slist_prepend (ret, gedit_encoding_item_new (current_encoding, str));
- }
-
- enc_strv = g_settings_get_strv (enc_settings, GEDIT_SETTINGS_CANDIDATE_ENCODINGS);
-
- encodings = _gedit_utils_encoding_strv_to_list ((const gchar * const *)enc_strv);
- g_strfreev (enc_strv);
-
- g_object_unref (enc_settings);
-
- while (encodings)
- {
- const GtkSourceEncoding *enc = encodings->data;
+ if (enc == NULL)
+ {
+ continue;
+ }
- if (enc != current_encoding &&
- enc != utf8_encoding &&
- enc != NULL)
+ if (enc == current_encoding)
{
- str = gtk_source_encoding_to_string (enc);
- ret = g_slist_prepend (ret, gedit_encoding_item_new (enc, str));
+ name = g_strdup_printf (_("Current Locale (%s)"),
+ gtk_source_encoding_get_charset (enc));
+ }
+ else
+ {
+ name = gtk_source_encoding_to_string (enc);
}
- encodings = g_slist_delete_link (encodings, encodings);
+ ret = g_slist_prepend (ret, gedit_encoding_item_new (enc, name));
}
- return g_slist_reverse (ret);
+ ret = g_slist_reverse (ret);
+
+ g_object_unref (settings);
+ g_strfreev (settings_strv);
+ g_slist_free (encodings);
+ return ret;
}
/* ex:set ts=8 noet: */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]