diff --git a/src/calls-best-match.c b/src/calls-best-match.c index 11bb6da..a8a02b3 100644 --- a/src/calls-best-match.c +++ b/src/calls-best-match.c @@ -282,7 +282,7 @@ calls_best_match_class_init (CallsBestMatchClass *klass) g_param_spec_object ("avatar", "Avatar", "The avatar of the best match", - G_TYPE_LOADABLE_ICON, + GDK_TYPE_TEXTURE, G_PARAM_READABLE | G_PARAM_EXPLICIT_NOTIFY); props[PROP_PRIMARY_INFO] = @@ -452,15 +452,32 @@ calls_best_match_get_name (CallsBestMatch *self) * * Returns: (nullable): The avatar of a matched contact or %NULL when there's no match. */ -GLoadableIcon * +GdkTexture * calls_best_match_get_avatar (CallsBestMatch *self) { + GdkTexture *output; + GLoadableIcon *loadable_icon; + g_autoptr (GError) error = NULL; + g_return_val_if_fail (CALLS_IS_BEST_MATCH (self), NULL); - if (self->matched_individual) - return folks_avatar_details_get_avatar (FOLKS_AVATAR_DETAILS (self->matched_individual)); - else + if (!self->matched_individual) return NULL; + + loadable_icon = folks_avatar_details_get_avatar (FOLKS_AVATAR_DETAILS (self->matched_individual)); + + if (!G_IS_FILE_ICON (loadable_icon)) { + return NULL; + } + + output = gdk_texture_new_from_file (g_file_icon_get_file (G_FILE_ICON (loadable_icon)), &error); + + if (error != NULL) { + g_print ("Failed to read avatar icon file: %s", error->message); + return NULL; + } + + return output; } /** diff --git a/src/calls-best-match.h b/src/calls-best-match.h index 562bf3b..8a9aec2 100644 --- a/src/calls-best-match.h +++ b/src/calls-best-match.h @@ -25,6 +25,7 @@ #ifndef CALLS_BEST_MATCH_H__ #define CALLS_BEST_MATCH_H__ +#include #include G_BEGIN_DECLS @@ -40,7 +41,7 @@ const char *calls_best_match_get_phone_number (CallsBestMatch *self); void calls_best_match_set_phone_number (CallsBestMatch *self, const char *phone_number); const char *calls_best_match_get_name (CallsBestMatch *self); -GLoadableIcon *calls_best_match_get_avatar (CallsBestMatch *self); +GdkTexture *calls_best_match_get_avatar (CallsBestMatch *self); const char *calls_best_match_get_primary_info (CallsBestMatch *self); const char *calls_best_match_get_secondary_info (CallsBestMatch *self); diff --git a/src/calls-call-record-row.c b/src/calls-call-record-row.c index edbf0e1..0bb8c81 100644 --- a/src/calls-call-record-row.c +++ b/src/calls-call-record-row.c @@ -357,7 +357,7 @@ setup_contact (CallsCallRecordRow *self) G_BINDING_SYNC_CREATE); g_object_bind_property (self->contact, "avatar", - self->avatar, "loadable-icon", + self->avatar, "custom-image", G_BINDING_SYNC_CREATE); } diff --git a/src/calls-ui-call-data.c b/src/calls-ui-call-data.c index 4f17b85..1eae48e 100644 --- a/src/calls-ui-call-data.c +++ b/src/calls-ui-call-data.c @@ -138,14 +138,14 @@ calls_ui_call_data_get_can_dtmf (CuiCall *call_data) } -static GLoadableIcon * +static GdkPaintable * calls_ui_call_data_get_avatar_icon (CuiCall *call_data) { CallsUiCallData *self = (CallsUiCallData *) call_data; g_return_val_if_fail (CALLS_UI_CALL_DATA (self), NULL); - return calls_best_match_get_avatar (self->best_match); + return GDK_PAINTABLE (calls_best_match_get_avatar (self->best_match)); }