From 55f148cb0e09009bc0bfc2e12b58fa3577bc900c Mon Sep 17 00:00:00 2001 From: Ondrej Holy Date: Mon, 9 Apr 2018 09:07:32 +0200 Subject: [PATCH 1/3] account: Use GIO API for face images handling Users panel in gnome-control-center switched to GIO API for face images handling. Let's do the similar changes here also as a preparation for filtering out legacy face images. https://bugzilla.gnome.org/show_bug.cgi?id=795086 --- .../pages/account/um-photo-dialog.c | 45 ++++++++++--------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/gnome-initial-setup/pages/account/um-photo-dialog.c b/gnome-initial-setup/pages/account/um-photo-dialog.c index b63ed78..8b23974 100644 --- a/gnome-initial-setup/pages/account/um-photo-dialog.c +++ b/gnome-initial-setup/pages/account/um-photo-dialog.c @@ -145,15 +145,12 @@ stock_icon_selected (GtkMenuItem *menuitem, static GtkWidget * menu_item_for_filename (UmPhotoDialog *um, - const char *filename) + GFile *file) { GtkWidget *image, *menuitem; - GFile *file; GIcon *icon; - file = g_file_new_for_path (filename); icon = g_file_icon_new (file); - g_object_unref (file); image = gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_DIALOG); g_object_unref (icon); @@ -161,8 +158,9 @@ menu_item_for_filename (UmPhotoDialog *um, gtk_container_add (GTK_CONTAINER (menuitem), image); gtk_widget_show_all (menuitem); - g_object_set_data_full (G_OBJECT (menuitem), "filename", - g_strdup (filename), (GDestroyNotify) g_free); + g_object_set_data_full (G_OBJECT (menuitem), + "filename", g_file_get_path (file), + (GDestroyNotify) g_free); g_signal_connect (G_OBJECT (menuitem), "activate", G_CALLBACK (stock_icon_selected), um); @@ -176,8 +174,6 @@ setup_photo_popup (UmPhotoDialog *um) guint x, y; const gchar * const * dirs; guint i; - GDir *dir; - const char *face; gboolean none_item_shown; gboolean added_faces; @@ -189,25 +185,32 @@ setup_photo_popup (UmPhotoDialog *um) dirs = g_get_system_data_dirs (); for (i = 0; dirs[i] != NULL; i++) { - char *path; + g_autoptr(GFileEnumerator) enumerator = NULL; + g_autoptr(GFile) dir = NULL; + g_autofree gchar *path = NULL; + gpointer infoptr; path = g_build_filename (dirs[i], "pixmaps", "faces", NULL); - dir = g_dir_open (path, 0, NULL); - if (dir == NULL) { - g_free (path); + dir = g_file_new_for_path (path); + + enumerator = g_file_enumerate_children (dir, + G_FILE_ATTRIBUTE_STANDARD_NAME "," + G_FILE_ATTRIBUTE_STANDARD_TYPE "," + G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK "," + G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET, + G_FILE_QUERY_INFO_NONE, + NULL, NULL); + if (enumerator == NULL) continue; - } - while ((face = g_dir_read_name (dir)) != NULL) { - char *filename; + while ((infoptr = g_file_enumerator_next_file (enumerator, NULL, NULL)) != NULL) { + g_autoptr (GFileInfo) info = infoptr; + g_autoptr (GFile) face_file = NULL; added_faces = TRUE; - filename = g_build_filename (path, face, NULL); - menuitem = menu_item_for_filename (um, filename); - g_free (filename); - if (menuitem == NULL) - continue; + face_file = g_file_get_child (dir, g_file_info_get_name (info)); + menuitem = menu_item_for_filename (um, face_file); gtk_menu_attach (GTK_MENU (menu), GTK_WIDGET (menuitem), x, x + 1, y, y + 1); @@ -219,8 +222,6 @@ setup_photo_popup (UmPhotoDialog *um) x = 0; } } - g_dir_close (dir); - g_free (path); if (added_faces) break; -- 2.33.1 From 0441acd191fb89b40d30484e2966ddd48a196f12 Mon Sep 17 00:00:00 2001 From: Ondrej Holy Date: Mon, 9 Apr 2018 09:10:45 +0200 Subject: [PATCH 2/3] account: Do not show legacy face images Legacy face images should not be shown in avatar chooser, so let's filter all symlinks to the legacy files out. https://bugzilla.gnome.org/show_bug.cgi?id=795086 --- gnome-initial-setup/pages/account/um-photo-dialog.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/gnome-initial-setup/pages/account/um-photo-dialog.c b/gnome-initial-setup/pages/account/um-photo-dialog.c index 8b23974..0769209 100644 --- a/gnome-initial-setup/pages/account/um-photo-dialog.c +++ b/gnome-initial-setup/pages/account/um-photo-dialog.c @@ -170,6 +170,8 @@ menu_item_for_filename (UmPhotoDialog *um, static void setup_photo_popup (UmPhotoDialog *um) { + GFileType type; + const gchar *target; GtkWidget *menu, *menuitem, *image; guint x, y; const gchar * const * dirs; @@ -209,6 +211,14 @@ setup_photo_popup (UmPhotoDialog *um) added_faces = TRUE; + type = g_file_info_get_file_type (info); + if (type != G_FILE_TYPE_REGULAR && type != G_FILE_TYPE_SYMBOLIC_LINK) + continue; + + target = g_file_info_get_symlink_target (info); + if (target != NULL && g_str_has_prefix (target , "legacy/")) + continue; + face_file = g_file_get_child (dir, g_file_info_get_name (info)); menuitem = menu_item_for_filename (um, face_file); -- 2.33.1 From 6a7fcaf82b3dc913313f328501ec085b5bfb5d0f Mon Sep 17 00:00:00 2001 From: Ondrej Holy Date: Mon, 9 Apr 2018 09:37:46 +0200 Subject: [PATCH 3/3] account: Make face images bigger The new set of face images doesn't contain the same number of images, so let's change parameters of avatar chooser in the same way as it was done in gnome-control-center. Now we present 72x72 faces in a 4x4 grid. https://bugzilla.gnome.org/show_bug.cgi?id=795086 --- gnome-initial-setup/pages/account/um-photo-dialog.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gnome-initial-setup/pages/account/um-photo-dialog.c b/gnome-initial-setup/pages/account/um-photo-dialog.c index 0769209..ac89d30 100644 --- a/gnome-initial-setup/pages/account/um-photo-dialog.c +++ b/gnome-initial-setup/pages/account/um-photo-dialog.c @@ -37,7 +37,8 @@ #include "um-photo-dialog.h" #include "um-utils.h" -#define ROW_SPAN 6 +#define ROW_SPAN 5 +#define AVATAR_PIXEL_SIZE 72 struct _UmPhotoDialog { GtkWidget *photo_popup; @@ -152,6 +153,7 @@ menu_item_for_filename (UmPhotoDialog *um, icon = g_file_icon_new (file); image = gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_DIALOG); + gtk_image_set_pixel_size (GTK_IMAGE (image), AVATAR_PIXEL_SIZE); g_object_unref (icon); menuitem = gtk_menu_item_new (); -- 2.33.1