common: Split out getting the lang for a user

Into get_lang_for_user(), so it can be reused internally.
This commit is contained in:
Bastien Nocera 2012-11-23 18:42:32 +01:00
parent 4099b547a7
commit 781bda8e12

View file

@ -440,6 +440,36 @@ cc_common_language_select_current_language (GtkTreeView *treeview)
g_warning ("Could not find current language '%s' in the treeview", lang); g_warning ("Could not find current language '%s' in the treeview", lang);
} }
static char *
get_lang_for_user_object_path (const char *path)
{
GError *error = NULL;
GDBusProxy *user;
GVariant *props;
char *lang;
user = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
G_DBUS_PROXY_FLAGS_NONE,
NULL,
"org.freedesktop.Accounts",
path,
"org.freedesktop.Accounts.User",
NULL,
&error);
if (user == NULL) {
g_warning ("Failed to get proxy for user '%s': %s",
path, error->message);
g_error_free (error);
return NULL;
}
props = g_dbus_proxy_get_cached_property (user, "Language");
lang = g_variant_dup_string (props, NULL);
g_variant_unref (props);
g_object_unref (user);
return lang;
}
static void static void
add_other_users_language (GHashTable *ht) add_other_users_language (GHashTable *ht)
{ {
@ -476,29 +506,11 @@ add_other_users_language (GHashTable *ht)
} }
g_variant_get (variant, "(ao)", &vi); g_variant_get (variant, "(ao)", &vi);
while (g_variant_iter_loop (vi, "o", &str)) { while (g_variant_iter_loop (vi, "o", &str)) {
GDBusProxy *user; char *lang;
GVariant *props;
const char *lang;
char *name; char *name;
char *language; char *language;
user = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, lang = get_lang_for_user_object_path (str);
G_DBUS_PROXY_FLAGS_NONE,
NULL,
"org.freedesktop.Accounts",
str,
"org.freedesktop.Accounts.User",
NULL,
&error);
if (user == NULL) {
g_warning ("Failed to get proxy for user '%s': %s",
str, error->message);
g_error_free (error);
error = NULL;
continue;
}
props = g_dbus_proxy_get_cached_property (user, "Language");
lang = g_variant_get_string (props, NULL);
if (lang != NULL && *lang != '\0' && if (lang != NULL && *lang != '\0' &&
cc_common_language_has_font (lang) && cc_common_language_has_font (lang) &&
gdm_language_has_translations (lang)) { gdm_language_has_translations (lang)) {
@ -511,8 +523,7 @@ add_other_users_language (GHashTable *ht)
g_free (name); g_free (name);
} }
} }
g_variant_unref (props); g_free (lang);
g_object_unref (user);
} }
g_variant_iter_free (vi); g_variant_iter_free (vi);
g_variant_unref (variant); g_variant_unref (variant);