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
delete_user_response (GtkWidget         *dialog,
                      gint               response_id,
                      UmUserPanelPrivate *d)
{
    UmUser *user;
    gboolean remove_files;

    gtk_widget_destroy (dialog);

    if (response_id == GTK_RESPONSE_CANCEL) {
        return;
    }
    else if (response_id == GTK_RESPONSE_NO) {
        remove_files = TRUE;
    }
    else {
        remove_files = FALSE;
    }

    user = get_selected_user (d);

    um_user_manager_delete_user (d->um,
                                 user,
                                 remove_files,
                                 (GAsyncReadyCallback)delete_user_done,
                                 d,
                                 NULL);

    g_object_unref (user);
}
示例#3
0
static void
autologin_changed (GObject            *object,
                   GParamSpec         *pspec,
                   UmUserPanelPrivate *d)
{
        gboolean active;
        UmUser *user;

        active = gtk_switch_get_active (GTK_SWITCH (object));
        user = get_selected_user (d);

        if (active != um_user_get_automatic_login (user)) {
                um_user_set_automatic_login (user, active);
                if (um_user_get_automatic_login (user)) {
                        GSList *list;
                        GSList *l;
                        list = um_user_manager_list_users (d->um);
                        for (l = list; l != NULL; l = l->next) {
                                UmUser *u = l->data;
                                if (um_user_get_uid (u) != um_user_get_uid (user)) {
                                        um_user_set_automatic_login (user, FALSE);
                                }
                        }
                        g_slist_free (list);
                }
        }

        g_object_unref (user);
}
static void
change_password (GtkButton *button, UmUserPanelPrivate *d)
{
    UmUser *user;

    user = get_selected_user (d);

    um_password_dialog_set_user (d->password_dialog, user);
    um_password_dialog_show (d->password_dialog,
                             GTK_WINDOW (gtk_widget_get_toplevel (d->main_box)));

    g_object_unref (user);
}
static void
change_fingerprint (GtkButton *button, UmUserPanelPrivate *d)
{
    GtkWidget *label, *label2;
    UmUser *user;

    user = get_selected_user (d);

    g_assert (g_strcmp0 (g_get_user_name (), um_user_get_user_name (user)) == 0);

    label = get_widget (d, "account-fingerprint-value-label");
    label2 = get_widget (d, "account-fingerprint-button-label");
    fingerprint_button_clicked (GTK_WINDOW (gtk_widget_get_toplevel (d->main_box)), label, label2, user);

    g_object_unref (user);
}
static void
change_name_done (GtkWidget          *entry,
                  UmUserPanelPrivate *d)
{
    const gchar *text;
    UmUser *user;

    user = get_selected_user (d);

    text = cc_editable_entry_get_text (CC_EDITABLE_ENTRY (entry));
    if (g_strcmp0 (text, um_user_get_real_name (user)) != 0) {
        um_user_set_real_name (user, text);
    }

    g_object_unref (user);
}
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);
}
static void
account_type_changed (UmEditableCombo    *combo,
                      UmUserPanelPrivate *d)
{
    UmUser *user;
    GtkTreeModel *model;
    GtkTreeIter iter;
    gint account_type;

    user = get_selected_user (d);

    model = um_editable_combo_get_model (combo);
    um_editable_combo_get_active_iter (combo, &iter);
    gtk_tree_model_get (model, &iter, 1, &account_type, -1);

    if (account_type != um_user_get_account_type (user)) {
        um_user_set_account_type (user, account_type);
    }

    g_object_unref (user);
}
static void
on_permission_changed (GPermission *permission,
                       GParamSpec  *pspec,
                       gpointer     data)
{
    UmUserPanelPrivate *d = data;
    gboolean is_authorized;
    gboolean self_selected;
    UmUser *user;
    GtkWidget *widget;

    user = get_selected_user (d);
    if (!user) {
        return;
    }

    is_authorized = g_permission_get_allowed (G_PERMISSION (d->permission));
    self_selected = um_user_get_uid (user) == geteuid ();

    widget = get_widget (d, "add-user-toolbutton");
    gtk_widget_set_sensitive (widget, is_authorized);
    if (is_authorized) {
        setup_tooltip_with_embedded_icon (widget, _("Create a user account"), NULL, NULL);
    }
    else {
        gchar *names[3];
        GIcon *icon;

        names[0] = "changes-allow-symbolic";
        names[1] = "changes-allow";
        names[2] = NULL;
        icon = (GIcon *)g_themed_icon_new_from_names (names, -1);
        setup_tooltip_with_embedded_icon (widget,
                                          _("To create a user account,\nclick the * icon first"),
                                          "*",
                                          icon);
        g_object_unref (icon);
    }

    widget = get_widget (d, "remove-user-toolbutton");
    gtk_widget_set_sensitive (widget, is_authorized && !self_selected);
    if (is_authorized) {
        setup_tooltip_with_embedded_icon (widget, _("Delete the selected user account"), NULL, NULL);
    }
    else {
        gchar *names[3];
        GIcon *icon;

        names[0] = "changes-allow-symbolic";
        names[1] = "changes-allow";
        names[2] = NULL;
        icon = (GIcon *)g_themed_icon_new_from_names (names, -1);

        setup_tooltip_with_embedded_icon (widget,
                                          _("To delete the selected user account,\nclick the * icon first"),
                                          "*",
                                          icon);
        g_object_unref (icon);
    }

    if (!um_user_is_local_account (user)) {
        um_editable_combo_set_editable (UM_EDITABLE_COMBO (get_widget (d, "account-type-combo")), FALSE);
        remove_unlock_tooltip (get_widget (d, "account-type-combo"));

    } else if (is_authorized && um_user_is_local_account (user)) {
        um_editable_combo_set_editable (UM_EDITABLE_COMBO (get_widget (d, "account-type-combo")), TRUE);
        remove_unlock_tooltip (get_widget (d, "account-type-combo"));
    }
    else {
        um_editable_combo_set_editable (UM_EDITABLE_COMBO (get_widget (d, "account-type-combo")), FALSE);
        add_unlock_tooltip (get_widget (d, "account-type-combo"));
    }

    /* The full name entry: insensitive if remote or not authorized and not self */
    widget = get_widget (d, "full-name-entry");
    if (!um_user_is_local_account (user)) {
        cc_editable_entry_set_editable (CC_EDITABLE_ENTRY (widget), FALSE);
        remove_unlock_tooltip (widget);

    } else if (is_authorized || self_selected) {
        cc_editable_entry_set_editable (CC_EDITABLE_ENTRY (widget), TRUE);
        remove_unlock_tooltip (widget);

    } else {
        cc_editable_entry_set_editable (CC_EDITABLE_ENTRY (widget), FALSE);
        add_unlock_tooltip (widget);
    }

    if (is_authorized || self_selected) {
        gtk_widget_show (get_widget (d, "user-icon-button"));
        gtk_widget_hide (get_widget (d, "user-icon-nonbutton"));

        um_editable_combo_set_editable (UM_EDITABLE_COMBO (get_widget (d, "account-language-combo")), TRUE);
        remove_unlock_tooltip (get_widget (d, "account-language-combo"));

        um_editable_button_set_editable (UM_EDITABLE_BUTTON (get_widget (d, "account-password-button")), TRUE);
        remove_unlock_tooltip (get_widget (d, "account-password-button"));

        gtk_notebook_set_current_page (GTK_NOTEBOOK (get_widget (d, "account-fingerprint-notebook")), 1);
    }
    else {
        gtk_widget_hide (get_widget (d, "user-icon-button"));
        gtk_widget_show (get_widget (d, "user-icon-nonbutton"));

        um_editable_combo_set_editable (UM_EDITABLE_COMBO (get_widget (d, "account-language-combo")), FALSE);
        add_unlock_tooltip (get_widget (d, "account-language-combo"));

        um_editable_button_set_editable (UM_EDITABLE_BUTTON (get_widget (d, "account-password-button")), FALSE);
        add_unlock_tooltip (get_widget (d, "account-password-button"));

        gtk_notebook_set_current_page (GTK_NOTEBOOK (get_widget (d, "account-fingerprint-notebook")), 0);
    }

    um_password_dialog_set_privileged (d->password_dialog, is_authorized);

    g_object_unref (user);
}
static void
delete_user (GtkButton *button, UmUserPanelPrivate *d)
{
    UmUser *user;
    GtkWidget *dialog;

    user = get_selected_user (d);
    if (user == NULL) {
        return;
    }
    else if (um_user_get_uid (user) == getuid ()) {
        dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (d->main_box)),
                                         0,
                                         GTK_MESSAGE_INFO,
                                         GTK_BUTTONS_CLOSE,
                                         _("You cannot delete your own account."));
        g_signal_connect (dialog, "response",
                          G_CALLBACK (gtk_widget_destroy), NULL);
    }
    else if (um_user_is_logged_in (user)) {
        dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (d->main_box)),
                                         0,
                                         GTK_MESSAGE_INFO,
                                         GTK_BUTTONS_CLOSE,
                                         _("%s is still logged in"),
                                         um_user_get_real_name (user));

        gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
                _("Deleting a user while they are logged in can leave the system in an inconsistent state."));
        g_signal_connect (dialog, "response",
                          G_CALLBACK (gtk_widget_destroy), NULL);
    }
    else {
        dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (d->main_box)),
                                         0,
                                         GTK_MESSAGE_QUESTION,
                                         GTK_BUTTONS_NONE,
                                         _("Do you want to keep %s's files?"),
                                         um_user_get_real_name (user));

        gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
                _("It is possible to keep the home directory, mail spool and temporary files around when deleting a user account."));

        gtk_dialog_add_buttons (GTK_DIALOG (dialog),
                                _("_Delete Files"), GTK_RESPONSE_NO,
                                _("_Keep Files"), GTK_RESPONSE_YES,
                                _("_Cancel"), GTK_RESPONSE_CANCEL,
                                NULL);

        gtk_window_set_icon_name (GTK_WINDOW (dialog), "system-users");

        g_signal_connect (dialog, "response",
                          G_CALLBACK (delete_user_response), d);
    }

    g_signal_connect (dialog, "close",
                      G_CALLBACK (gtk_widget_destroy), NULL);

    gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);

    gtk_window_present (GTK_WINDOW (dialog));

    g_object_unref (user);
}