cc-common-language.c: Remove a bunch of unused code
This stopped being used in the last region panel re-design. See commit
35d920f1b8
.
https://bugzilla.gnome.org/show_bug.cgi?id=710412
This commit is contained in:
parent
880f9f1475
commit
c244568f0b
1 changed files with 0 additions and 438 deletions
|
@ -36,62 +36,6 @@
|
|||
|
||||
static char *get_lang_for_user_object_path (const char *path);
|
||||
|
||||
static gint
|
||||
cc_common_language_sort_languages (GtkTreeModel *model,
|
||||
GtkTreeIter *a,
|
||||
GtkTreeIter *b,
|
||||
gpointer data)
|
||||
{
|
||||
char *ca, *cb;
|
||||
char *la, *lb;
|
||||
gboolean sa, ula;
|
||||
gboolean sb, ulb;
|
||||
gint result;
|
||||
|
||||
gtk_tree_model_get (model, a,
|
||||
LOCALE_COL, &ca,
|
||||
DISPLAY_LOCALE_COL, &la,
|
||||
SEPARATOR_COL, &sa,
|
||||
USER_LANGUAGE, &ula,
|
||||
-1);
|
||||
gtk_tree_model_get (model, b,
|
||||
LOCALE_COL, &cb,
|
||||
DISPLAY_LOCALE_COL, &lb,
|
||||
SEPARATOR_COL, &sb,
|
||||
USER_LANGUAGE, &ulb,
|
||||
-1);
|
||||
|
||||
/* Sort before and after separator first */
|
||||
if (sa && sb)
|
||||
result = 0;
|
||||
else if (sa)
|
||||
result = ulb ? 1 : -1;
|
||||
else if (sb)
|
||||
result = ula ? -1 : 1;
|
||||
|
||||
/* Sort user-languages first */
|
||||
else if (ula != ulb) {
|
||||
if (ula)
|
||||
result = -1;
|
||||
else
|
||||
result = 1;
|
||||
}
|
||||
|
||||
else if (!ca)
|
||||
result = 1;
|
||||
else if (!cb)
|
||||
result = -1;
|
||||
else
|
||||
result = strcmp (la, lb);
|
||||
|
||||
g_free (ca);
|
||||
g_free (cb);
|
||||
g_free (la);
|
||||
g_free (lb);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
iter_for_language (GtkTreeModel *model,
|
||||
const gchar *lang,
|
||||
|
@ -143,14 +87,6 @@ cc_common_language_get_iter_for_language (GtkTreeModel *model,
|
|||
return iter_for_language (model, lang, iter, FALSE);
|
||||
}
|
||||
|
||||
gboolean
|
||||
cc_common_language_get_iter_for_region (GtkTreeModel *model,
|
||||
const gchar *lang,
|
||||
GtkTreeIter *iter)
|
||||
{
|
||||
return iter_for_language (model, lang, iter, TRUE);
|
||||
}
|
||||
|
||||
gboolean
|
||||
cc_common_language_has_font (const gchar *locale)
|
||||
{
|
||||
|
@ -209,95 +145,6 @@ cc_common_language_has_font (const gchar *locale)
|
|||
return is_displayable;
|
||||
}
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GtkListStore *store;
|
||||
GHashTable *user_langs;
|
||||
gchar **languages;
|
||||
gboolean regions;
|
||||
gint position;
|
||||
} AsyncLangData;
|
||||
|
||||
static void
|
||||
async_lang_data_free (AsyncLangData *data)
|
||||
{
|
||||
g_object_unref (data->store);
|
||||
g_hash_table_unref (data->user_langs);
|
||||
g_strfreev (data->languages);
|
||||
g_free (data);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
add_one_language (gpointer d)
|
||||
{
|
||||
AsyncLangData *data = d;
|
||||
char *name;
|
||||
char *language;
|
||||
GtkTreeIter iter;
|
||||
|
||||
if (data->languages[data->position] == NULL) {
|
||||
/* we are done */
|
||||
async_lang_data_free (data);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
name = gnome_normalize_locale (data->languages[data->position]);
|
||||
if (g_hash_table_lookup (data->user_langs, name) != NULL) {
|
||||
g_free (name);
|
||||
goto next;
|
||||
}
|
||||
|
||||
if (!cc_common_language_has_font (data->languages[data->position])) {
|
||||
g_free (name);
|
||||
goto next;
|
||||
}
|
||||
|
||||
if (data->regions) {
|
||||
language = gnome_get_country_from_locale (name, NULL);
|
||||
}
|
||||
else {
|
||||
language = gnome_get_language_from_locale (name, NULL);
|
||||
}
|
||||
if (!language) {
|
||||
g_debug ("Ignoring '%s' as a locale, because we couldn't figure the language name", name);
|
||||
g_free (name);
|
||||
goto next;
|
||||
}
|
||||
|
||||
gtk_list_store_insert_with_values (data->store,
|
||||
&iter,
|
||||
-1,
|
||||
LOCALE_COL, name,
|
||||
DISPLAY_LOCALE_COL, language,
|
||||
-1);
|
||||
|
||||
g_free (name);
|
||||
g_free (language);
|
||||
|
||||
next:
|
||||
data->position++;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
guint
|
||||
cc_common_language_add_available_languages (GtkListStore *store,
|
||||
gboolean regions,
|
||||
GHashTable *user_langs)
|
||||
{
|
||||
AsyncLangData *data;
|
||||
|
||||
data = g_new0 (AsyncLangData, 1);
|
||||
|
||||
data->store = g_object_ref (store);
|
||||
data->user_langs = g_hash_table_ref (user_langs);
|
||||
data->languages = gnome_get_all_locales ();
|
||||
data->regions = regions;
|
||||
data->position = 0;
|
||||
|
||||
return g_idle_add (add_one_language, data);
|
||||
}
|
||||
|
||||
gchar *
|
||||
cc_common_language_get_current_language (void)
|
||||
{
|
||||
|
@ -320,168 +167,6 @@ cc_common_language_get_current_language (void)
|
|||
return language;
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
GtkListStore *store;
|
||||
gboolean user_lang;
|
||||
} LangForeachData;
|
||||
|
||||
static void
|
||||
languages_foreach_cb (gpointer key,
|
||||
gpointer value,
|
||||
gpointer user_data)
|
||||
{
|
||||
LangForeachData *data = (LangForeachData *) user_data;
|
||||
const char *locale = (const char *) key;
|
||||
const char *display_locale = (const char *) value;
|
||||
|
||||
gtk_list_store_insert_with_values (data->store,
|
||||
NULL,
|
||||
-1,
|
||||
LOCALE_COL, locale,
|
||||
DISPLAY_LOCALE_COL, display_locale,
|
||||
SEPARATOR_COL, FALSE,
|
||||
USER_LANGUAGE, data->user_lang,
|
||||
-1);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
separator_func (GtkTreeModel *model,
|
||||
GtkTreeIter *iter,
|
||||
gpointer data)
|
||||
{
|
||||
gboolean is_sep;
|
||||
|
||||
gtk_tree_model_get (model, iter,
|
||||
SEPARATOR_COL, &is_sep,
|
||||
-1);
|
||||
|
||||
return is_sep;
|
||||
}
|
||||
|
||||
void
|
||||
cc_common_language_setup_list (GtkWidget *treeview,
|
||||
GHashTable *users,
|
||||
GHashTable *initial)
|
||||
{
|
||||
GtkCellRenderer *cell;
|
||||
GtkTreeViewColumn *column;
|
||||
GtkListStore *store;
|
||||
LangForeachData data;
|
||||
GList *langs, *l;
|
||||
|
||||
cell = gtk_cell_renderer_text_new ();
|
||||
g_object_set (cell,
|
||||
"width-chars", 40,
|
||||
"ellipsize", PANGO_ELLIPSIZE_END,
|
||||
NULL);
|
||||
column = gtk_tree_view_column_new_with_attributes (NULL, cell, "text", DISPLAY_LOCALE_COL, NULL);
|
||||
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
|
||||
store = gtk_list_store_new (NUM_COLS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN);
|
||||
gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (store),
|
||||
cc_common_language_sort_languages, NULL, NULL);
|
||||
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store),
|
||||
GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID,
|
||||
GTK_SORT_ASCENDING);
|
||||
gtk_tree_view_set_row_separator_func (GTK_TREE_VIEW (treeview),
|
||||
separator_func,
|
||||
NULL, NULL);
|
||||
|
||||
gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), GTK_TREE_MODEL (store));
|
||||
|
||||
data.store = store;
|
||||
|
||||
/* Add the original users languages */
|
||||
if (users != NULL && g_hash_table_size (users) > 0) {
|
||||
data.user_lang = TRUE;
|
||||
g_hash_table_foreach (users, (GHFunc) languages_foreach_cb, &data);
|
||||
|
||||
gtk_list_store_insert_with_values (store,
|
||||
NULL,
|
||||
-1,
|
||||
LOCALE_COL, NULL,
|
||||
DISPLAY_LOCALE_COL, "Don't show",
|
||||
SEPARATOR_COL, TRUE,
|
||||
USER_LANGUAGE, FALSE,
|
||||
-1);
|
||||
}
|
||||
|
||||
/* Add languages from the initial hashtable */
|
||||
data.user_lang = FALSE;
|
||||
langs = initial ? g_hash_table_get_keys (initial) : NULL;
|
||||
for (l = langs; l != NULL; l = l->next) {
|
||||
char *lang = l->data;
|
||||
|
||||
if (g_hash_table_lookup (users, lang) != NULL)
|
||||
continue;
|
||||
|
||||
languages_foreach_cb (lang, g_hash_table_lookup (initial, lang), &data);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
cc_common_language_select_current_language (GtkTreeView *treeview)
|
||||
{
|
||||
GtkTreeModel *model;
|
||||
GtkTreeIter iter;
|
||||
gboolean cont;
|
||||
char *lang;
|
||||
gboolean found;
|
||||
|
||||
lang = cc_common_language_get_current_language ();
|
||||
g_debug ("Trying to select lang '%s' in treeview", lang);
|
||||
model = gtk_tree_view_get_model (treeview);
|
||||
found = FALSE;
|
||||
cont = gtk_tree_model_get_iter_first (model, &iter);
|
||||
while (cont) {
|
||||
char *locale;
|
||||
|
||||
gtk_tree_model_get (model, &iter,
|
||||
LOCALE_COL, &locale,
|
||||
-1);
|
||||
if (locale != NULL &&
|
||||
g_str_equal (locale, lang)) {
|
||||
GtkTreeSelection *selection;
|
||||
|
||||
g_debug ("Found '%s' in treeview", locale);
|
||||
|
||||
found = TRUE;
|
||||
selection = gtk_tree_view_get_selection (treeview);
|
||||
gtk_tree_selection_select_iter (selection, &iter);
|
||||
g_free (locale);
|
||||
break;
|
||||
}
|
||||
g_free (locale);
|
||||
|
||||
cont = gtk_tree_model_iter_next (model, &iter);
|
||||
}
|
||||
g_free (lang);
|
||||
|
||||
if (found == FALSE)
|
||||
g_warning ("Could not find current language '%s' in the treeview", lang);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
user_language_has_translations (const char *locale)
|
||||
{
|
||||
char *name, *language_code, *territory_code;
|
||||
gboolean ret;
|
||||
|
||||
gnome_parse_locale (locale,
|
||||
&language_code,
|
||||
&territory_code,
|
||||
NULL, NULL);
|
||||
name = g_strdup_printf ("%s%s%s",
|
||||
language_code,
|
||||
territory_code != NULL? "_" : "",
|
||||
territory_code != NULL? territory_code : "");
|
||||
g_free (language_code);
|
||||
g_free (territory_code);
|
||||
ret = gnome_language_has_translations (name);
|
||||
g_free (name);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static char *
|
||||
get_lang_for_user_object_path (const char *path)
|
||||
{
|
||||
|
@ -517,67 +202,6 @@ get_lang_for_user_object_path (const char *path)
|
|||
return lang;
|
||||
}
|
||||
|
||||
static void
|
||||
add_other_users_language (GHashTable *ht)
|
||||
{
|
||||
GVariant *variant;
|
||||
GVariantIter *vi;
|
||||
GError *error = NULL;
|
||||
const char *str;
|
||||
GDBusProxy *proxy;
|
||||
|
||||
proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
|
||||
G_DBUS_PROXY_FLAGS_NONE,
|
||||
NULL,
|
||||
"org.freedesktop.Accounts",
|
||||
"/org/freedesktop/Accounts",
|
||||
"org.freedesktop.Accounts",
|
||||
NULL,
|
||||
NULL);
|
||||
|
||||
if (proxy == NULL)
|
||||
return;
|
||||
|
||||
variant = g_dbus_proxy_call_sync (proxy,
|
||||
"ListCachedUsers",
|
||||
NULL,
|
||||
G_DBUS_CALL_FLAGS_NONE,
|
||||
-1,
|
||||
NULL,
|
||||
&error);
|
||||
if (variant == NULL) {
|
||||
g_warning ("Failed to list existing users: %s", error->message);
|
||||
g_error_free (error);
|
||||
g_object_unref (proxy);
|
||||
return;
|
||||
}
|
||||
g_variant_get (variant, "(ao)", &vi);
|
||||
while (g_variant_iter_loop (vi, "o", &str)) {
|
||||
char *lang;
|
||||
char *name;
|
||||
char *language;
|
||||
|
||||
lang = get_lang_for_user_object_path (str);
|
||||
if (lang != NULL && *lang != '\0' &&
|
||||
cc_common_language_has_font (lang) &&
|
||||
user_language_has_translations (lang)) {
|
||||
name = gnome_normalize_locale (lang);
|
||||
if (!g_hash_table_lookup (ht, name)) {
|
||||
language = gnome_get_language_from_locale (name, NULL);
|
||||
g_hash_table_insert (ht, name, language);
|
||||
}
|
||||
else {
|
||||
g_free (name);
|
||||
}
|
||||
}
|
||||
g_free (lang);
|
||||
}
|
||||
g_variant_iter_free (vi);
|
||||
g_variant_unref (variant);
|
||||
|
||||
g_object_unref (proxy);
|
||||
}
|
||||
|
||||
/*
|
||||
* Note that @lang needs to be formatted like the locale strings
|
||||
* returned by gnome_get_all_locales().
|
||||
|
@ -646,68 +270,6 @@ cc_common_language_get_initial_languages (void)
|
|||
return ht;
|
||||
}
|
||||
|
||||
GHashTable *
|
||||
cc_common_language_get_user_languages (void)
|
||||
{
|
||||
GHashTable *ht;
|
||||
char *name;
|
||||
char *language;
|
||||
|
||||
ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
|
||||
|
||||
/* Add the languages used by other users on the system */
|
||||
add_other_users_language (ht);
|
||||
|
||||
/* Add current locale */
|
||||
name = cc_common_language_get_current_language ();
|
||||
if (g_hash_table_lookup (ht, name) == NULL) {
|
||||
language = gnome_get_language_from_locale (name, NULL);
|
||||
g_hash_table_insert (ht, name, language);
|
||||
} else {
|
||||
g_free (name);
|
||||
}
|
||||
|
||||
return ht;
|
||||
}
|
||||
|
||||
GHashTable *
|
||||
cc_common_language_get_initial_regions (const gchar *lang)
|
||||
{
|
||||
GHashTable *ht;
|
||||
char *language;
|
||||
gchar **langs;
|
||||
gint i;
|
||||
|
||||
ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
|
||||
|
||||
#if 0
|
||||
/* Add some common regions */
|
||||
g_hash_table_insert (ht, g_strdup ("en_US.utf8"), g_strdup (_("United States")));
|
||||
g_hash_table_insert (ht, g_strdup ("de_DE.utf8"), g_strdup (_("Germany")));
|
||||
g_hash_table_insert (ht, g_strdup ("fr_FR.utf8"), g_strdup (_("France")));
|
||||
g_hash_table_insert (ht, g_strdup ("es_ES.utf8"), g_strdup (_("Spain")));
|
||||
g_hash_table_insert (ht, g_strdup ("zh_CN.utf8"), g_strdup (_("China")));
|
||||
#endif
|
||||
|
||||
gnome_parse_locale (lang, &language, NULL, NULL, NULL);
|
||||
langs = gnome_get_all_locales ();
|
||||
for (i = 0; langs[i]; i++) {
|
||||
gchar *l, *s;
|
||||
gnome_parse_locale (langs[i], &l, NULL, NULL, NULL);
|
||||
if (g_strcmp0 (language, l) == 0) {
|
||||
if (!g_hash_table_lookup (ht, langs[i])) {
|
||||
s = gnome_get_country_from_locale (langs[i], NULL);
|
||||
g_hash_table_insert (ht, g_strdup (langs[i]), s);
|
||||
}
|
||||
}
|
||||
g_free (l);
|
||||
}
|
||||
g_strfreev (langs);
|
||||
g_free (language);
|
||||
|
||||
return ht;
|
||||
}
|
||||
|
||||
static void
|
||||
foreach_user_lang_cb (gpointer key,
|
||||
gpointer value,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue