--- a/libpurple/purplemessage.c Fri Mar 28 00:32:48 2025 -0500 +++ b/libpurple/purplemessage.c Fri Mar 28 00:48:48 2025 -0500 @@ -33,6 +33,7 @@ PurpleConversationMember *author; char *contents; + PangoAttrList *attributes; guint action : 1; guint event : 1; @@ -53,6 +54,7 @@ PROP_0, PROP_ACTION, PROP_ATTACHMENTS, + PROP_ATTRIBUTES, PROP_AUTHOR, PROP_CONTENTS, PROP_DELIVERED, @@ -99,6 +101,9 @@ case PROP_ATTACHMENTS: g_value_set_object(value, purple_message_get_attachments(message)); break; + case PROP_ATTRIBUTES: + g_value_set_boxed(value, purple_message_get_attributes(message)); + break; case PROP_AUTHOR: g_value_set_object(value, purple_message_get_author(message)); break; @@ -197,9 +202,11 @@ purple_message_finalize(GObject *obj) { PurpleMessage *message = PURPLE_MESSAGE(obj); - g_free(message->id); + g_clear_pointer(&message->id, g_free); g_clear_object(&message->author); - g_free(message->contents); + + g_clear_pointer(&message->contents, g_free); + g_clear_pointer(&message->attributes, pango_attr_list_unref); g_clear_error(&message->error); @@ -214,6 +221,7 @@ static void purple_message_init(PurpleMessage *message) { + message->attributes = pango_attr_list_new(); message->attachments = purple_attachments_new(); } @@ -255,6 +263,18 @@ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); /** + * PurpleMessage:attributes: + * + * The formatting attributes of the message. + * + * Since: 3.0 + */ + properties[PROP_ATTRIBUTES] = g_param_spec_boxed( + "attributes", NULL, NULL, + PANGO_TYPE_ATTR_LIST, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + + /** * PurpleMessage:author: * * The author of the message. @@ -460,6 +480,13 @@ return message->attachments; } +PangoAttrList * +purple_message_get_attributes(PurpleMessage *message) { + g_return_val_if_fail(PURPLE_IS_MESSAGE(message), NULL); + + return message->attributes; +} + PurpleConversationMember * purple_message_get_author(PurpleMessage *message) { g_return_val_if_fail(PURPLE_IS_MESSAGE(message), NULL);