--- a/libpurple/conversation.c Sat Jun 29 02:15:46 2013 +0530 +++ b/libpurple/conversation.c Sat Jun 29 03:15:11 2013 +0530 @@ -65,7 +65,7 @@ GList *message_history; /**< Message history, as a GList of PurpleConversationMessage's */ }; -/** TODO GBoxed +/** * Description of a conversation message */ struct _PurpleConversationMessage @@ -850,6 +850,42 @@ return msg->conv; } +static PurpleConversationMessage * +purple_conversation_message_copy(PurpleConversationMessage *msg) +{ + PurpleConversationMessage *newmsg = g_new(PurpleConversationMessage, 1); + *newmsg = *msg; + newmsg->who = g_strdup(msg->who); + newmsg->what = g_strdup(msg->what); + newmsg->alias = g_strdup(msg->alias); + + return newmsg; +} + +static void +purple_conversation_message_free(PurpleConversationMessage *msg) +{ + g_free(msg->who); + g_free(msg->what); + g_free(msg->alias); + + g_free(msg); +} + +GType +purple_conversation_message_get_type(void) +{ + static GType type = 0; + + if (type == 0) { + type = g_boxed_type_register_static("PurpleConversationMessage", + (GBoxedCopyFunc)purple_conversation_message_copy, + (GBoxedFreeFunc)purple_conversation_message_free); + } + + return type; +} + void purple_conversation_set_ui_data(PurpleConversation *conv, gpointer ui_data) { PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv);