summaryrefslogtreecommitdiff
path: root/capplets/about-me/mate-about-me.c
diff options
context:
space:
mode:
authoryetist <[email protected]>2018-07-03 16:47:21 +0800
committerraveit65 <[email protected]>2018-08-30 11:59:55 +0200
commit28c5512f3e32b6f795f80376e2f1832b6f884a79 (patch)
tree8e6a53a7c59f7cb6a133b159860d8d1a9d10244f /capplets/about-me/mate-about-me.c
parent4de92a5fd5b8a43285e572a981ec9949887c196a (diff)
downloadmate-control-center-28c5512f3e32b6f795f80376e2f1832b6f884a79.tar.bz2
mate-control-center-28c5512f3e32b6f795f80376e2f1832b6f884a79.tar.xz
get/set user face icon use accounts service
- If get icon from AccountsService failed, fallback to use ~/.face file. - If not setup user icon file, use "avatar-default" icon as default image to show. - Check dependencies of accountsservice, default is enable when accountsservice dependency exists. Added by raveit65 <[email protected]>.
Diffstat (limited to 'capplets/about-me/mate-about-me.c')
-rw-r--r--capplets/about-me/mate-about-me.c64
1 files changed, 58 insertions, 6 deletions
diff --git a/capplets/about-me/mate-about-me.c b/capplets/about-me/mate-about-me.c
index e9036acf..d6f4b0b4 100644
--- a/capplets/about-me/mate-about-me.c
+++ b/capplets/about-me/mate-about-me.c
@@ -28,6 +28,10 @@
#include <unistd.h>
#include <dbus/dbus-glib-bindings.h>
+#if HAVE_ACCOUNTSSERVICE
+#include <act/act.h>
+#endif
+
#define MATE_DESKTOP_USE_UNSTABLE_API
#include <libmate-desktop/mate-desktop-thumbnail.h>
@@ -48,6 +52,9 @@ typedef struct {
GtkWidget *disable_fingerprint_button;
GtkWidget *image_chooser;
GdkPixbuf *image;
+#if HAVE_ACCOUNTSSERVICE
+ ActUser *user;
+#endif
GdkScreen *screen;
GtkIconTheme *theme;
@@ -84,10 +91,20 @@ about_me_destroy (void)
static void
about_me_load_photo (MateAboutMe *me)
{
- gchar *file;
+ gchar *file = NULL;
GError *error = NULL;
+#if HAVE_ACCOUNTSSERVICE
+ const gchar *act_file;
+
+ act_file = act_user_get_icon_file (me->user);
+ if ( act_file != NULL && strlen (act_file) > 1) {
+ file = g_strdup (act_file);
+ }
+#endif
+ if (file == NULL) {
+ file = g_build_filename (g_get_home_dir (), ".face", NULL);
+ }
- file = g_build_filename (g_get_home_dir (), ".face", NULL);
me->image = gdk_pixbuf_new_from_file(file, &error);
if (me->image != NULL) {
@@ -96,9 +113,9 @@ about_me_load_photo (MateAboutMe *me)
} else {
me->have_image = FALSE;
g_warning ("Could not load %s: %s", file, error->message);
+ e_image_chooser_set_from_file (E_IMAGE_CHOOSER (me->image_chooser), me->person);
g_error_free (error);
}
-
g_free (file);
}
@@ -172,6 +189,9 @@ about_me_update_photo (MateAboutMe *me)
file = g_build_filename (g_get_home_dir (), ".face", NULL);
if (g_file_set_contents (file, (gchar *)data, length, &error) == TRUE) {
g_chmod (file, 0644);
+#if HAVE_ACCOUNTSSERVICE
+ act_user_set_icon_file (me->user, file);
+#endif
} else {
g_warning ("Could not create %s: %s", file, error->message);
g_error_free (error);
@@ -186,6 +206,9 @@ about_me_update_photo (MateAboutMe *me)
g_unlink (file);
g_free (file);
+#if HAVE_ACCOUNTSSERVICE
+ act_user_set_icon_file (me->user, "");
+#endif
}
}
@@ -341,15 +364,19 @@ about_me_icon_theme_changed (GtkWindow *window,
{
GtkIconInfo *icon;
- icon = gtk_icon_theme_lookup_icon (me->theme, "stock_person", 80, 0);
+ icon = gtk_icon_theme_lookup_icon (me->theme, "avatar-default", 80, 0);
if (icon != NULL) {
g_free (me->person);
me->person = g_strdup (gtk_icon_info_get_filename (icon));
g_object_unref (icon);
}
- if (me->have_image)
+ if (me->have_image) {
+#if HAVE_ACCOUNTSSERVICE
+ act_user_set_icon_file (me->user, me->person);
+#endif
e_image_chooser_set_from_file (E_IMAGE_CHOOSER (me->image_chooser), me->person);
+ }
}
static void
@@ -380,6 +407,18 @@ about_me_fingerprint_button_clicked_cb (GtkWidget *button, MateAboutMe *me)
me->disable_fingerprint_button);
}
+#if HAVE_ACCOUNTSSERVICE
+static void on_user_is_loaded_changed (ActUser *user, GParamSpec *pspec, MateAboutMe* me)
+{
+ if (act_user_is_loaded (user)) {
+ about_me_load_photo (me);
+ g_signal_handlers_disconnect_by_func (G_OBJECT (user),
+ G_CALLBACK (on_user_is_loaded_changed),
+ me);
+ }
+}
+#endif
+
static gint
about_me_setup_dialog (void)
{
@@ -388,6 +427,10 @@ about_me_setup_dialog (void)
GtkIconInfo *icon;
GtkBuilder *dialog;
gchar *str;
+#if HAVE_ACCOUNTSSERVICE
+ ActUserManager* manager;
+ gboolean loaded;
+#endif
me = g_new0 (MateAboutMe, 1);
me->image = NULL;
@@ -417,7 +460,7 @@ about_me_setup_dialog (void)
me->screen = gtk_window_get_screen (GTK_WINDOW (main_dialog));
me->theme = gtk_icon_theme_get_for_screen (me->screen);
- icon = gtk_icon_theme_lookup_icon (me->theme, "stock_person", 80, 0);
+ icon = gtk_icon_theme_lookup_icon (me->theme, "avatar-default", 80, 0);
if (icon != NULL) {
me->person = g_strdup (gtk_icon_info_get_filename (icon));
g_object_unref (icon);
@@ -431,6 +474,15 @@ about_me_setup_dialog (void)
me->login = g_strdup (g_get_user_name ());
me->username = g_strdup (g_get_real_name ());
+#if HAVE_ACCOUNTSSERVICE
+ manager = act_user_manager_get_default ();
+ me->user = act_user_manager_get_user (manager, me->login);
+ g_object_get (manager, "is-loaded", &loaded, NULL);
+ if (!loaded) {
+ g_signal_connect (me->user, "notify::is-loaded", G_CALLBACK (on_user_is_loaded_changed), me);
+ }
+#endif
+
/* Contact Tab */
about_me_load_photo (me);