diff --git a/panels/common/cc-common-language.c b/panels/common/cc-common-language.c index 4c496daea..741f56498 100644 --- a/panels/common/cc-common-language.c +++ b/panels/common/cc-common-language.c @@ -709,3 +709,53 @@ cc_common_language_get_initial_regions (const gchar *lang) return ht; } + +static void +foreach_user_lang_cb (gpointer key, + gpointer value, + gpointer user_data) +{ + GtkListStore *store = (GtkListStore *) user_data; + const char *locale = (const char *) key; + const char *display_locale = (const char *) value; + GtkTreeIter iter; + + gtk_list_store_append (store, &iter); + gtk_list_store_set (store, &iter, + LOCALE_COL, locale, + DISPLAY_LOCALE_COL, display_locale, + -1); +} + +void +cc_common_language_add_user_languages (GtkTreeModel *model) +{ + char *name; + GtkTreeIter iter; + GtkListStore *store = GTK_LIST_STORE (model); + GHashTable *user_langs; + const char *display; + + gtk_list_store_clear (store); + + user_langs = cc_common_language_get_initial_languages (); + + /* Add the current locale first */ + name = cc_common_language_get_current_language (); + display = g_hash_table_lookup (user_langs, name); + + gtk_list_store_append (store, &iter); + gtk_list_store_set (store, &iter, LOCALE_COL, name, DISPLAY_LOCALE_COL, display, -1); + g_hash_table_remove (user_langs, name); + g_free (name); + + /* The rest of the languages */ + g_hash_table_foreach (user_langs, (GHFunc) foreach_user_lang_cb, store); + + /* And now the "Other…" selection */ + gtk_list_store_append (store, &iter); + gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other…"), -1); + + g_hash_table_destroy (user_langs); +} + diff --git a/panels/common/cc-common-language.h b/panels/common/cc-common-language.h index f08d1424f..ae50035e2 100644 --- a/panels/common/cc-common-language.h +++ b/panels/common/cc-common-language.h @@ -55,6 +55,8 @@ void cc_common_language_setup_list (GtkWidget *treeview, GHashTable *initial); void cc_common_language_select_current_language (GtkTreeView *treeview); +void cc_common_language_add_user_languages (GtkTreeModel *model); + G_END_DECLS #endif diff --git a/panels/common/cc-language-chooser.c b/panels/common/cc-language-chooser.c index 63161c4f0..913e32a5b 100644 --- a/panels/common/cc-language-chooser.c +++ b/panels/common/cc-language-chooser.c @@ -73,55 +73,6 @@ row_activated (GtkTreeView *tree_view, gtk_dialog_response (GTK_DIALOG (chooser), GTK_RESPONSE_OK); } -static void -languages_foreach_cb (gpointer key, - gpointer value, - gpointer user_data) -{ - GtkListStore *store = (GtkListStore *) user_data; - const char *locale = (const char *) key; - const char *display_locale = (const char *) value; - GtkTreeIter iter; - - gtk_list_store_append (store, &iter); - gtk_list_store_set (store, &iter, - LOCALE_COL, locale, - DISPLAY_LOCALE_COL, display_locale, - -1); -} - -void -cc_add_user_languages (GtkTreeModel *model) -{ - char *name; - GtkTreeIter iter; - GtkListStore *store = GTK_LIST_STORE (model); - GHashTable *user_langs; - const char *display; - - gtk_list_store_clear (store); - - user_langs = cc_common_language_get_initial_languages (); - - /* Add the current locale first */ - name = cc_common_language_get_current_language (); - display = g_hash_table_lookup (user_langs, name); - - gtk_list_store_append (store, &iter); - gtk_list_store_set (store, &iter, LOCALE_COL, name, DISPLAY_LOCALE_COL, display, -1); - g_hash_table_remove (user_langs, name); - g_free (name); - - /* The rest of the languages */ - g_hash_table_foreach (user_langs, (GHFunc) languages_foreach_cb, store); - - /* And now the "Other…" selection */ - gtk_list_store_append (store, &iter); - gtk_list_store_set (store, &iter, LOCALE_COL, NULL, DISPLAY_LOCALE_COL, _("Other…"), -1); - - g_hash_table_destroy (user_langs); -} - static void remove_timeout (gpointer data, GObject *where_the_object_was) diff --git a/panels/common/cc-language-chooser.h b/panels/common/cc-language-chooser.h index da557dc72..eeb686d3e 100644 --- a/panels/common/cc-language-chooser.h +++ b/panels/common/cc-language-chooser.h @@ -26,8 +26,6 @@ G_BEGIN_DECLS -void cc_add_user_languages (GtkTreeModel *model); - GtkWidget *cc_language_chooser_new (GtkWidget *parent, gboolean regions); void cc_language_chooser_clear_filter (GtkWidget *chooser); diff --git a/panels/user-accounts/um-user-panel.c b/panels/user-accounts/um-user-panel.c index 71aeae848..224274f49 100644 --- a/panels/user-accounts/um-user-panel.c +++ b/panels/user-accounts/um-user-panel.c @@ -641,7 +641,7 @@ show_user (ActUser *user, CcUserPanelPrivate *d) widget = get_widget (d, "account-language-combo"); model = um_editable_combo_get_model (UM_EDITABLE_COMBO (widget)); - cc_add_user_languages (model); + cc_common_language_add_user_languages (model); lang = g_strdup (act_user_get_language (user)); if (!lang)