/pidgin/main: 4aa7dfcc02a1: Fix writing_msg instances

Tomasz Wasilczyk twasilczyk at pidgin.im
Thu Jun 12 15:33:10 EDT 2014


Changeset: 4aa7dfcc02a1bb5bb66f82f3914e6815302663f2
Author:	 Tomasz Wasilczyk <twasilczyk at pidgin.im>
Date:	 2014-06-12 21:33 +0200
Branch:	 default
URL: https://hg.pidgin.im/pidgin/main/rev/4aa7dfcc02a1

Description:

Fix writing_msg instances

diffstat:

 finch/plugins/gnttinyurl.c |  19 ++++++++-----------
 pidgin/gtkconv.c           |  38 +++++++++++++++++++++++++++-----------
 2 files changed, 35 insertions(+), 22 deletions(-)

diffs (112 lines):

diff --git a/finch/plugins/gnttinyurl.c b/finch/plugins/gnttinyurl.c
--- a/finch/plugins/gnttinyurl.c
+++ b/finch/plugins/gnttinyurl.c
@@ -246,26 +246,24 @@ static void free_urls(gpointer data, gpo
 	g_free(data);
 }
 
-static gboolean writing_msg(PurpleAccount *account, char *sender, char **message,
-				PurpleConversation *conv, PurpleMessageFlags flags)
+static gboolean writing_msg(PurpleConversation *conv, PurpleMessage *msg, gpointer _unused)
 {
 	GString *t;
 	GList *iter, *urls, *next;
 	int c = 0;
 
-	if ((flags & (PURPLE_MESSAGE_SEND | PURPLE_MESSAGE_INVISIBLE)))
+	if (purple_message_get_flags(msg) & (PURPLE_MESSAGE_SEND | PURPLE_MESSAGE_INVISIBLE))
 		return FALSE;
 
 	urls = g_object_get_data(G_OBJECT(conv), "TinyURLs");
 	if (urls != NULL) /* message was cancelled somewhere? Reset. */
 		g_list_foreach(urls, free_urls, NULL);
 	g_list_free(urls);
-	urls = extract_urls(*message);
+	urls = extract_urls(purple_message_get_contents(msg));
 	if (!urls)
 		return FALSE;
 
-	t = g_string_new(*message);
-	g_free(*message);
+	t = g_string_new(g_strdup(purple_message_get_contents(msg)));
 	for (iter = urls; iter; iter = next) {
 		next = iter->next;
 		if (g_utf8_strlen((char *)iter->data, -1) >= purple_prefs_get_int(PREF_LENGTH)) {
@@ -289,11 +287,10 @@ static gboolean writing_msg(PurpleAccoun
 			urls = g_list_delete_link(urls, iter);
 		}
 	}
-	*message = t->str;
-	g_string_free(t, FALSE);
-	if (conv == NULL)
-		conv = PURPLE_CONVERSATION(purple_im_conversation_new(account, sender));
-	g_object_set_data(G_OBJECT(conv), "TinyURLs", urls);
+	purple_message_set_contents(msg, t->str);
+	g_string_free(t, TRUE);
+	if (conv != NULL)
+		g_object_set_data(G_OBJECT(conv), "TinyURLs", urls);
 	return FALSE;
 }
 
diff --git a/pidgin/gtkconv.c b/pidgin/gtkconv.c
--- a/pidgin/gtkconv.c
+++ b/pidgin/gtkconv.c
@@ -6654,6 +6654,29 @@ box_remote_images(PurpleConversation *co
 		box_remote_image_cb, conv, NULL);
 }
 
+static gboolean
+writing_msg(PurpleConversation *conv, PurpleMessage *msg, gpointer _unused)
+{
+	PidginConversation *gtkconv;
+
+	g_return_val_if_fail(msg != NULL, FALSE);
+
+	if (!(purple_message_get_flags(msg) & PURPLE_MESSAGE_ACTIVE_ONLY))
+		return FALSE;
+
+	g_return_val_if_fail(conv != NULL, FALSE);
+	gtkconv = PIDGIN_CONVERSATION(conv);
+	g_return_val_if_fail(gtkconv != NULL, FALSE);
+
+	if (conv == gtkconv->active_conv)
+		return FALSE;
+
+	purple_debug_info("gtkconv",
+		"Suppressing message for an inactive conversation");
+
+	return TRUE;
+}
+
 static void
 pidgin_conv_write_conv(PurpleConversation *conv, PurpleMessage *pmsg)
 {
@@ -6702,17 +6725,6 @@ pidgin_conv_write_conv(PurpleConversatio
 
 	if (conv != gtkconv->active_conv)
 	{
-		if (flags & PURPLE_MESSAGE_ACTIVE_ONLY)
-		{
-			/* Unless this had PURPLE_MESSAGE_NO_LOG, this message
-			 * was logged.  Plugin writers: if this isn't what
-			 * you wanted, call purple_im_conversation_write_message() instead of
-			 * purple_conversation_write(). */
-			purple_debug_info("gtkconv",
-			                "Suppressing message for an inactive conversation in pidgin_conv_write_conv()\n");
-			return;
-		}
-
 		/* Set the active conversation to the one that just messaged us. */
 		/* TODO: consider not doing this if the account is offline or something */
 		if (flags & (PURPLE_MESSAGE_SEND | PURPLE_MESSAGE_RECV))
@@ -8862,6 +8874,10 @@ pidgin_conversations_init(void)
 	purple_signal_connect(purple_connections_get_handle(), "signing-off", handle,
 						G_CALLBACK(account_signing_off), NULL);
 
+	purple_signal_connect(purple_conversations_get_handle(), "writing-im-msg",
+		handle, G_CALLBACK(writing_msg), NULL);
+	purple_signal_connect(purple_conversations_get_handle(), "writing-chat-msg",
+		handle, G_CALLBACK(writing_msg), NULL);
 	purple_signal_connect(purple_conversations_get_handle(), "received-im-msg",
 						handle, G_CALLBACK(received_im_msg_cb), NULL);
 	purple_signal_connect(purple_conversations_get_handle(), "cleared-message-history",



More information about the Commits mailing list