Add user-joined and user-left gobject signals to PurpleChatConversation

Thu, 18 Aug 2022 23:01:51 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Thu, 18 Aug 2022 23:01:51 -0500
changeset 41505
3f120d577610
parent 41504
70d9d0552b04
child 41506
fff3a446f76d

Add user-joined and user-left gobject signals to PurpleChatConversation

Testing Done:
Joined a chat and verified everything worked as expected with no new warnings.

Reviewed at https://reviews.imfreedom.org/r/1606/

libpurple/purplechatconversation.c file | annotate | diff | comparison | revisions
--- a/libpurple/purplechatconversation.c	Wed Aug 17 04:09:59 2022 -0500
+++ b/libpurple/purplechatconversation.c	Thu Aug 18 23:01:51 2022 -0500
@@ -40,7 +40,6 @@
 	GHashTable *users;  /* Hash table of the users in the room.      */
 } PurpleChatConversationPrivate;
 
-/* Chat Property enums */
 enum {
 	PROP_0,
 	PROP_TOPIC_WHO,
@@ -52,6 +51,13 @@
 };
 static GParamSpec *properties[N_PROPERTIES] = { NULL, };
 
+enum {
+	SIG_USER_JOINED,
+	SIG_USER_LEFT,
+	N_SIGNALS
+};
+static guint signals[N_SIGNALS] = { 0, };
+
 G_DEFINE_TYPE_WITH_PRIVATE(PurpleChatConversation, purple_chat_conversation,
                            PURPLE_TYPE_CONVERSATION);
 
@@ -331,6 +337,56 @@
 		G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
 
 	g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
+
+	/* Signals */
+
+	/**
+	 * PurpleChatConversation::user-joined:
+	 * @chat: The chat instance.
+	 * @username: The user that joined the conversation.
+	 * @flags: The [flags@ChatUserFlags] for user.
+	 * @new_arrival: %TRUE if the user is new to the conversation.
+	 *
+	 * Emitted after a @username has joined the conversation.
+	 *
+	 * Since: 3.0.0
+	 */
+	signals[SIG_USER_JOINED] = g_signal_new_class_handler(
+		"user-joined",
+		G_OBJECT_CLASS_TYPE(klass),
+		G_SIGNAL_RUN_LAST,
+		NULL,
+		NULL,
+		NULL,
+		NULL,
+		G_TYPE_NONE,
+		3,
+		G_TYPE_STRING,
+		PURPLE_TYPE_CHAT_USER_FLAGS,
+		G_TYPE_BOOLEAN);
+
+	/**
+	 * PurpleChatConversation::user-left:
+	 * @chat: The chat instance.
+	 * @username: The user that left the conversation
+	 * @reason: The optional reason why the user left the chat.
+	 *
+	 * Emitted after a @username has left the conversation.
+	 *
+	 * Since: 3.0.0
+	 */
+	signals[SIG_USER_LEFT] = g_signal_new_class_handler(
+		"user-left",
+		G_OBJECT_CLASS_TYPE(klass),
+		G_SIGNAL_RUN_LAST,
+		NULL,
+		NULL,
+		NULL,
+		NULL,
+		G_TYPE_NONE,
+		2,
+		G_TYPE_STRING,
+		G_TYPE_STRING);
 }
 
 /******************************************************************************
@@ -690,6 +746,9 @@
 		purple_signal_emit(handle, "chat-user-joined", chat, user, flag,
 		                   new_arrivals);
 
+		g_signal_emit(chat, signals[SIG_USER_JOINED], 0, user, flag,
+		              new_arrivals);
+
 		users = users->next;
 		flags = flags->next;
 		if(extra_msgs != NULL) {
@@ -910,6 +969,8 @@
 		}
 
 		purple_signal_emit(handle, "chat-user-left", conv, user, reason);
+
+		g_signal_emit(chat, signals[SIG_USER_LEFT], 0, user, reason);
 	}
 
 	if(ops != NULL && ops->chat_remove_users != NULL) {

mercurial