--- a/libpurple/purplecontact.c Thu Sep 29 00:46:44 2022 -0500
+++ b/libpurple/purplecontact.c Thu Sep 29 00:51:00 2022 -0500
@@ -33,6 +33,8 @@
PurplePresence *presence;
@@ -45,6 +47,7 @@
static GParamSpec *properties[N_PROPERTIES] = {NULL, };
@@ -113,6 +116,9 @@
g_value_set_object(value, purple_contact_get_tags(contact));
+ g_value_set_object(value, purple_contact_get_person(contact)); G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
@@ -147,6 +153,9 @@
purple_contact_set_presence(contact, g_value_get_object(value));
+ purple_contact_set_person(contact, g_value_get_object(value)); G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
@@ -161,6 +170,7 @@
g_clear_object(&contact->avatar);
g_clear_object(&contact->presence);
g_clear_object(&contact->tags);
+ g_clear_object(&contact->person); G_OBJECT_CLASS(purple_contact_parent_class)->dispose(obj);
@@ -313,6 +323,19 @@
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+ * PurpleContact:person: + * The [class@Purple.Person] that this contact belongs to. + properties[PROP_PERSON] = g_param_spec_object( + "The person this contact belongs to.", + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
@@ -436,3 +459,19 @@
+purple_contact_set_person(PurpleContact *contact, PurplePerson *person) { + g_return_if_fail(PURPLE_IS_CONTACT(contact)); + if(g_set_object(&contact->person, person)) { + g_object_notify_by_pspec(G_OBJECT(contact), properties[PROP_PERSON]); +purple_contact_get_person(PurpleContact *contact) { + g_return_val_if_fail(PURPLE_IS_CONTACT(contact), NULL); + return contact->person; --- a/libpurple/purplecontact.h Thu Sep 29 00:46:44 2022 -0500
+++ b/libpurple/purplecontact.h Thu Sep 29 00:51:00 2022 -0500
@@ -36,6 +36,8 @@
#define PURPLE_TYPE_CONTACT (purple_contact_get_type())
G_DECLARE_FINAL_TYPE(PurpleContact, purple_contact, PURPLE, CONTACT, GObject)
+#include <libpurple/purpleperson.h> @@ -224,6 +226,30 @@
PurpleTags *purple_contact_get_tags(PurpleContact *contact);
+ * purple_contact_set_person: + * @contact: The instance. + * @person: (nullable): The new [class@Purple.Person] or %NULL. + * Sets the person that @contact belongs to to @person. +void purple_contact_set_person(PurpleContact *contact, PurplePerson *person); + * purple_contact_get_person: + * @contact: The instance. + * Gets the [class@Purple.Person] that @contact belongs to. + * Returns: (transfer none) (nullable): The [class@Purple.Person] that @contact + * belongs to, or %NULL. +PurplePerson *purple_contact_get_person(PurpleContact *contact); #endif /* PURPLE_CONTACT_H */
--- a/libpurple/purpleperson.h Thu Sep 29 00:46:44 2022 -0500
+++ b/libpurple/purpleperson.h Thu Sep 29 00:51:00 2022 -0500
@@ -28,7 +28,6 @@
#include <gdk-pixbuf/gdk-pixbuf.h>
-#include <libpurple/purplecontact.h>
#include <libpurple/purpletags.h>
@@ -36,6 +35,8 @@
#define PURPLE_TYPE_PERSON (purple_person_get_type())
G_DECLARE_FINAL_TYPE(PurplePerson, purple_person, PURPLE, PERSON, GObject)
+#include <libpurple/purplecontact.h> --- a/libpurple/tests/test_contact.c Thu Sep 29 00:46:44 2022 -0500
+++ b/libpurple/tests/test_contact.c Thu Sep 29 00:51:00 2022 -0500
@@ -45,6 +45,8 @@
PurpleAccount *account = NULL;
PurpleAccount *account1 = NULL;
PurpleContact *contact = NULL;
+ PurplePerson *person = NULL; + PurplePerson *person1 = NULL; PurplePresence *presence = NULL;
PurplePresence *presence1 = NULL;
@@ -58,6 +60,7 @@
account = purple_account_new("test", "test");
avatar = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, 1, 1);
presence = g_object_new(PURPLE_TYPE_PRESENCE, NULL);
+ person = purple_person_new(); /* Use g_object_new so we can test setting properties by name. All of them
* call the setter methods, so by doing it this way we exercise more of the
@@ -71,6 +74,7 @@
/* Now use g_object_get to read all of the properties. */
@@ -83,6 +87,7 @@
/* Compare all the things. */
@@ -94,6 +99,7 @@
g_assert_true(avatar1 == avatar);
g_assert_true(presence1 == presence);
+ g_assert_true(person1 == person); /* Free/unref all the things. */
g_clear_pointer(&id, g_free);
@@ -104,6 +110,8 @@
g_clear_object(&avatar1);
g_clear_object(&presence1);
+ g_clear_object(&person); + g_clear_object(&person1); g_clear_object(&presence);