static void users_loaded (UmUserManager *manager, UmUserPanelPrivate *d) { GSList *list, *l; UmUser *user; GtkWidget *dialog; if (um_user_manager_no_service (d->um)) { dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (d->main_box)), GTK_DIALOG_MODAL, GTK_MESSAGE_OTHER, GTK_BUTTONS_CLOSE, _("Failed to contact the accounts service")); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), _("Please make sure that the AccountService is installed and enabled.")); g_signal_connect_swapped (dialog, "response", G_CALLBACK (gtk_widget_destroy), dialog); gtk_widget_show (dialog); gtk_widget_set_sensitive (d->main_box, FALSE); } list = um_user_manager_list_users (d->um); g_debug ("Got %d users\n", g_slist_length (list)); g_signal_connect (d->um, "user-changed", G_CALLBACK (user_changed), d); for (l = list; l; l = l->next) { user = l->data; g_debug ("adding user %s\n", um_user_get_real_name (user)); user_added (d->um, user, d); } g_slist_free (list); g_signal_connect (d->um, "user-added", G_CALLBACK (user_added), d); g_signal_connect (d->um, "user-removed", G_CALLBACK (user_removed), d); }
static gboolean match_user (GtkTreeModel *model, gint column, const gchar *key, GtkTreeIter *iter, gpointer search_data) { UmUser *user; const gchar *name; gchar *normalized_key = NULL; gchar *normalized_name = NULL; gchar *case_normalized_key = NULL; gchar *case_normalized_name = NULL; gchar *p; gboolean result = TRUE; gint i; gtk_tree_model_get (model, iter, USER_COL, &user, -1); if (!user) { goto out; } normalized_key = g_utf8_normalize (key, -1, G_NORMALIZE_ALL); if (!normalized_key) { goto out; } case_normalized_key = g_utf8_casefold (normalized_key, -1); for (i = 0; i < 2; i++) { if (i == 0) { name = um_user_get_real_name (user); } else { name = um_user_get_user_name (user); } g_free (normalized_name); normalized_name = g_utf8_normalize (name, -1, G_NORMALIZE_ALL); if (normalized_name) { g_free (case_normalized_name); case_normalized_name = g_utf8_casefold (normalized_name, -1); p = strstr (case_normalized_name, case_normalized_key); /* poor man's \b */ if (p == case_normalized_name || (p && p[-1] == ' ')) { result = FALSE; break; } } } out: if (user) { g_object_unref (user); } g_free (normalized_key); g_free (case_normalized_key); g_free (normalized_name); g_free (case_normalized_name); return result; }
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); }
void um_photo_dialog_set_user (UmPhotoDialog *um, UmUser *user) { UmUserManager *manager; GSList *list, *l; UmUser *u; GIcon *icon; GEmblem *emblem; GList *children, *c; g_return_if_fail (um != NULL); if (um->user) { g_object_unref (um->user); um->user = NULL; } um->user = user; if (um->user) { g_object_ref (um->user); children = gtk_container_get_children (GTK_CONTAINER (um->photo_popup)); g_list_foreach (children, (GFunc) clear_tip, NULL); manager = um_user_manager_ref_default (); list = um_user_manager_list_users (manager); g_object_unref (manager); icon = g_themed_icon_new ("avatar-default"); emblem = g_emblem_new (icon); g_object_unref (icon); for (l = list; l; l = l->next) { const char *filename; u = l->data; if (u == user) continue; filename = um_user_get_icon_file (u); if (filename == NULL) continue; for (c = children; c; c = c->next) { const char *f; f = g_object_get_data (G_OBJECT (c->data), "filename"); if (f == NULL) continue; if (strcmp (f, filename) == 0) { char *tip; tip = g_strdup_printf (_("Used by %s"), um_user_get_real_name (u)); set_tip (GTK_WIDGET (c->data), tip, emblem); g_free (tip); break; } } } g_slist_free (list); g_object_unref (emblem); } }
static void show_user (UmUser *user, UmUserPanelPrivate *d) { GtkWidget *image; GtkWidget *label; GtkWidget *label2; GtkWidget *label3; GdkPixbuf *pixbuf; gchar *lang; GtkWidget *widget; GtkTreeModel *model; GtkTreeIter iter; pixbuf = um_user_render_icon (user, FALSE, 48); image = get_widget (d, "user-icon-image"); gtk_image_set_from_pixbuf (GTK_IMAGE (image), pixbuf); image = get_widget (d, "user-icon-image2"); gtk_image_set_from_pixbuf (GTK_IMAGE (image), pixbuf); g_object_unref (pixbuf); um_photo_dialog_set_user (d->photo_dialog, user); widget = get_widget (d, "full-name-entry"); cc_editable_entry_set_text (CC_EDITABLE_ENTRY (widget), um_user_get_real_name (user)); gtk_widget_set_tooltip_text (widget, um_user_get_user_name (user)); widget = get_widget (d, "account-type-combo"); um_editable_combo_set_active (UM_EDITABLE_COMBO (widget), um_user_get_account_type (user)); widget = get_widget (d, "account-password-button"); um_editable_button_set_text (UM_EDITABLE_BUTTON (widget), get_password_mode_text (user)); widget = get_widget (d, "autologin-switch"); g_signal_handlers_block_by_func (widget, autologin_changed, d); gtk_switch_set_active (GTK_SWITCH (widget), um_user_get_automatic_login (user)); g_signal_handlers_unblock_by_func (widget, autologin_changed, d); gtk_widget_set_sensitive (widget, !um_user_get_locked (user)); widget = get_widget (d, "account-language-combo"); model = um_editable_combo_get_model (UM_EDITABLE_COMBO (widget)); cc_add_user_languages (model); 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 (widget), &iter); g_free (lang); widget = get_widget (d, "account-fingerprint-notebook"); label = get_widget (d, "account-fingerprint-label"); label2 = get_widget (d, "account-fingerprint-value-label"); label3 = get_widget (d, "account-fingerprint-button-label"); if (um_user_get_uid (user) != getuid() || !set_fingerprint_label (label2, label3)) { gtk_widget_hide (label); gtk_widget_hide (widget); } else { gtk_widget_show (label); gtk_widget_show (widget); } }