# HG changeset patch # User Richard Laager # Date 1178736586 0 # Node ID e13e5dd8ecb584facc0570e0f8f688ae6dc5fa4e # Parent 6d8aa9d23019c9cc2b719d48eadc7b4f05aa7f58# Parent b08636a337217ee150aadbe076aaa9128e4ff435 merge of '066f7e387d4f546f1a7c777c08743463115d89d7' and '707317b4b82d2c54c4714cf3ddb9852f6e12ccdf' diff -r b08636a33721 -r e13e5dd8ecb5 ChangeLog --- a/ChangeLog Wed May 09 18:49:40 2007 +0000 +++ b/ChangeLog Wed May 09 18:49:46 2007 +0000 @@ -3,6 +3,7 @@ version 2.0.1 (??/??/????): * Buddy list update speedups when buddy icons are not being displayed. (Scott Wolchok) + * Custom smileys on MSN can be saved by right-clicking on them. Finch: * Userlist in chat windows, which can be turned on or off using diff -r b08636a33721 -r e13e5dd8ecb5 doc/finch.1.in --- a/doc/finch.1.in Wed May 09 18:49:40 2007 +0000 +++ b/doc/finch.1.in Wed May 09 18:49:46 2007 +0000 @@ -29,11 +29,12 @@ .SH DESCRIPTION .PP -\fBfinch\fR is a console-based modular messaging client capable of using -AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, Novell GroupWise, Lotus Sametime, -Zephyr, Gadu-Gadu, and QQ all at once. It has many common features found in -other clients, as well as many unique features. Finch is not endorsed by or -affiliated with America Online, ICQ, Microsoft, or Yahoo. +\fBfinch\fR is a console-based modular messaging client based on libpurple +which is capable of connecting to AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, +Novell GroupWise, Lotus Sametime, Zephyr, Gadu-Gadu, and QQ all at once. It has +many common features found in other clients, as well as many unique features. +Finch is not endorsed by or affiliated with America Online, ICQ, Microsoft, or +Yahoo. .SH OPTIONS The following options are provided by \fBfinch\fR using the standard GNU diff -r b08636a33721 -r e13e5dd8ecb5 doc/pidgin.1.in --- a/doc/pidgin.1.in Wed May 09 18:49:40 2007 +0000 +++ b/doc/pidgin.1.in Wed May 09 18:49:46 2007 +0000 @@ -28,11 +28,12 @@ .SH DESCRIPTION .PP -Pidgin is a modular messaging client capable of using AIM, MSN, Yahoo!, XMPP, -ICQ, IRC, SILC, SIP/SIMPLE Novell GroupWise, Lotus Sametime, Bonjour, -Zephyr, Gadu-Gadu, and QQ all at once. It has many common features found in -other clients, as well as many unique features. Pidgin is not endorsed by or -affiliated with America Online, ICQ, Microsoft, or Yahoo. +\fBpidgin\fR is a graphical modular messaging client based on libpurple +which is capable of connecting to AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, +Novell GroupWise, Lotus Sametime, Zephyr, Gadu-Gadu, and QQ all at once. It has +many common features found in other clients, as well as many unique features. +Finch is not endorsed by or affiliated with America Online, ICQ, Microsoft, or +Yahoo. .SH OPTIONS The following options are provided by Pidgin using the standard GNU diff -r b08636a33721 -r e13e5dd8ecb5 finch/gntblist.c --- a/finch/gntblist.c Wed May 09 18:49:40 2007 +0000 +++ b/finch/gntblist.c Wed May 09 18:49:46 2007 +0000 @@ -955,7 +955,7 @@ prompt = g_strdup_printf(_("Please enter the new name for %s"), name); - text = PURPLE_BLIST_NODE_IS_GROUP(node) ? _("Rename") : _("Alias"); + text = PURPLE_BLIST_NODE_IS_GROUP(node) ? _("Rename") : _("Set Alias"); purple_request_input(node, text, prompt, _("Enter empty string to reset the name."), name, FALSE, FALSE, NULL, text, G_CALLBACK(rename_blist_node), _("Cancel"), NULL, diff -r b08636a33721 -r e13e5dd8ecb5 finch/gntconv.c --- a/finch/gntconv.c Wed May 09 18:49:40 2007 +0000 +++ b/finch/gntconv.c Wed May 09 18:49:46 2007 +0000 @@ -396,17 +396,26 @@ gnt_menuitem_set_callback(item, toggle_timestamps_cb, ggc); if (purple_conversation_get_type(ggc->active_conv) == PURPLE_CONV_TYPE_IM) { - item = gnt_menuitem_new(_("Send File")); - gnt_menu_add_item(GNT_MENU(sub), item); - gnt_menuitem_set_callback(item, send_file_cb, ggc); + PurpleAccount *account = purple_conversation_get_account(ggc->active_conv); + PurplePluginProtocolInfo *pinfo = account->gc ? PURPLE_PLUGIN_PROTOCOL_INFO(account->gc->prpl) : NULL; + + if (pinfo && pinfo->get_info) { + item = gnt_menuitem_new(_("Get Info")); + gnt_menu_add_item(GNT_MENU(sub), item); + gnt_menuitem_set_callback(item, get_info_cb, ggc); + } item = gnt_menuitem_new(_("Add Buddy Pounce...")); gnt_menu_add_item(GNT_MENU(sub), item); gnt_menuitem_set_callback(item, add_pounce_cb, ggc); - item = gnt_menuitem_new(_("Get Info")); - gnt_menu_add_item(GNT_MENU(sub), item); - gnt_menuitem_set_callback(item, get_info_cb, ggc); + if (pinfo && pinfo->send_file && + (!pinfo->can_receive_file || + pinfo->can_receive_file(account->gc, purple_conversation_get_name(ggc->active_conv)))) { + item = gnt_menuitem_new(_("Send File")); + gnt_menu_add_item(GNT_MENU(sub), item); + gnt_menuitem_set_callback(item, send_file_cb, ggc); + } generate_send_to_menu(ggc); } diff -r b08636a33721 -r e13e5dd8ecb5 libpurple/prpl.c --- a/libpurple/prpl.c Wed May 09 18:49:40 2007 +0000 +++ b/libpurple/prpl.c Wed May 09 18:49:46 2007 +0000 @@ -128,7 +128,7 @@ purple_prpl_got_user_status(PurpleAccount *account, const char *name, const char *status_id, ...) { - GSList *list; + GSList *list, *l; PurpleBuddy *buddy; PurplePresence *presence; PurpleStatus *status; @@ -140,24 +140,30 @@ g_return_if_fail(status_id != NULL); g_return_if_fail(purple_account_is_connected(account) || purple_account_is_connecting(account)); - if ((buddy = purple_find_buddy(account, name)) == NULL) + if((list = purple_find_buddies(account, name)) == NULL) return; - presence = purple_buddy_get_presence(buddy); - status = purple_presence_get_status(presence, status_id); + for(l = list; l != NULL; l = l->next) { + buddy = l->data; - g_return_if_fail(status != NULL); + presence = purple_buddy_get_presence(buddy); + status = purple_presence_get_status(presence, status_id); - old_status = purple_presence_get_active_status(presence); + if(NULL == status) + continue; - va_start(args, status_id); - purple_status_set_active_with_attrs(status, TRUE, args); - va_end(args); + old_status = purple_presence_get_active_status(presence); - list = purple_find_buddies(account, name); - g_slist_foreach(list, (GFunc)purple_blist_update_buddy_status, old_status); + va_start(args, status_id); + purple_status_set_active_with_attrs(status, TRUE, args); + va_end(args); + + purple_blist_update_buddy_status(buddy, old_status); + } + g_slist_free(list); + /* we get to re-use the last status we found */ if (!purple_status_is_online(status)) serv_got_typing_stopped(purple_account_get_connection(account), name); } @@ -165,6 +171,7 @@ void purple_prpl_got_user_status_deactive(PurpleAccount *account, const char *name, const char *status_id) { + GSList *list, *l; PurpleBuddy *buddy; PurplePresence *presence; PurpleStatus *status; @@ -174,14 +181,22 @@ g_return_if_fail(status_id != NULL); g_return_if_fail(purple_account_is_connected(account) || purple_account_is_connecting(account)); - if ((buddy = purple_find_buddy(account, name)) == NULL) + if((list = purple_find_buddies(account, name)) == NULL) return; - presence = purple_buddy_get_presence(buddy); - status = purple_presence_get_status(presence, status_id); + for(l = list; l != NULL; l = l->next) { + buddy = l->data; + + presence = purple_buddy_get_presence(buddy); + status = purple_presence_get_status(presence, status_id); - g_return_if_fail(status != NULL); - purple_status_set_active(status, FALSE); + if(NULL == status) + continue; + + purple_status_set_active(status, FALSE); + } + + g_slist_free(list); } static void diff -r b08636a33721 -r e13e5dd8ecb5 libpurple/status.c --- a/libpurple/status.c Wed May 09 18:49:40 2007 +0000 +++ b/libpurple/status.c Wed May 09 18:49:46 2007 +0000 @@ -134,8 +134,6 @@ 10 /* Offline messageable */ }; -static GHashTable *buddy_presences = NULL; - #define SCORE_IDLE 8 #define SCORE_IDLE_TIME 9 #define SCORE_OFFLINE_MESSAGE 10 @@ -1118,32 +1116,17 @@ purple_presence_new_for_buddy(PurpleBuddy *buddy) { PurplePresence *presence; - PurpleStatusBuddyKey *key; PurpleAccount *account; g_return_val_if_fail(buddy != NULL, NULL); account = buddy->account; - key = g_new0(PurpleStatusBuddyKey, 1); - key->account = buddy->account; - key->name = g_strdup(buddy->name); - - presence = g_hash_table_lookup(buddy_presences, key); - if (presence == NULL) - { - presence = purple_presence_new(PURPLE_PRESENCE_CONTEXT_BUDDY); + presence = purple_presence_new(PURPLE_PRESENCE_CONTEXT_BUDDY); - presence->u.buddy.name = g_strdup(buddy->name); - presence->u.buddy.account = buddy->account; - presence->statuses = purple_prpl_get_statuses(buddy->account, presence); + presence->u.buddy.name = g_strdup(buddy->name); + presence->u.buddy.account = buddy->account; + presence->statuses = purple_prpl_get_statuses(buddy->account, presence); - g_hash_table_insert(buddy_presences, key, presence); - } - else - { - g_free(key->name); - g_free(key); - } presence->u.buddy.buddy = buddy; return presence; @@ -1156,13 +1139,6 @@ if (purple_presence_get_context(presence) == PURPLE_PRESENCE_CONTEXT_BUDDY) { - PurpleStatusBuddyKey key; - - key.account = presence->u.buddy.account; - key.name = presence->u.buddy.name; - - g_hash_table_remove(buddy_presences, &key); - g_free(presence->u.buddy.name); } else if (purple_presence_get_context(presence) == PURPLE_PRESENCE_CONTEXT_CONV) @@ -1639,41 +1615,6 @@ primitive_scores[index] = GPOINTER_TO_INT(value); } -static guint -purple_buddy_presences_hash(gconstpointer key) -{ - const PurpleStatusBuddyKey *me = key; - guint ret; - char *str; - - str = g_strdup_printf("%p%s", me->account, me->name); - ret = g_str_hash(str); - g_free(str); - - return ret; -} - -static gboolean -purple_buddy_presences_equal(gconstpointer a, gconstpointer b) -{ - PurpleStatusBuddyKey *key_a = (PurpleStatusBuddyKey *)a; - PurpleStatusBuddyKey *key_b = (PurpleStatusBuddyKey *)b; - - if(key_a->account == key_b->account && - !strcmp(key_a->name, key_b->name)) - return TRUE; - else - return FALSE; -} - -static void -purple_buddy_presences_key_free(gpointer a) -{ - PurpleStatusBuddyKey *key = (PurpleStatusBuddyKey *)a; - g_free(key->name); - g_free(key); -} - void * purple_status_get_handle(void) { static int handle; @@ -1725,19 +1666,9 @@ purple_prefs_connect_callback(handle, "/purple/status/scores/offline_msg", score_pref_changed_cb, GINT_TO_POINTER(SCORE_OFFLINE_MESSAGE)); - - buddy_presences = g_hash_table_new_full(purple_buddy_presences_hash, - purple_buddy_presences_equal, - purple_buddy_presences_key_free, NULL); } void purple_status_uninit(void) { - if (buddy_presences != NULL) - { - g_hash_table_destroy(buddy_presences); - - buddy_presences = NULL; - } } diff -r b08636a33721 -r e13e5dd8ecb5 pidgin/gtkdialogs.c --- a/pidgin/gtkdialogs.c Wed May 09 18:49:40 2007 +0000 +++ b/pidgin/gtkdialogs.c Wed May 09 18:49:46 2007 +0000 @@ -362,7 +362,8 @@ str = g_string_sized_new(4096); g_string_append_printf(str, - _("%s is a modular messaging client capable of using " + _("%s is a graphical modular messaging client based on " + "libpurple which is capable of connecting to " "AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, SIP/SIMPLE, " "Novell GroupWise, Lotus Sametime, Bonjour, Zephyr, " "Gadu-Gadu, and QQ all at once. " diff -r b08636a33721 -r e13e5dd8ecb5 pidgin/pixmaps/emotes/default/22/theme --- a/pidgin/pixmaps/emotes/default/22/theme Wed May 09 18:49:40 2007 +0000 +++ b/pidgin/pixmaps/emotes/default/22/theme Wed May 09 18:49:46 2007 +0000 @@ -21,7 +21,7 @@ moneymouth.png :-$ foot-in-mouth.png :-! shout.png >:o >:O -! skywalker.png C:-) c:-) C:) c:) +! skywalker.png C:-) c:-) C:) c:) ! monkey.png :-(|) ### Following AIM 6.1 @@ -42,6 +42,8 @@ crying.png :'( shut-mouth.png :-X glasses-cool.png 8-) +! skywalker.png C:-) c:-) C:) c:) +! monkey.png :-(|) ### Following Windows Live Messenger 8.1 [MSN] @@ -121,6 +123,14 @@ eyeroll.png 8-) yawn.png |-) goat.png (nah) +! skywalker.png C:-) c:-) C:) c:) +! monkey.png :-(|) + +### Hidden MSN emotes +sigarette.png (ci) (CI) +handcuffs.png (%) +console.png (xx) (XX) +fingers-crossed.png (yn) (YN) ### Following QQ 2006 [QQ] @@ -217,6 +227,8 @@ star.png /星星 /<*> /xixing /star girl.png /女 /<00> /nv /woman boy.png /男 /<11> /nan /man +! skywalker.png C:-) c:-) C:) c:) +! monkey.png :-(|) ### Following ICQ 5.1 [ICQ] @@ -248,6 +260,8 @@ good.png *THUMBS\ UP* beer.png *DRINK* in-love.png *IN\ LOVE* +! skywalker.png C:-) c:-) C:) c:) +! monkey.png :-(|) ### Following Yahoo! Messenger 8.1 [Yahoo] @@ -294,7 +308,7 @@ eyeroll.png 8-| silly.png 8-} clap.png =D> =d> -#phbbbt >:P >:p MISSING/YAHOO 6: "You are dumb! - No you are!!" => tongue on pissed of smily +mad-tongue.png >:P >:p #timeout :-t :-T MISSING: "Let's have a break." hug-left.png >:D< >:d< love-over.png =(( @@ -302,8 +316,13 @@ rotfl.png =)) #loser L-) l-) MISSING/YAHOO 6: "Loser!" party.png <:-P <:-p +nailbiting.png :-SS :-Ss :-sS :-ss cowboy.png <):) desire.png 8-> +! skywalker.png C:-) c:-) C:) c:) +! monkey.png :-(|) + +### Hidden Yahoo emotes alien.png =:) >-) beat-up.png b-( B-( chicken.png ~:> @@ -324,17 +343,16 @@ flag.png **== clover.png %%- musical-note.png :-" -nailbiting.png :-SS :-ss giggle.png ;)) worship.png ^:)^ star.png (*) -mad-tongue.png >:p -#yahoo_waving.gif >:/ TODO -#yahoo_talktohand.gif :-@ TODO -#yahoo_youkiddingme.gif :-j :-J TODO +#waving.png >:/ +#talktohand.png :-@ +#youkiddingme.png :-j :-J ### These only work in a certain IMvironment -#yahoo_malefighter1.gif o-> O-> -#yahoo_malefighter2.gif o=> O=> -#yahoo_femalefighter.gif o-+ O-+ +#malefighter1.png o-> O-> +#malefighter2.png o=> O=> +#femalefighter.png o-+ O-+ yin-yang.png (%) +