summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2015-09-18 15:11:59 -0400
committerMatthias Clasen <mclasen@redhat.com>2015-09-21 23:23:57 -0400
commitc9b8a8c718838c3357e456f9e8b9396efd96e717 (patch)
tree609e3b4e7a4b079957b2df8701910cf4769f9efd
parentb45052856e406d6526ef4d32f4346e43c50cd58a (diff)
downloadgnome-initial-setup-c9b8a8c718838c3357e456f9e8b9396efd96e717.tar.gz
Sort languages case-insensitively
The current case-sensitive sorting is confusing. https://bugzilla.gnome.org/show_bug.cgi?id=755233
-rw-r--r--gnome-initial-setup/pages/language/cc-language-chooser.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/gnome-initial-setup/pages/language/cc-language-chooser.c b/gnome-initial-setup/pages/language/cc-language-chooser.c
index 222762b..bcc27f3 100644
--- a/gnome-initial-setup/pages/language/cc-language-chooser.c
+++ b/gnome-initial-setup/pages/language/cc-language-chooser.c
@@ -75,6 +75,7 @@ typedef struct {
gchar *locale_name;
gchar *locale_current_name;
gchar *locale_untranslated_name;
+ gchar *sort_key;
gboolean is_extra;
} LanguageWidget;
@@ -108,6 +109,7 @@ language_widget_free (gpointer data)
g_free (widget->locale_name);
g_free (widget->locale_current_name);
g_free (widget->locale_untranslated_name);
+ g_free (widget->sort_key);
g_free (widget);
}
@@ -119,6 +121,7 @@ language_widget_new (const char *locale_id,
gchar *locale_name, *locale_current_name, *locale_untranslated_name;
gchar *language, *language_name;
gchar *country, *country_name;
+ gchar *sort_key;
LanguageWidget *widget = g_new0 (LanguageWidget, 1);
if (!gnome_parse_locale (locale_id, &language, &country, NULL, NULL))
@@ -162,6 +165,10 @@ language_widget_new (const char *locale_id,
widget->locale_untranslated_name = locale_untranslated_name;
widget->is_extra = is_extra;
+ sort_key = g_utf8_normalize (locale_name, -1, G_NORMALIZE_DEFAULT);
+ widget->sort_key = g_utf8_casefold (sort_key, -1);
+ g_free (sort_key);
+
g_object_set_data_full (G_OBJECT (widget->box), "language-widget", widget,
language_widget_free);
@@ -354,7 +361,7 @@ sort_languages (GtkListBoxRow *a,
if (!la->is_extra && lb->is_extra)
return -1;
- return strcmp (la->locale_name, lb->locale_name);
+ return strcmp (la->sort_key, lb->sort_key);
}
static void