libpurple/purplecontactinfo.c

changeset 43302
e7b0bbfec5d5
parent 43301
0e43dc8462e8
equal deleted inserted replaced
43301:0e43dc8462e8 43302:e7b0bbfec5d5
63 PROP_EMAIL, 63 PROP_EMAIL,
64 PROP_PHONE_NUMBER, 64 PROP_PHONE_NUMBER,
65 PROP_TIME_ZONE, 65 PROP_TIME_ZONE,
66 PROP_NOTE, 66 PROP_NOTE,
67 PROP_AVATAR, 67 PROP_AVATAR,
68 PROP_AVATAR_FOR_DISPLAY,
68 PROP_PRESENCE, 69 PROP_PRESENCE,
69 PROP_TAGS, 70 PROP_TAGS,
70 PROP_PERSON, 71 PROP_PERSON,
71 PROP_PERMISSION, 72 PROP_PERMISSION,
72 PROP_SID, 73 PROP_SID,
198 g_value_set_string(value, purple_contact_info_get_note(info)); 199 g_value_set_string(value, purple_contact_info_get_note(info));
199 break; 200 break;
200 case PROP_AVATAR: 201 case PROP_AVATAR:
201 g_value_set_object(value, purple_contact_info_get_avatar(info)); 202 g_value_set_object(value, purple_contact_info_get_avatar(info));
202 break; 203 break;
204 case PROP_AVATAR_FOR_DISPLAY:
205 g_value_set_object(value, purple_contact_info_get_avatar_for_display(info));
206 break;
203 case PROP_PRESENCE: 207 case PROP_PRESENCE:
204 g_value_set_object(value, purple_contact_info_get_presence(info)); 208 g_value_set_object(value, purple_contact_info_get_presence(info));
205 break; 209 break;
206 case PROP_TAGS: 210 case PROP_TAGS:
207 g_value_set_object(value, purple_contact_info_get_tags(info)); 211 g_value_set_object(value, purple_contact_info_get_tags(info));
500 "avatar", NULL, NULL, 504 "avatar", NULL, NULL,
501 PURPLE_TYPE_IMAGE, 505 PURPLE_TYPE_IMAGE,
502 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); 506 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
503 507
504 /** 508 /**
509 * PurpleContactInfo:avatar-for-display:
510 *
511 * The avatar that should be displayed for this contact info.
512 *
513 * Since: 3.0
514 */
515 properties[PROP_AVATAR_FOR_DISPLAY] = g_param_spec_object(
516 "avatar-for-display", NULL, NULL,
517 PURPLE_TYPE_IMAGE,
518 G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
519
520 /**
505 * PurpleContactInfo:presence: 521 * PurpleContactInfo:presence:
506 * 522 *
507 * The [class@Purple.Presence] for this contact. This is typically 523 * The [class@Purple.Presence] for this contact. This is typically
508 * controlled by the protocol and should only be read by others. 524 * controlled by the protocol and should only be read by others.
509 * 525 *
956 priv = purple_contact_info_get_instance_private(info); 972 priv = purple_contact_info_get_instance_private(info);
957 973
958 return priv->avatar; 974 return priv->avatar;
959 } 975 }
960 976
977 PurpleImage *
978 purple_contact_info_get_avatar_for_display(PurpleContactInfo *info) {
979 PurpleContactInfoPrivate *priv = NULL;
980 PurpleImage *candidate = NULL;
981
982 g_return_val_if_fail(PURPLE_IS_CONTACT_INFO(info), NULL);
983
984 priv = purple_contact_info_get_instance_private(info);
985
986 if(PURPLE_IS_PERSON(priv->person)) {
987 candidate = purple_person_get_avatar_for_display(priv->person);
988 }
989
990 if(!PURPLE_IS_IMAGE(candidate)) {
991 candidate = priv->avatar;
992 }
993
994 return candidate;
995 }
996
961 void 997 void
962 purple_contact_info_set_avatar(PurpleContactInfo *info, PurpleImage *avatar) { 998 purple_contact_info_set_avatar(PurpleContactInfo *info, PurpleImage *avatar) {
963 PurpleContactInfoPrivate *priv = NULL; 999 PurpleContactInfoPrivate *priv = NULL;
964 1000
965 g_return_if_fail(PURPLE_IS_CONTACT_INFO(info)); 1001 g_return_if_fail(PURPLE_IS_CONTACT_INFO(info));
966 1002
967 priv = purple_contact_info_get_instance_private(info); 1003 priv = purple_contact_info_get_instance_private(info);
968 1004
969 if(g_set_object(&priv->avatar, avatar)) { 1005 if(g_set_object(&priv->avatar, avatar)) {
970 g_object_notify_by_pspec(G_OBJECT(info), properties[PROP_AVATAR]); 1006 GObject *obj = G_OBJECT(info);
1007
1008 g_object_freeze_notify(obj);
1009 g_object_notify_by_pspec(obj, properties[PROP_AVATAR]);
1010 g_object_notify_by_pspec(obj, properties[PROP_AVATAR_FOR_DISPLAY]);
1011 g_object_thaw_notify(obj);
971 } 1012 }
972 } 1013 }
973 1014
974 PurplePresence * 1015 PurplePresence *
975 purple_contact_info_get_presence(PurpleContactInfo *info) { 1016 purple_contact_info_get_presence(PurpleContactInfo *info) {
1015 * name-for-display property. 1056 * name-for-display property.
1016 */ 1057 */
1017 g_object_freeze_notify(G_OBJECT(info)); 1058 g_object_freeze_notify(G_OBJECT(info));
1018 1059
1019 g_object_notify_by_pspec(G_OBJECT(info), properties[PROP_PERSON]); 1060 g_object_notify_by_pspec(G_OBJECT(info), properties[PROP_PERSON]);
1061 g_object_notify_by_pspec(G_OBJECT(info),
1062 properties[PROP_AVATAR_FOR_DISPLAY]);
1020 1063
1021 /* Update the name-for-display property */ 1064 /* Update the name-for-display property */
1022 purple_contact_info_update_name_for_display(info); 1065 purple_contact_info_update_name_for_display(info);
1023 1066
1024 g_object_thaw_notify(G_OBJECT(info)); 1067 g_object_thaw_notify(G_OBJECT(info));

mercurial