diff --git a/src/calls-dbus-manager.c b/src/calls-dbus-manager.c
index 46b9915..ce8cf2e 100644
--- a/src/calls-dbus-manager.c
+++ b/src/calls-dbus-manager.c
@@ -100,6 +100,29 @@ on_handle_call_hangup (CallsDBusCallsCall *skeleton,
return TRUE;
}
+static gboolean
+(avatar_loadable_icon_transform_to_image_path) (GBinding *binding,
+ const GValue *from_value,
+ GValue *to_value,
+ gpointer user_data)
+{
+ GLoadableIcon *icon = G_LOADABLE_ICON (g_value_get_object(from_value));
+
+ if (icon == NULL) {
+ g_value_set_string (to_value, NULL);
+ return TRUE;
+ }
+
+ if (G_IS_FILE_ICON (icon)) {
+ GFile *file = g_file_icon_get_file (G_FILE_ICON (icon));
+
+ g_value_take_string (to_value, g_file_get_path (file));
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
static void
call_added_cb (CallsDBusManager *self, CallsCall *call)
@@ -133,7 +156,11 @@ call_added_cb (CallsDBusManager *self, CallsCall *call)
match = calls_call_get_contact (call);
if (calls_best_match_has_individual (match)) {
g_object_bind_property (match, "name", iface, "display-name", G_BINDING_SYNC_CREATE);
- /* TODO: avatar once https://source.puri.sm/Librem5/calls/-/issues/161 is fixed */
+ g_object_bind_property_full (match, "avatar",
+ iface, "image-path",
+ G_BINDING_SYNC_CREATE,
+ avatar_loadable_icon_transform_to_image_path,
+ NULL, NULL, NULL);
}
g_object_set_data_full (G_OBJECT (object), "contact", g_steal_pointer (&match), g_object_unref);
diff --git a/src/dbus/org.gnome.Calls.Call.xml b/src/dbus/org.gnome.Calls.Call.xml
index 57fc77f..9fac6f6 100644
--- a/src/dbus/org.gnome.Calls.Call.xml
+++ b/src/dbus/org.gnome.Calls.Call.xml
@@ -40,6 +40,13 @@
+
+
+
+ The path to an image to display for this call.
+
+
+