static void
language_response (GtkDialog         *dialog,
                   gint               response_id,
                   UmUserPanelPrivate *d)
{
    GtkWidget *combo;
    UmUser *user;
    gchar *lang;
    GtkTreeModel *model;
    GtkTreeIter iter;

    user = get_selected_user (d);

    combo = get_widget (d, "account-language-combo");
    model = um_editable_combo_get_model (UM_EDITABLE_COMBO (combo));

    if (response_id == GTK_RESPONSE_OK) {
        lang = cc_language_chooser_get_language (GTK_WIDGET (dialog));
        um_user_set_language (user, lang);
    }
    else {
        lang = g_strdup (um_user_get_language (user));
        if (!lang)
            lang = cc_common_language_get_current_language ();
    }
    cc_common_language_get_iter_for_language (model, lang, &iter);
    um_editable_combo_set_active_iter (UM_EDITABLE_COMBO (combo), &iter);
    g_free (lang);

    gtk_widget_hide (GTK_WIDGET (dialog));
    gtk_widget_set_sensitive (combo, TRUE);

    g_object_unref (user);
}
static void
accept_language_dialog (GtkButton        *button,
                        UmLanguageDialog *um)
{
        um_user_set_language (um->user, um->language);

        gtk_widget_hide (um->dialog);
        um_language_dialog_set_user (um, NULL);
}
static void
cancel_language_dialog (GtkButton        *button,
                        UmLanguageDialog *um)
{
        if (um->force_setting != FALSE)
                um_user_set_language (um->user, um->language);
        gtk_widget_hide (um->dialog);
        um_language_dialog_set_user (um, NULL);

}
static void
language_changed (UmEditableCombo    *combo,
                  UmUserPanelPrivate *d)
{
    GtkTreeModel *model;
    GtkTreeIter iter;
    gchar *lang;
    UmUser *user;

    if (!um_editable_combo_get_active_iter (combo, &iter))
        return;

    user = get_selected_user (d);

    model = um_editable_combo_get_model (combo);

    gtk_tree_model_get (model, &iter, 0, &lang, -1);
    if (lang) {
        if (g_strcmp0 (lang, um_user_get_language (user)) != 0) {
            um_user_set_language (user, lang);
        }
        g_free (lang);
        goto out;
    }

    if (d->language_chooser) {
        cc_language_chooser_clear_filter (d->language_chooser);
        gtk_window_present (GTK_WINDOW (d->language_chooser));
        gtk_widget_set_sensitive (GTK_WIDGET (combo), FALSE);
        goto out;
    }

    d->language_chooser = cc_language_chooser_new (gtk_widget_get_toplevel (d->main_box), FALSE);

    g_signal_connect (d->language_chooser, "response",
                      G_CALLBACK (language_response), d);
    g_signal_connect (d->language_chooser, "delete-event",
                      G_CALLBACK (gtk_widget_hide_on_delete), NULL);

    gdk_window_set_cursor (gtk_widget_get_window (gtk_widget_get_toplevel (d->main_box)), NULL);
    gtk_window_present (GTK_WINDOW (d->language_chooser));
    gtk_widget_set_sensitive (GTK_WIDGET (combo), FALSE);

out:
    g_object_unref (user);
}