changeset 15443:6e2c5584c965

merge of '5844728cb381ec679649718ebf1beeced21b6031' and 'fd490edba03b26caaa8a026bda768acfe7dc7759'
author Sean Egan <seanegan@gmail.com>
date Sun, 28 Jan 2007 08:51:47 +0000
parents 8ff4af28c9f9 (diff) 2dc742344eb7 (current diff)
children 8721df7d419f
files
diffstat 9 files changed, 73 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/console/libgnt/gntmain.c	Sun Jan 28 08:51:21 2007 +0000
+++ b/console/libgnt/gntmain.c	Sun Jan 28 08:51:47 2007 +0000
@@ -211,9 +211,9 @@
 	int result;
 	channel = g_io_channel_unix_new(STDIN_FILENO);
 
+#if 0
 	g_io_channel_set_encoding(channel, NULL, NULL);
 	g_io_channel_set_buffered(channel, FALSE);
-#if 0
 	g_io_channel_set_flags(channel, G_IO_FLAG_NONBLOCK, NULL );
 #endif
 
@@ -303,9 +303,9 @@
 	if (channel)
 		return;
 	
-	setup_io();
+	locale = setlocale(LC_ALL, "");
 
-	locale = setlocale(LC_ALL, "");
+	setup_io();
 
 	if (locale && (strstr(locale, "UTF") || strstr(locale, "utf")))
 		ascii_only = FALSE;
--- a/libpurple/protocols/irc/irc.h	Sun Jan 28 08:51:21 2007 +0000
+++ b/libpurple/protocols/irc/irc.h	Sun Jan 28 08:51:47 2007 +0000
@@ -116,6 +116,7 @@
 void irc_msg_chanmode(struct irc_conn *irc, const char *name, const char *from, char **args);
 void irc_msg_endwhois(struct irc_conn *irc, const char *name, const char *from, char **args);
 void irc_msg_endmotd(struct irc_conn *irc, const char *name, const char *from, char **args);
+void irc_msg_features(struct irc_conn *irc, const char *name, const char *from, char **args);
 void irc_msg_invite(struct irc_conn *irc, const char *name, const char *from, char **args);
 void irc_msg_inviteonly(struct irc_conn *irc, const char *name, const char *from, char **args);
 void irc_msg_ison(struct irc_conn *irc, const char *name, const char *from, char **args);
--- a/libpurple/protocols/irc/msgs.c	Sun Jan 28 08:51:21 2007 +0000
+++ b/libpurple/protocols/irc/msgs.c	Sun Jan 28 08:51:47 2007 +0000
@@ -40,6 +40,8 @@
                                    const char *from, const char *to,
                                    const char *rawmsg, gboolean notice);
 
+static char *mode_chars = NULL;
+
 static char *irc_mask_nick(const char *mask)
 {
 	char *end, *buf;
@@ -75,6 +77,24 @@
 	gaim_debug(GAIM_DEBUG_INFO, "irc", "Unrecognized message: %s\n", args[0]);
 }
 
+void irc_msg_features(struct irc_conn *irc, const char *name, const char *from, char **args)
+{
+	gchar **features;
+	int i;
+
+	if (!args || !args[0] || !args[1])
+		return;
+
+	features = g_strsplit(args[1], " ", -1);
+	for (i = 0; features[i]; i++) {
+		char *val;
+		if (!strncmp(features[i], "PREFIX=", 7)) {
+			if ((val = strchr(features[i] + 7, ')')) != NULL)
+				mode_chars = g_strdup(val + 1);
+		}
+	}
+}
+
 void irc_msg_away(struct irc_conn *irc, const char *name, const char *from, char **args)
 {
 	GaimConnection *gc;
@@ -408,6 +428,9 @@
 				} else if(*cur == '+') {
 					f = GAIM_CBFLAGS_VOICE;
 					cur++;
+				} else if(mode_chars
+					  && strchr(mode_chars, *cur)) {
+					cur++;
 				}
 				tmp = g_strndup(cur, end - cur);
 				users = g_list_prepend(users, tmp);
--- a/libpurple/protocols/irc/parse.c	Sun Jan 28 08:51:21 2007 +0000
+++ b/libpurple/protocols/irc/parse.c	Sun Jan 28 08:51:47 2007 +0000
@@ -52,6 +52,7 @@
 	char *format;
 	void (*cb)(struct irc_conn *irc, const char *name, const char *from, char **args);
 } _irc_msgs[] = {
+	{ "005", "n*", irc_msg_features },	/* Feature list			*/
 	{ "301", "nn:", irc_msg_away },		/* User is away			*/
 	{ "303", "n:", irc_msg_ison },		/* ISON reply			*/
 	{ "311", "nnvvv:", irc_msg_whois },	/* Whois user			*/
--- a/pidgin/gaimstock.c	Sun Jan 28 08:51:21 2007 +0000
+++ b/pidgin/gaimstock.c	Sun Jan 28 08:51:47 2007 +0000
@@ -46,6 +46,7 @@
 #endif
 	{ GAIM_STOCK_BGCOLOR,         "buttons", "change-bgcolor-small.png" },
 	{ GAIM_STOCK_BLOCK,           NULL,      GTK_STOCK_STOP             },
+	{ GAIM_STOCK_UNBLOCK,         NULL,      GTK_STOCK_STOP /* XXX: */  },
 	{ GAIM_STOCK_CHAT,            NULL,      GTK_STOCK_JUMP_TO          },
 	{ GAIM_STOCK_CLEAR,           NULL,      GTK_STOCK_CLEAR            },
 	{ GAIM_STOCK_CLOSE_TABS,      NULL,      GTK_STOCK_CLOSE            },
--- a/pidgin/gaimstock.h	Sun Jan 28 08:51:21 2007 +0000
+++ b/pidgin/gaimstock.h	Sun Jan 28 08:51:47 2007 +0000
@@ -38,6 +38,7 @@
 #define GAIM_STOCK_AWAY            "gaim-away"
 #define GAIM_STOCK_BGCOLOR         "gaim-bgcolor"
 #define GAIM_STOCK_BLOCK           "gaim-block"
+#define GAIM_STOCK_UNBLOCK         "gaim-unblock"
 #define GAIM_STOCK_CHAT            "gaim-chat"
 #define GAIM_STOCK_CLEAR           "gaim-clear"
 #define GAIM_STOCK_CLOSE_TABS      "gaim-close-tab"
--- a/pidgin/gtkconv.c	Sun Jan 28 08:51:21 2007 +0000
+++ b/pidgin/gtkconv.c	Sun Jan 28 08:51:47 2007 +0000
@@ -712,6 +712,20 @@
 }
 
 static void
+unblock_cb(GtkWidget *widget, GaimGtkConversation *gtkconv)
+{
+	GaimConversation *conv = gtkconv->active_conv;
+	GaimAccount *account;
+
+	account = gaim_conversation_get_account(conv);
+
+	if (account != NULL && gaim_account_is_connected(account))
+		gaim_gtk_request_add_permit(account, gaim_conversation_get_name(conv));
+
+	gtk_widget_grab_focus(GAIM_GTK_CONVERSATION(conv)->entry);
+}
+
+static void
 do_invite(GtkWidget *w, int resp, InviteBuddyInfo *info)
 {
 	const char *buddy, *message;
@@ -1297,6 +1311,17 @@
 }
 
 static void
+menu_unblock_cb(gpointer data, guint action, GtkWidget *widget)
+{
+	GaimGtkWindow *win = data;
+	GaimConversation *conv;
+
+	conv = gaim_gtk_conv_window_get_active_conversation(win);
+
+	unblock_cb(NULL, GAIM_GTK_CONVERSATION(conv));
+}
+
+static void
 menu_add_remove_cb(gpointer data, guint action, GtkWidget *widget)
 {
 	GaimGtkWindow *win = data;
@@ -2735,6 +2760,8 @@
 			"<StockItem>", GAIM_STOCK_EDIT },
 	{ N_("/Conversation/_Block..."), NULL, menu_block_cb, 0,
 			"<StockItem>", GAIM_STOCK_BLOCK },
+	{ N_("/Conversation/_Unblock..."), NULL, menu_unblock_cb, 0,
+			"<StockItem>", GAIM_STOCK_UNBLOCK },
 	{ N_("/Conversation/_Add..."), NULL, menu_add_remove_cb, 0,
 			"<StockItem>", GTK_STOCK_ADD },
 	{ N_("/Conversation/_Remove..."), NULL, menu_add_remove_cb, 0,
@@ -2951,6 +2978,10 @@
 		gtk_item_factory_get_widget(win->menu.item_factory,
 		                            N_("/Conversation/Block..."));
 
+	win->menu.unblock = 
+		gtk_item_factory_get_widget(win->menu.item_factory,
+					    N_("/Conversation/Unblock..."));
+	
 	win->menu.add =
 		gtk_item_factory_get_widget(win->menu.item_factory,
 		                            N_("/Conversation/Add..."));
@@ -5627,7 +5658,13 @@
 		gtk_widget_show(win->menu.get_info);
 		gtk_widget_hide(win->menu.invite);
 		gtk_widget_show(win->menu.alias);
-		gtk_widget_show(win->menu.block);
+ 		if (gaim_privacy_check(account, gaim_conversation_get_name(conv))) {
+ 			gtk_widget_hide(win->menu.unblock);
+ 			gtk_widget_show(win->menu.block);
+ 		} else {
+ 			gtk_widget_hide(win->menu.block);
+ 			gtk_widget_show(win->menu.unblock);
+ 		}
 
 		if ((account == NULL) || gaim_find_buddy(account, gaim_conversation_get_name(conv)) == NULL) {
 			gtk_widget_show(win->menu.add);
@@ -6574,10 +6611,9 @@
 	GaimConversation *conv;
 
 	gtkconv = get_gtkconv_with_contact(gaim_buddy_get_contact(buddy));
-	if (gtkconv)
-	{
+	if (gtkconv) {
 		conv = gtkconv->active_conv;
-		gaim_gtkconv_update_fields(conv, GAIM_GTKCONV_TAB_ICON);
+		gaim_gtkconv_update_fields(conv, GAIM_GTKCONV_TAB_ICON | GAIM_GTKCONV_MENU);
 	}
 }
 
--- a/pidgin/gtkconvwin.h	Sun Jan 28 08:51:21 2007 +0000
+++ b/pidgin/gtkconvwin.h	Sun Jan 28 08:51:47 2007 +0000
@@ -56,6 +56,7 @@
 
 		GtkWidget *alias;
 		GtkWidget *block;
+		GtkWidget *unblock;
 		GtkWidget *add;
 		GtkWidget *remove;
 
--- a/pidgin/gtkprivacy.c	Sun Jan 28 08:51:21 2007 +0000
+++ b/pidgin/gtkprivacy.c	Sun Jan 28 08:51:47 2007 +0000
@@ -529,9 +529,9 @@
 confirm_permit_block_cb(GaimGtkPrivacyRequestData *data, int option)
 {
 	if (data->block)
-		gaim_privacy_deny_add(data->account, data->name, FALSE);
+		gaim_privacy_deny(data->account, data->name, FALSE, FALSE);
 	else
-		gaim_privacy_permit_add(data->account, data->name, FALSE);
+		gaim_privacy_allow(data->account, data->name, FALSE, FALSE);
 
 	destroy_request_data(data);
 }