Skip to content
Permalink
Browse files

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 <mate@raveit.de>.
  • Loading branch information...
yetist authored and raveit65 committed Jul 3, 2018
1 parent 4de92a5 commit 28c5512f3e32b6f795f80376e2f1832b6f884a79
Showing with 85 additions and 6 deletions.
  1. +8 −0 capplets/about-me/Makefile.am
  2. +58 −6 capplets/about-me/mate-about-me.c
  3. +19 −0 configure.ac
@@ -28,6 +28,9 @@ marshal.c: fprintd-marshal.list
bin_PROGRAMS = mate-about-me

mate_about_me_LDADD = $(MATECC_CAPPLETS_LIBS)
if HAVE_ACCOUNTSSERVICE
mate_about_me_LDADD += $(ACCOUNTSSERVICE_LIBS)
endif
mate_about_me_LDFLAGS = -export-dynamic

@INTLTOOL_DESKTOP_RULE@
@@ -47,6 +50,11 @@ AM_CPPFLAGS = \
-DMATECC_PIXMAP_DIR="\"$(pkgdatadir)/pixmaps\"" \
-DMATELOCALEDIR="\"$(datadir)/locale\""

if HAVE_ACCOUNTSSERVICE
AM_CPPFLAGS += \
$(ACCOUNTSSERVICE_CFLAGS)
endif

CLEANFILES = $(MATECC_CAPPLETS_CLEANFILES) $(desktop_DATA) $(MARSHALFILES)
EXTRA_DIST = $(ui_files) fprintd-marshal.list

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

@@ -171,6 +171,24 @@ AC_SUBST(WARN_CFLAGS)

AM_CONDITIONAL(HAVE_LIBMATESLAB, [test $have_libmateslab = yes])

dnl
dnl Check dependencies of accountsservice
dnl

ACCOUNTSSERVICE_REQUIRED=0.6.21

AC_ARG_WITH([accountsservice], AC_HELP_STRING([--without-accountsservice], [disable accountsservice support]))
have_accountsservice=no
if test x$with_accountsservice != xno; then
PKG_CHECK_MODULES(ACCOUNTSSERVICE, accountsservice >= $ACCOUNTSSERVICE_REQUIRED, have_accountsservice=yes, have_accountsservice=no)
fi
if test "x$have_accountsservice" = "xyes"; then
AC_DEFINE(HAVE_ACCOUNTSSERVICE, 1, [ACCOUNTSSERVICE Support.])
fi

AM_CONDITIONAL([HAVE_ACCOUNTSSERVICE], [test "x$have_accountsservice" = xyes])


PKG_CHECK_MODULES(FONT_CAPPLET, $COMMON_MODULES pango)
PKG_CHECK_MODULES(FONT_VIEWER, $COMMON_MODULES fontconfig freetype2 mate-desktop-2.0)

@@ -311,4 +329,5 @@ echo "

Appindicator: ${enable_appindicator}
Libmate-slab: ${have_libmateslab}
Accountsservice: ${have_accountsservice}
"

0 comments on commit 28c5512

Please sign in to comment.
You can’t perform that action at this time.