static void user_loaded (GObject *object, GParamSpec *pspec, gpointer user_data) { gchar *new_locale_id = user_data; act_user_set_language (ACT_USER (object), new_locale_id); g_free (new_locale_id); }
static void on_local_user_cached (GtkWidget *page_local, ActUser *user, char *password, GisAccountPage *page) { const gchar *language; language = gis_driver_get_user_language (GIS_PAGE (page)->driver); if (language) act_user_set_language (user, language); gis_driver_set_user_permissions (GIS_PAGE (page)->driver, user, password); }
static void language_changed (CcLanguageChooser *chooser, GParamSpec *pspec, GisLanguagePage *page) { GisLanguagePagePrivate *priv = gis_language_page_get_instance_private (page); ActUser *user; GisDriver *driver; if (priv->selection_done_source > 0) { g_source_remove (priv->selection_done_source); priv->selection_done_source = 0; } priv->new_locale_id = cc_language_chooser_get_language (chooser); driver = GIS_PAGE (page)->driver; setlocale (LC_MESSAGES, priv->new_locale_id); gis_driver_locale_changed (driver); if (gis_driver_get_mode (driver) == GIS_DRIVER_MODE_NEW_USER) { if (g_permission_get_allowed (priv->permission)) { set_localed_locale (page); } else if (g_permission_get_can_acquire (priv->permission)) { g_permission_acquire_async (priv->permission, NULL, change_locale_permission_acquired, page); } } user = act_user_manager_get_user (act_user_manager_get_default (), g_get_user_name ()); if (act_user_is_loaded (user)) act_user_set_language (user, priv->new_locale_id); else g_signal_connect (user, "notify::is-loaded", G_CALLBACK (user_loaded), g_strdup (priv->new_locale_id)); gis_driver_set_user_language (driver, priv->new_locale_id); priv->selection_done_source = g_timeout_add (500, _selection_done, (gpointer)driver); }