123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- Description: get user icon from accountsservice instead of looking in ~/.face
- Author: Marc Deslauriers <marc.deslauriers@canonical.com>
- Forwarded: yes
- Bug: https://bugzilla.gnome.org/show_bug.cgi?id=669857
- Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/policykit-1-gnome/+bug/928249
- Index: policykit-1-gnome-0.105/src/polkitgnomeauthenticationdialog.c
- ===================================================================
- --- policykit-1-gnome-0.105.orig/src/polkitgnomeauthenticationdialog.c 2012-02-11 00:10:48.850913210 -0500
- +++ policykit-1-gnome-0.105/src/polkitgnomeauthenticationdialog.c 2012-02-11 00:22:04.462930509 -0500
- @@ -135,6 +135,102 @@
- }
- }
-
- +static GdkPixbuf *
- +get_user_icon (char *username)
- +{
- + GError *error;
- + GDBusConnection *connection;
- + GVariant *find_user_result;
- + GVariant *get_icon_result;
- + GVariant *icon_result_variant;
- + const gchar *user_path;
- + const gchar *icon_filename;
- + GdkPixbuf *pixbuf;
- +
- + error = NULL;
- + connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error);
- +
- + if (connection == NULL)
- + {
- + g_warning ("Unable to connect to system bus: %s", error->message);
- + g_error_free (error);
- + return NULL;
- + }
- +
- + find_user_result = g_dbus_connection_call_sync (connection,
- + "org.freedesktop.Accounts",
- + "/org/freedesktop/Accounts",
- + "org.freedesktop.Accounts",
- + "FindUserByName",
- + g_variant_new ("(s)",
- + username),
- + G_VARIANT_TYPE ("(o)"),
- + G_DBUS_CALL_FLAGS_NONE,
- + -1,
- + NULL,
- + &error);
- +
- + if (find_user_result == NULL)
- + {
- + g_warning ("Accounts couldn't find user: %s", error->message);
- + g_error_free (error);
- + return NULL;
- + }
- +
- + user_path = g_variant_get_string (g_variant_get_child_value (find_user_result, 0),
- + NULL);
- +
- + get_icon_result = g_dbus_connection_call_sync (connection,
- + "org.freedesktop.Accounts",
- + user_path,
- + "org.freedesktop.DBus.Properties",
- + "Get",
- + g_variant_new ("(ss)",
- + "org.freedesktop.Accounts.User",
- + "IconFile"),
- + G_VARIANT_TYPE ("(v)"),
- + G_DBUS_CALL_FLAGS_NONE,
- + -1,
- + NULL,
- + &error);
- +
- + g_variant_unref (find_user_result);
- +
- + if (get_icon_result == NULL)
- + {
- + g_warning ("Accounts couldn't find user icon: %s", error->message);
- + g_error_free (error);
- + return NULL;
- + }
- +
- + g_variant_get_child (get_icon_result, 0, "v", &icon_result_variant);
- + icon_filename = g_variant_get_string (icon_result_variant, NULL);
- +
- + if (icon_filename == NULL)
- + {
- + g_warning ("Accounts didn't return a valid filename for user icon");
- + pixbuf = NULL;
- + }
- + else
- + {
- + /* TODO: we probably shouldn't hard-code the size to 16x16 */
- + pixbuf = gdk_pixbuf_new_from_file_at_size (icon_filename,
- + 16,
- + 16,
- + &error);
- + if (pixbuf == NULL)
- + {
- + g_warning ("Couldn't open user icon: %s", error->message);
- + g_error_free (error);
- + }
- + }
- +
- + g_variant_unref (icon_result_variant);
- + g_variant_unref (get_icon_result);
- +
- + return pixbuf;
- +}
- +
- static void
- create_user_combobox (PolkitGnomeAuthenticationDialog *dialog)
- {
- @@ -197,16 +293,7 @@
- g_free (gecos);
-
- /* Load users face */
- - pixbuf = NULL;
- - if (passwd->pw_dir != NULL)
- - {
- - gchar *path;
- - path = g_strdup_printf ("%s/.face", passwd->pw_dir);
- - /* TODO: we probably shouldn't hard-code the size to 16x16 */
- - pixbuf = gdk_pixbuf_new_from_file_at_scale (path, 16, 16, TRUE, NULL);
- - g_free (path);
- - }
- -
- + pixbuf = get_user_icon (dialog->priv->users[n]);
- /* fall back to avatar-default icon */
- if (pixbuf == NULL)
- {
|