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); }
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); }