diff src/server.c @ 8562:e3c059c3d92d

[gaim-migrate @ 9306] " This patch adds a call-back slot to the GaimPluginProtocolInfo structure which allows a prpl to receive notification when a chat invitation has been rejected by the local user. The patch modifies server.c to trigger the call-back, and adds NULL entries into the existing protocols to make them match the updated ABI. This is necessary for a protocol plugin which I have written, as the protocol needs to take action in the event of a conference rejection. It is my understanding that the Yahoo prpl may also benefit from this patch (it's supposed to be sending the rejection upstream to the server too, as I understand it)" --Christopher (siege) O'Brien committer: Tailor Script <tailor@pidgin.im>
author Luke Schierer <lschiere@pidgin.im>
date Fri, 02 Apr 2004 06:54:52 +0000
parents f5b0e1a4b0c7
children 88988327a4e0
line wrap: on
line diff
--- a/src/server.c	Fri Apr 02 06:18:14 2004 +0000
+++ b/src/server.c	Fri Apr 02 06:54:52 2004 +0000
@@ -714,6 +714,18 @@
 		prpl_info->join_chat(g, data);
 }
 
+
+void serv_reject_chat(GaimConnection *g, GHashTable *data)
+{
+	GaimPluginProtocolInfo *prpl_info = NULL;
+
+	if (g != NULL && g->prpl != NULL)
+		prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(g->prpl);
+
+	if (prpl_info && g_list_find(gaim_connections_get_all(), g) && prpl_info->reject_chat)
+		prpl_info->reject_chat(g, data);
+}
+
 void serv_chat_invite(GaimConnection *g, int id, const char *message, const char *name)
 {
 	GaimPluginProtocolInfo *prpl_info = NULL;
@@ -1323,10 +1335,17 @@
 	g_free(cid);
 }
 
+
+static void chat_invite_reject(struct chat_invite_data *cid)
+{
+	serv_reject_chat(cid->gc, cid->components);
+	chat_invite_data_free(cid);
+}
+
+
 static void chat_invite_accept(struct chat_invite_data *cid)
 {
 	serv_join_chat(cid->gc, cid->components);
-
 	chat_invite_data_free(cid);
 }
 
@@ -1359,7 +1378,7 @@
 	gaim_request_accept_cancel(gc, NULL, _("Accept chat invitation?"),
 							   buf2, 0, cid,
 							   G_CALLBACK(chat_invite_accept),
-							   G_CALLBACK(chat_invite_data_free));
+							   G_CALLBACK(chat_invite_reject));
 }
 
 GaimConversation *serv_got_joined_chat(GaimConnection *gc,