# HG changeset patch # User Sean Egan # Date 1169974307 0 # Node ID 6e2c5584c965abfa29e5f6c65332d78b25c7a19a # Parent 8ff4af28c9f94feb708dafb73458c7eeb5f1ca37# Parent 2dc742344eb70533ba906d543a49f54bd88f6d9d merge of '5844728cb381ec679649718ebf1beeced21b6031' and 'fd490edba03b26caaa8a026bda768acfe7dc7759' diff -r 2dc742344eb7 -r 6e2c5584c965 console/libgnt/gntmain.c --- 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; diff -r 2dc742344eb7 -r 6e2c5584c965 libpurple/protocols/irc/irc.h --- 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); diff -r 2dc742344eb7 -r 6e2c5584c965 libpurple/protocols/irc/msgs.c --- 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); diff -r 2dc742344eb7 -r 6e2c5584c965 libpurple/protocols/irc/parse.c --- 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 */ diff -r 2dc742344eb7 -r 6e2c5584c965 pidgin/gaimstock.c --- 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 }, diff -r 2dc742344eb7 -r 6e2c5584c965 pidgin/gaimstock.h --- 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" diff -r 2dc742344eb7 -r 6e2c5584c965 pidgin/gtkconv.c --- 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 @@ "", GAIM_STOCK_EDIT }, { N_("/Conversation/_Block..."), NULL, menu_block_cb, 0, "", GAIM_STOCK_BLOCK }, + { N_("/Conversation/_Unblock..."), NULL, menu_unblock_cb, 0, + "", GAIM_STOCK_UNBLOCK }, { N_("/Conversation/_Add..."), NULL, menu_add_remove_cb, 0, "", 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); } } diff -r 2dc742344eb7 -r 6e2c5584c965 pidgin/gtkconvwin.h --- 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; diff -r 2dc742344eb7 -r 6e2c5584c965 pidgin/gtkprivacy.c --- 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); }