# HG changeset patch # User Christian Hammond # Date 1058336119 0 # Node ID 82e7eaa67406bdcfe317c42c57b5e761bec4dadd # Parent 084f6c031783c78855196c3f514390b2ca9dba9a [gaim-migrate @ 6622] A last-minute surprise to all of gaim's MSN users who wanted this feature. Chats can now be initiated by right-clicking an MSN user and choosing Initiate Chat. Note that chats in MSN don't work like chats elsewhere, because IMs and Chats in MSN are the exact same things, and we can't detect the number of users before connecting to the switchboard. committer: Tailor Script diff -r 084f6c031783 -r 82e7eaa67406 ChangeLog --- a/ChangeLog Wed Jul 16 04:53:09 2003 +0000 +++ b/ChangeLog Wed Jul 16 06:15:19 2003 +0000 @@ -27,6 +27,8 @@ * Fixed all known MSN chat bugs * Fixed HTTP redirect handling in smiley retrieval. This fixes the problems with some smiley themes. + * Chats in MSN can now be initiated by right-clicking a buddy and + choosing Initiate Chat. * MSN Alerts and incoming MSN pages no longer pop up several error dialogs * Ability to view iChat "Available" messages for AIM * Stores your buddy icon on the server for AIM diff -r 084f6c031783 -r 82e7eaa67406 src/protocols/msn/msn.c --- a/src/protocols/msn/msn.c Wed Jul 16 04:53:09 2003 +0000 +++ b/src/protocols/msn/msn.c Wed Jul 16 06:15:19 2003 +0000 @@ -237,6 +237,31 @@ data); } +static void +initiate_chat_cb(GaimConnection *gc, const char *passport) +{ + GaimAccount *account = gaim_connection_get_account(gc); + MsnSession *session = gc->proto_data; + MsnSwitchBoard *swboard; + MsnUser *user; + + if ((swboard = msn_session_open_switchboard(session)) == NULL) { + gaim_connection_error(gc, _("Write error")); + + return; + } + + user = msn_user_new(session, passport, NULL); + + msn_switchboard_set_user(swboard, user); + + swboard->total_users = 1; + + swboard->chat = serv_got_joined_chat(gc, ++swboard->chat_id, "MSN Chat"); + + gaim_chat_add_user(GAIM_CHAT(swboard->chat), + gaim_account_get_username(account), NULL); +} /************************************************************************** * Protocol Plugin ops @@ -373,6 +398,7 @@ static GList * msn_buddy_menu(GaimConnection *gc, const char *who) { + GaimAccount *account = gaim_connection_get_account(gc); MsnUser *user; struct proto_buddy_menu *pbm; struct buddy *b; @@ -391,6 +417,14 @@ } } + if (g_ascii_strcasecmp(who, gaim_account_get_username(account))) { + pbm = g_new0(struct proto_buddy_menu, 1); + pbm->label = _("Initiate Chat"); + pbm->callback = initiate_chat_cb; + pbm->gc = gc; + m = g_list_append(m, pbm); + } + return m; } diff -r 084f6c031783 -r 82e7eaa67406 src/protocols/msn/switchboard.c --- a/src/protocols/msn/switchboard.c Wed Jul 16 04:53:09 2003 +0000 +++ b/src/protocols/msn/switchboard.c Wed Jul 16 06:15:19 2003 +0000 @@ -151,9 +151,9 @@ GaimConnection *gc = account->gc; MsnSwitchBoard *swboard = servconn->data; - swboard->total_users = atoi(params[2]); + swboard->total_users = atoi(params[2]) + 1; - if (swboard->total_users > 1) { + if (swboard->total_users > 2) { if (swboard->chat == NULL) { GaimConversation *conv; @@ -185,7 +185,7 @@ passport = params[0]; - if (swboard->total_users == 1) { + if (swboard->total_users == 2 && swboard->chat == NULL) { GaimConversation *conv; conv = gaim_find_conversation(msn_user_get_passport(swboard->user));