--- a/libpurple/purplecontactinfo.c Tue Feb 20 01:43:23 2024 -0600
+++ b/libpurple/purplecontactinfo.c Thu Feb 22 06:03:16 2024 -0600
@@ -37,6 +37,7 @@
@@ -68,6 +69,7 @@
@@ -221,6 +223,9 @@
g_value_set_string(value, purple_contact_info_get_sid(info));
+ g_value_set_boolean(value, purple_contact_info_get_favorite(info)); G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
@@ -275,6 +280,9 @@
purple_contact_info_set_sid(info, g_value_get_string(value));
+ purple_contact_info_set_favorite(info, g_value_get_boolean(value)); G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
@@ -573,6 +581,19 @@
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+ * PurpleContactInfo:favorite: + * Whether or not the contact info has been marked as a favorite or stared. + properties[PROP_FAVORITE] = g_param_spec_boolean( + "favorite", "favorite", + "Whether or not this is a favorite contact.", + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); * PurpleContactInfo:name-for-display:
* The name that the user interface should display for this contact info.
@@ -1104,6 +1125,32 @@
+purple_contact_info_get_favorite(PurpleContactInfo *info) { + PurpleContactInfoPrivate *priv = NULL; + g_return_val_if_fail(PURPLE_IS_CONTACT_INFO(info), FALSE); + priv = purple_contact_info_get_instance_private(info); +purple_contact_info_set_favorite(PurpleContactInfo *info, gboolean favorite) { + PurpleContactInfoPrivate *priv = NULL; + g_return_if_fail(PURPLE_IS_CONTACT_INFO(info)); + priv = purple_contact_info_get_instance_private(info); + if(priv->favorite != favorite) { + priv->favorite = favorite; + g_object_notify_by_pspec(G_OBJECT(info), properties[PROP_FAVORITE]); purple_contact_info_get_name_for_display(PurpleContactInfo *info) {
PurpleContactInfoPrivate *priv = NULL;
--- a/libpurple/purplecontactinfo.h Tue Feb 20 01:43:23 2024 -0600
+++ b/libpurple/purplecontactinfo.h Thu Feb 22 06:03:16 2024 -0600
@@ -484,6 +484,31 @@
void purple_contact_info_set_sid(PurpleContactInfo *info, const char *sid);
+ * purple_contact_info_get_favorite: + * Gets whether or not @info is a favorite or starred contact. + * Returns: %TRUE if @info is a favorite, otherwise %FALSE. +gboolean purple_contact_info_get_favorite(PurpleContactInfo *info); + * purple_contact_info_set_favorite: + * @favorite: %TRUE to mark @info as a favorite, otherwise %FALSE. + * Sets whether or not @info is a favorite. +void purple_contact_info_set_favorite(PurpleContactInfo *info, gboolean favorite); * purple_contact_info_get_name_for_display:
--- a/libpurple/tests/test_contact_info.c Tue Feb 20 01:43:23 2024 -0600
+++ b/libpurple/tests/test_contact_info.c Thu Feb 22 06:03:16 2024 -0600
@@ -60,6 +60,7 @@
char *name_for_display = NULL;
+ gboolean favorite = FALSE; avatar = g_object_new(PURPLE_TYPE_AVATAR, NULL);
person = purple_person_new();
@@ -85,6 +86,7 @@
"permission", PURPLE_CONTACT_INFO_PERMISSION_ALLOW,
/* Now use g_object_get to read all of the properties. */
@@ -105,6 +107,7 @@
"permission", &permission,
"name-for-display", &name_for_display,
/* Compare all the things. */
@@ -125,6 +128,7 @@
g_assert_true(person1 == person);
g_assert_true(permission == PURPLE_CONTACT_INFO_PERMISSION_ALLOW);
g_assert_cmpstr(sid, ==, "sid");
+ g_assert_true(favorite); /* Free/unref all the things. */
g_clear_pointer(&id, g_free);