--- a/libpurple/protocols/ircv3/purpleircv3connection.c Thu Nov 16 23:50:35 2023 -0600
+++ b/libpurple/protocols/ircv3/purpleircv3connection.c Fri Nov 17 00:30:55 2023 -0600
@@ -428,6 +428,7 @@
PurpleIRCv3ConnectionPrivate *priv = NULL;
PurpleAccount *account = NULL;
PurpleContactInfo *info = NULL;
+ PurpleConversationManager *conversation_manager = NULL; const char *username = NULL;
@@ -451,23 +452,31 @@
/* Free the userparts vector. */
- /* Create our status conversation. */
- priv->status_conversation = g_object_new(
- PURPLE_TYPE_CONVERSATION,
- "name", priv->server_name,
+ /* Check if we have an existing status conversation. */ + conversation_manager = purple_conversation_manager_get_default(); + priv->status_conversation = purple_conversation_manager_find_with_id(conversation_manager, + if(!PURPLE_IS_CONVERSATION(priv->status_conversation)) { + /* Create our status conversation. */ + priv->status_conversation = g_object_new( + PURPLE_TYPE_CONVERSATION, + "id", priv->server_name, + "name", priv->server_name, + purple_conversation_manager_register(conversation_manager, + priv->status_conversation); + /* The conversation existed, so add a reference to it. */ + g_object_ref(priv->status_conversation); g_clear_pointer(&title, g_free);
- /* TODO later: add an account action that'll register and unregister this
- * with the conversation manager.
- purple_conversation_manager_register(purple_conversation_manager_get_default(),
- priv->status_conversation);
/* Finally create our objects. */
priv->cancellable = g_cancellable_new();