changeset 29480:e2c8fe39a2f1

propagate from branch 'im.pidgin.pidgin' (head 458e696572314f8fd2d259d40713ad955dd82581) to branch 'im.pidgin.pidgin.next.minor' (head 869b7c49cec24db5a508b838839d20cb497c47ab)
author John Bailey <rekkanoryo@rekkanoryo.org>
date Sun, 23 Aug 2009 02:37:12 +0000
parents 208f4d20ac5d (diff) 39005e0d26a0 (current diff)
children 2dcff225172e
files pidgin/gtkblist.c pidgin/gtkcelllayout.c pidgin/gtkcelllayout.h pidgin/gtkcellrendererprogress.c pidgin/gtkcellrendererprogress.h pidgin/gtkcellview.c pidgin/gtkcellview.h pidgin/gtkcellviewmenuitem.c pidgin/gtkcellviewmenuitem.h pidgin/gtkexpander.c pidgin/gtkexpander.h pidgin/pidgincombobox.c pidgin/pidgincombobox.h
diffstat 22 files changed, 145 insertions(+), 68 deletions(-) [+]
line wrap: on
line diff
--- a/PLUGIN_HOWTO	Sun Aug 23 02:36:31 2009 +0000
+++ b/PLUGIN_HOWTO	Sun Aug 23 02:37:12 2009 +0000
@@ -1,6 +1,6 @@
 For information on writing a plugin for Purple, Pidgin or Finch, go
-http://developer.pidgin.im and click on API.  From there, see the HOWTOs in the
-"Related Pages" section.
+http://developer.pidgin.im and click on API.  From there, see the
+HOWTOs in the "Related Pages" section.
 
 You can also generate this documentation locally by installing
 doxygen and graphviz dot, then running "make docs" in the
--- a/finch/plugins/grouping.c	Sun Aug 23 02:36:31 2009 +0000
+++ b/finch/plugins/grouping.c	Sun Aug 23 02:37:12 2009 +0000
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,  USA
  */
 
 #define PURPLE_PLUGIN
--- a/libpurple/protocols/bonjour/bonjour_ft.c	Sun Aug 23 02:36:31 2009 +0000
+++ b/libpurple/protocols/bonjour/bonjour_ft.c	Sun Aug 23 02:37:12 2009 +0000
@@ -17,7 +17,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,  USA
  */
 #include "internal.h"
 #include "util.h"
--- a/libpurple/protocols/bonjour/bonjour_ft.h	Sun Aug 23 02:36:31 2009 +0000
+++ b/libpurple/protocols/bonjour/bonjour_ft.h	Sun Aug 23 02:37:12 2009 +0000
@@ -17,7 +17,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,  USA
  */
 #ifndef _BONJOUR_FT_H_
 #define _BONJOUR_FT_H_
--- a/libpurple/protocols/jabber/data.c	Sun Aug 23 02:36:31 2009 +0000
+++ b/libpurple/protocols/jabber/data.c	Sun Aug 23 02:37:12 2009 +0000
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
 #include <stdlib.h>
--- a/libpurple/protocols/jabber/data.h	Sun Aug 23 02:36:31 2009 +0000
+++ b/libpurple/protocols/jabber/data.h	Sun Aug 23 02:37:12 2009 +0000
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
 #ifndef PURPLE_JABBER_DATA_H
--- a/libpurple/protocols/jabber/ibb.c	Sun Aug 23 02:36:31 2009 +0000
+++ b/libpurple/protocols/jabber/ibb.c	Sun Aug 23 02:37:12 2009 +0000
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
 #include "internal.h"
--- a/libpurple/protocols/jabber/ibb.h	Sun Aug 23 02:36:31 2009 +0000
+++ b/libpurple/protocols/jabber/ibb.h	Sun Aug 23 02:37:12 2009 +0000
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
 #ifndef PURPLE_JABBER_IBB_H_
--- a/libpurple/protocols/msn/cmdproc.h	Sun Aug 23 02:36:31 2009 +0000
+++ b/libpurple/protocols/msn/cmdproc.h	Sun Aug 23 02:37:12 2009 +0000
@@ -71,6 +71,4 @@
 void msn_cmdproc_process_payload(MsnCmdProc *cmdproc,
 								 char *payload, int payload_len);
 
-void msn_cmdproc_disconnect(MsnCmdProc *cmdproc);
-
 #endif /* _MSN_CMDPROC_H_ */
--- a/libpurple/protocols/msn/contact.c	Sun Aug 23 02:36:31 2009 +0000
+++ b/libpurple/protocols/msn/contact.c	Sun Aug 23 02:37:12 2009 +0000
@@ -21,7 +21,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,  USA
  */
 
 #include "msn.h"
--- a/libpurple/protocols/msn/contact.h	Sun Aug 23 02:36:31 2009 +0000
+++ b/libpurple/protocols/msn/contact.h	Sun Aug 23 02:37:12 2009 +0000
@@ -20,7 +20,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,  USA
  */
 #ifndef _MSN_CONTACT_H_
 #define _MSN_CONTACT_H_
--- a/libpurple/protocols/msn/msn.c	Sun Aug 23 02:36:31 2009 +0000
+++ b/libpurple/protocols/msn/msn.c	Sun Aug 23 02:37:12 2009 +0000
@@ -265,6 +265,7 @@
 	MsnSession *session;
 	MsnCmdProc *cmdproc;
 	MsnPage *page;
+	MsnMessage *msg;
 	MsnUser *user;
 	char *payload = NULL;
 	const char *mobile_number = NULL;
@@ -295,6 +296,9 @@
 	msn_transaction_set_payload(trans, payload, payload_len);
 	g_free(payload);
 
+	msg = msn_message_new_plain(entry);
+	msn_transaction_set_data(trans, msg);
+
 	msn_page_destroy(page);
 
 	msn_cmdproc_send_trans(cmdproc, trans);
--- a/libpurple/protocols/msn/notification.c	Sun Aug 23 02:36:31 2009 +0000
+++ b/libpurple/protocols/msn/notification.c	Sun Aug 23 02:37:12 2009 +0000
@@ -599,6 +599,8 @@
 		/* Decrement the count for unknown results so that we'll continue login.
 		   Also, need to finish the login process here as well, because ADL OK
 		   will not be called. */
+		if (purple_debug_is_verbose())
+			purple_debug_info("msn", "ADL/FQY count is %d\n", session->adl_fqy);
 		if (--session->adl_fqy == 0)
 			msn_session_finish_login(session);
 		return;
@@ -680,6 +682,9 @@
 
 				/* ADL's are returned all-together */
 				session->adl_fqy++;
+				if (purple_debug_is_verbose())
+					purple_debug_info("msn", "Posting ADL, count is %d\n",
+					                  session->adl_fqy);
 
 				msn_notification_post_adl(session->notification->cmdproc,
 					payload, payload_len);
@@ -694,6 +699,9 @@
 		} else {
 			/* FQY's are returned one-at-a-time */
 			session->adl_fqy++;
+			if (purple_debug_is_verbose())
+				purple_debug_info("msn", "Adding FQY address, count is %d\n",
+				                  session->adl_fqy);
 
 			msn_add_contact_xml(session, fqy_node, user->passport,
 				0, user->networkid);
@@ -718,6 +726,9 @@
 
 		/* ADL's are returned all-together */
 		session->adl_fqy++;
+		if (purple_debug_is_verbose())
+			purple_debug_info("msn", "Posting ADL, count is %d\n",
+			                  session->adl_fqy);
 
 		msn_notification_post_adl(session->notification->cmdproc, payload, payload_len);
 
@@ -809,6 +820,9 @@
 
 	if (!strcmp(cmd->params[1], "OK")) {
 		/* ADL ack */
+		if (purple_debug_is_verbose())
+			purple_debug_info("msn", "ADL ACK, count is %d\n",
+			                  session->adl_fqy);
 		if (--session->adl_fqy == 0)
 			msn_session_finish_login(session);
 	} else {
@@ -1178,14 +1192,36 @@
 	id = xmlnode_get_attrib(msg, "id");
 
 	if (id && !strcmp(id, "407")) {
-		/* TODO: Use this to NAK the transaction, maybe print the text, too.
-		unsigned int trId;
-		id = xmlnode_get_attrib(payloadNode, "id");
-		trId = atol(id);
-		*/
-		purple_conv_present_error(who, gc->account,
-			_("Mobile message was not sent because it was too long."));
+		PurpleConversation *conv
+			= purple_find_conversation_with_account(PURPLE_CONV_TYPE_ANY,
+			                                        who, gc->account);
+		if (conv != NULL) {
+			purple_conversation_write(conv, NULL,
+			                          _("Mobile message was not sent because it was too long."),
+			                          PURPLE_MESSAGE_ERROR, time(NULL));
+
+			if ((id = xmlnode_get_attrib(payloadNode, "id")) != NULL) {
+				unsigned int trId = atol(id);
+				MsnTransaction *trans;
+				MsnMessage *msg;
 
+				trans = msn_history_find(cmdproc->history, trId);
+				msg = (MsnMessage *)trans->data;
+
+				if (msg) {
+					char *body_str = msn_message_to_string(msg);
+					char *body_enc = g_markup_escape_text(body_str, -1);
+
+					purple_conversation_write(conv, NULL, body_enc,
+					                          PURPLE_MESSAGE_RAW, time(NULL));
+
+					g_free(body_str);
+					g_free(body_enc);
+					msn_message_destroy(msg);
+					trans->data = NULL;
+				}
+			}
+		}
 	} else {
 		serv_got_im(gc, who, text, 0, time(NULL));
 	}
--- a/libpurple/protocols/msn/oim.c	Sun Aug 23 02:36:31 2009 +0000
+++ b/libpurple/protocols/msn/oim.c	Sun Aug 23 02:37:12 2009 +0000
@@ -21,7 +21,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,  USA
  */
 #include "msn.h"
 #include "soap.h"
--- a/libpurple/protocols/msn/oim.h	Sun Aug 23 02:36:31 2009 +0000
+++ b/libpurple/protocols/msn/oim.h	Sun Aug 23 02:37:12 2009 +0000
@@ -20,7 +20,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,  USA
  */
 #ifndef _MSN_OIM_H_
 #define _MSN_OIM_H_
--- a/libpurple/protocols/msn/soap.c	Sun Aug 23 02:36:31 2009 +0000
+++ b/libpurple/protocols/msn/soap.c	Sun Aug 23 02:37:12 2009 +0000
@@ -20,7 +20,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,  USA
  */
 
 #include "internal.h"
--- a/libpurple/protocols/msn/soap.h	Sun Aug 23 02:36:31 2009 +0000
+++ b/libpurple/protocols/msn/soap.h	Sun Aug 23 02:37:12 2009 +0000
@@ -20,7 +20,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,  USA
  */
 
 #ifndef _MSN_SOAP_H
--- a/libpurple/protocols/qq/qq_crypt.c	Sun Aug 23 02:36:31 2009 +0000
+++ b/libpurple/protocols/qq/qq_crypt.c	Sun Aug 23 02:37:12 2009 +0000
@@ -19,7 +19,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,  USA
  *
  *
  * QQ encryption algorithm
--- a/libpurple/protocols/qq/qq_crypt.h	Sun Aug 23 02:36:31 2009 +0000
+++ b/libpurple/protocols/qq/qq_crypt.h	Sun Aug 23 02:37:12 2009 +0000
@@ -19,7 +19,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,  USA
  */
 
 #ifndef _QQ_CRYPT_H_
--- a/pidgin/gtkblist.c	Sun Aug 23 02:36:31 2009 +0000
+++ b/pidgin/gtkblist.c	Sun Aug 23 02:37:12 2009 +0000
@@ -4148,6 +4148,7 @@
 			name_color = "dim grey";
 		} else if (!purple_presence_is_online(presence)) {
 			namefont = pidgin_blist_theme_get_offline_text_info(theme);
+			name_color = "dim grey";
 			statusfont = pidgin_blist_theme_get_status_text_info(theme);
 		} else if (purple_presence_is_available(presence)) {
 			namefont = pidgin_blist_theme_get_online_text_info(theme);
@@ -4156,6 +4157,13 @@
 			namefont = pidgin_blist_theme_get_away_text_info(theme);
 			statusfont = pidgin_blist_theme_get_status_text_info(theme);
 		}
+	} else {
+		if (!selected
+				&& (purple_presence_is_idle(presence)
+							|| !purple_presence_is_online(presence)))
+		{
+			name_color = "dim grey";
+		}
 	}
 
 	name_color = theme_font_get_color_default(namefont, name_color);
@@ -6400,10 +6408,13 @@
 			ihrs = (t - idle_secs) / 3600;
 			imin = ((t - idle_secs) / 60) % 60;
 
-			if (!selected && theme != NULL && (pair = pidgin_blist_theme_get_idle_text_info(theme)) != NULL)
+			if (selected)
+				textcolor = NULL;
+			else if (theme != NULL && (pair = pidgin_blist_theme_get_idle_text_info(theme)) != NULL)
 				textcolor = pidgin_theme_font_get_color_describe(pair);
 			else
-				textcolor = NULL;
+				/* If no theme them default to making idle buddy names grey */
+				textcolor = "dim grey";
 
 			if (textcolor) {
 				idle = g_strdup_printf("<span color='%s' font_desc='%s'>%d:%02d</span>",
--- a/pidgin/gtkmedia.h	Sun Aug 23 02:36:31 2009 +0000
+++ b/pidgin/gtkmedia.h	Sun Aug 23 02:37:12 2009 +0000
@@ -21,7 +21,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301,  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,  USA
  */
 
 #ifndef __GTKMEDIA_H_
--- a/pidgin/gtknotify.c	Sun Aug 23 02:36:31 2009 +0000
+++ b/pidgin/gtknotify.c	Sun Aug 23 02:37:12 2009 +0000
@@ -60,6 +60,7 @@
 {
 	PurpleAccount *account;
 	PurplePounce *pounce;
+	char *pouncee;
 } PidginNotifyPounceData;
 
 
@@ -155,6 +156,7 @@
 				-1);
 		gtk_tree_store_remove(dialog->treemodel, &iter);
 
+		g_free(pounce_data->pouncee);
 		g_free(pounce_data);
 	}
 
@@ -173,8 +175,29 @@
 			PIDGIN_POUNCE_DATA, &pounce_data,
 			-1);
 
-	if (pounce_data != NULL)
+	if (pounce_data != NULL) {
+		g_free(pounce_data->pouncee);
 		g_free(pounce_data);
+	}
+}
+
+static void
+open_im_foreach(GtkTreeModel *model, GtkTreePath *path,
+		GtkTreeIter *iter, gpointer data)
+{
+	PidginNotifyPounceData *pounce_data;
+
+	gtk_tree_model_get(model, iter,
+			PIDGIN_POUNCE_DATA, &pounce_data,
+			-1);
+
+	if (pounce_data != NULL) {
+		PurpleConversation *conv;
+
+		conv = purple_conversation_new(PURPLE_CONV_TYPE_IM,
+				pounce_data->account, pounce_data->pouncee);
+		purple_conversation_present(conv);
+	}
 }
 
 static void
@@ -211,6 +234,17 @@
 }
 
 static void
+pounce_response_open_ims()
+{
+	GtkTreeSelection *selection;
+
+	selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(pounce_dialog->treeview));
+	gtk_tree_selection_selected_foreach(selection, open_im_foreach, pounce_dialog);
+	
+	pounce_response_dismiss();
+}
+
+static void
 pounce_response_edit_cb(GtkTreeModel *model, GtkTreePath *path,
 		GtkTreeIter *iter, gpointer data)
 {
@@ -246,6 +280,9 @@
 		case GTK_RESPONSE_DELETE_EVENT:
 			pounce_response_close(dialog);
 			break;
+		case GTK_RESPONSE_YES:
+			pounce_response_open_ims();
+			break;
 		case GTK_RESPONSE_NO:
 			pounce_response_dismiss();
 			break;
@@ -261,68 +298,53 @@
 pounce_row_selected_cb(GtkTreeView *tv, GtkTreePath *path,
 	GtkTreeViewColumn *col, gpointer data)
 {
-	GtkTreeIter iter;
 	GtkTreeSelection *selection;
-	gboolean selected;
-	GList *list;
+	int count;
 
 	selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(pounce_dialog->treeview));
 
-	selected = gtk_tree_selection_get_selected(selection,
-			NULL, &iter);
+	count = gtk_tree_selection_count_selected_rows(selection);
 
-	if (selected) {
-		PurplePounce *pounce;
+	if (count == 0) {
+		gtk_widget_set_sensitive(pounce_dialog->open_button, FALSE);
+		gtk_widget_set_sensitive(pounce_dialog->edit_button, FALSE);
+		gtk_widget_set_sensitive(pounce_dialog->dismiss_button, FALSE);
+	} else if (count == 1) {
+		GList *pounces;
+		GList *list;
 		PidginNotifyPounceData *pounce_data;
+		GtkTreeIter iter;
 
-		list = purple_pounces_get_all();
-
+		list = gtk_tree_selection_get_selected_rows(selection, NULL);
+		gtk_tree_model_get_iter(GTK_TREE_MODEL(pounce_dialog->treemodel),
+				&iter, list->data);
 		gtk_tree_model_get(GTK_TREE_MODEL(pounce_dialog->treemodel), &iter,
 				PIDGIN_POUNCE_DATA, &pounce_data,
 				-1);
-
-		gtk_widget_set_sensitive(pounce_dialog->edit_button, FALSE);
+		g_list_foreach(list, (GFunc)gtk_tree_path_free, NULL);
+		g_list_free(list);
 
-		for (; list != NULL; list = list->next) {
-			pounce = list->data;
+		pounces = purple_pounces_get_all();
+		for (; pounces != NULL; pounces = pounces->next) {
+			PurplePounce *pounce = pounces->data;
 			if (pounce == pounce_data->pounce) {
 				gtk_widget_set_sensitive(pounce_dialog->edit_button, TRUE);
 				break;
 			}
 		}
 
+		gtk_widget_set_sensitive(pounce_dialog->open_button, TRUE);
 		gtk_widget_set_sensitive(pounce_dialog->dismiss_button, TRUE);
 	} else {
+		gtk_widget_set_sensitive(pounce_dialog->open_button, TRUE);
 		gtk_widget_set_sensitive(pounce_dialog->edit_button, FALSE);
-		gtk_widget_set_sensitive(pounce_dialog->dismiss_button, FALSE);
+		gtk_widget_set_sensitive(pounce_dialog->dismiss_button, TRUE);
 	}
 
 
 }
 
 static void
-pounce_row_activated_cb(GtkTreeView *tv, GtkTreePath *path,
-	GtkTreeViewColumn *col, gpointer data)
-{
-	PidginNotifyPounceData *pounce_data;
-	PurpleAccount *account;
-	GtkTreeIter iter;
-
-	if(!gtk_tree_model_get_iter(GTK_TREE_MODEL(pounce_dialog->treemodel), &iter, path))
-		return;
-
-	gtk_tree_model_get(GTK_TREE_MODEL(pounce_dialog->treemodel), &iter,
-		PIDGIN_POUNCE_DATA, &pounce_data, -1);
-
-	account = pounce_data->account;
-
-	purple_conversation_new(PURPLE_CONV_TYPE_IM, account,
-		purple_account_get_username(account));
-
-	pounce_response_dismiss();
-}
-
-static void
 reset_mail_dialog(GtkDialog *unused)
 {
 	if (mail_dialog->in_use)
@@ -1388,6 +1410,7 @@
 
 	pounce_data->account = account;
 	pounce_data->pounce = pounce;
+	pounce_data->pouncee = g_strdup(purple_pounce_get_pouncee(pounce));
 
 	gtk_tree_store_append(pounce_dialog->treemodel, &iter, NULL);
 
@@ -1511,6 +1534,11 @@
 		gtk_window_set_title(GTK_WINDOW(dialog), _("New Pounces"));
 
 		button = gtk_dialog_add_button(GTK_DIALOG(dialog),
+						_("IM"), GTK_RESPONSE_YES);
+		gtk_widget_set_sensitive(button, FALSE);
+		spec_dialog->open_button = button;
+	
+		button = gtk_dialog_add_button(GTK_DIALOG(dialog),
 						_("Dismiss"), GTK_RESPONSE_NO);
 		gtk_widget_set_sensitive(button, FALSE);
 		spec_dialog->dismiss_button = button;
@@ -1563,11 +1591,11 @@
 		gtk_label_set_markup(GTK_LABEL(label), _("<span weight=\"bold\" size=\"larger\">You have pounced!</span>"));
 
 		sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(spec_dialog->treeview));
-		gtk_tree_selection_set_mode(sel, GTK_SELECTION_SINGLE);
+		gtk_tree_selection_set_mode(sel, GTK_SELECTION_MULTIPLE);
 		g_signal_connect(G_OBJECT(sel), "changed",
 			G_CALLBACK(pounce_row_selected_cb), NULL);
 		g_signal_connect(G_OBJECT(spec_dialog->treeview), "row-activated",
-			G_CALLBACK(pounce_row_activated_cb), NULL);
+			G_CALLBACK(pounce_response_open_ims), NULL);
 	}
 
 	gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);