Mercurial > pidgin
changeset 20411:ed303260e05a
propagate of im.pidgin.pidgin to im.pidgin.cpw.khc.msnp14
author | Ka-Hing Cheung <khc@hxbc.us> |
---|---|
date | Sun, 06 May 2007 02:40:23 +0000 |
parents | b668951121d8 (diff) 522ade544156 (current diff) |
children | 522f618a44b4 |
files | libpurple/internal.h libpurple/protocols/msn/msn-utils.c libpurple/protocols/msn/msn-utils.h libpurple/protocols/msn/msn.c libpurple/protocols/msn/user.c |
diffstat | 65 files changed, 640 insertions(+), 321 deletions(-) [+] |
line wrap: on
line diff
--- a/AUTHORS Sun May 06 02:17:45 2007 +0000 +++ b/AUTHORS Sun May 06 02:40:23 2007 +0000 @@ -14,7 +14,7 @@ ICQ: 96642211 Yahoo: SeanEgn MSN: seanegn@hotmail.com - Jabber: seanegn@jabber.org + XMPP: seanegn@jabber.org Gadu-Gadu: 1511497 Daniel 'datallah' Atallah - Developer @@ -55,7 +55,7 @@ Rob Flynn <gaim@robflynn.com> - maintainer Adam Fritzler - libfaim maintainer Syd Logan - hacker and designated driver [lazy bum] -Jim Seymour - Jabber developer +Jim Seymour - XMPP developer Mark Spencer <markster@marko.net> - original author Eric Warmenhoven <eric@warmenhoven.org> - lead developer
--- a/COPYRIGHT Sun May 06 02:17:45 2007 +0000 +++ b/COPYRIGHT Sun May 06 02:40:23 2007 +0000 @@ -17,6 +17,7 @@ Christopher Ayoup Alex Badea John Bailey +R. Tyler Ballance Chris Banal Luca Barbato Levi Bard
--- a/ChangeLog Sun May 06 02:17:45 2007 +0000 +++ b/ChangeLog Sun May 06 02:40:23 2007 +0000 @@ -1,6 +1,17 @@ Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul -version 2.0.0: +version 2.0.1 (??/??/????): + * Buddy list update speedups when buddy icons are not being + displayed. (Scott Wolchok) + + Finch: + * Userlist in chat windows, which can be turned on or off using + "/users" command. + * Menus in the conversation windows. + * Improved tab completion support. + * Ctrl+c prompts with a dialog before exiting. + +version 2.0.0 (5/3/2007): * The project has new names - libpurple for the core, Pidgin for the GTK+ UI and Finch for the ncurses based console UI (AOL LLC) @@ -199,8 +210,9 @@ * Removed the Napster and TOC protocols plugins Other Noteworthy Changes: - * UPnP and NAT traversal support (Adam J. Warrington, Google Summer of + * NAT traversal support via UPnP (Adam J. Warrington, Google Summer of Code) + * NAT traversal support via NAT-PMP (Evan Schoenberg and R. Tyler Ballance) * The modify account dialog now contains two tabs, which should display better at lower resolutions (Sadrul Habib Chowdhury) * New "find buddy" results dialog (Alex Converse)
--- a/ChangeLog.API Sun May 06 02:17:45 2007 +0000 +++ b/ChangeLog.API Sun May 06 02:40:23 2007 +0000 @@ -1,6 +1,6 @@ Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul -version 2.0.0: +version 2.0.0 (5/3/2007): Please note all functions, defines, and data structures have been re-namespaced to match the new names of Pidgin, Finch, and libpurple. All gaim_gtk_* functions are now pidgin_*, former libgaim functions are
--- a/ChangeLog.win32 Sun May 06 02:17:45 2007 +0000 +++ b/ChangeLog.win32 Sun May 06 02:40:23 2007 +0000 @@ -1,4 +1,4 @@ -version 2.0.0: +version 2.0.0 (5/3/2007): * URI Handler support added via `pidgin.exe --protocolhandler=` * Running a second instance will popup the Buddy List, if possible. * Updated GTK+ to 2.10.11 (rev.a) (Win98/ME will need to use 2.6.10)
--- a/NEWS Sun May 06 02:17:45 2007 +0000 +++ b/NEWS Sun May 06 02:40:23 2007 +0000 @@ -1,5 +1,64 @@ Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul +2.0.0 (5/3/2007): + Sean: 2.0.0! It's real exciting to finally release Pidgin 2.0.0! I'm + really proud of all the work we've all done. I'm pumped. And, while + I could go on about all the amazing thing that have been added since + 1.5.0, what I'm really excited about is getting back to a regular, + rapid, release cycle of active, open development, unhindered by legal + quandries. Huge thanks to everyone involved. + + Luke: We have finally managed to get 2.0.0 out the door, after nearly + but not quite 2 years of effort and fustration. No one regrets more + than I that we were unable to make any of betas 3-6 the actual release. + But at long last, it is out, and life can return to a more normal + state. There were many tough calls to be made in the last 2 years. + Not everyone has agreed with the resulting decisions, that is un- + fortunate, but unavoidable. Suffice it to say that despite what + some users appear to think, a ton of thought, argument, discussion, + and experimentation has gone into this release. This release + builds on many years of experience, both as developers writing the + code, users using it, and in supporting other users. I hope that + those who download and install this will give it a fair shot, and + attempt to avoid knee-jerk reactions. + + Evan: One small step for bird, one giant leap for birdkind... except + this is hardly one small step. A lot more has changed from Gaim 1.5.0 + than just the name. Pidgin has a *very* attractive new look, a whole + new member of the family (Finch, formerly gaim-console) has been born, + and libpurple has come into its own as a solid, full-featured library + powering the greatest IM clients around. Bugs were fixed and + features were added by the hundreds (thousands?) since the last + major release, all while improving performance and resisting feature + creep. As Luke said, a ton of thought and effort has gone into + Pidgin 2.0.0; I'm proud to have played a part. + + Stu: We did it! finally, we have 2.0.0. It's been a long time coming, + but there's a great deal of goodness here. When I say a long time, I'm + not kidding - it's been 972 days since we branched off "oldstatus" + (aka 1.x). The early Greeks were uncertain as to whether 2 was a + number at all (or if we'd ever make this release) - it has a beginning + and an end but no middle (much like our unfortunately quiet development + period). 2 is the first prime number and the only even prime. 2 is also + the first deficient number (oh well). There are only 10 types of people + in the world - those who like our new names and those who do not. + Enjoy! + + Richard: I'm very glad that we've finally gotten 2.0.0 released and + I look forward to returning to a more normal development schedule. + Again, a big thanks to everyone who helped in any way to get things + where they are today. Congratulations everyone! + + Sadrul: My first NEWS, and on what an occasion! Pidgin 2.0.0 is finally + released!! And it's *really* very good!!! Give your soul a break ... + Use Pidgin! + + Daniel: There has been a fair amount of weeping and gnashing of teeth + due to the delays in getting this beast out. I'm really happy that it + is done. I'm also very happy with what we're releasing - I think it is + far more stable, packed with useful features and, dare I say, prettier + than any previous release. + 2.0.0beta7 (4/29/2007): Sean: Beta 7. The final beta. A few major changes from beta6. For starters, we have some new names. That's pretty cool. We have a new
--- a/README Sun May 06 02:17:45 2007 +0000 +++ b/README Sun May 06 02:40:23 2007 +0000 @@ -4,7 +4,7 @@ libpurple is a library intended to be used by programmers seeking to write an IM client that connects to many IM networks. It supports -AIM, ICQ, Jabber, MSN and Yahoo!, among others. +AIM, ICQ, XMPP, MSN and Yahoo!, among others. Pidgin is an graphical IM client written in C which uses the GTK+ toolkit.
--- a/configure.ac Sun May 06 02:17:45 2007 +0000 +++ b/configure.ac Sun May 06 02:40:23 2007 +0000 @@ -46,8 +46,8 @@ m4_define([purple_lt_current], [0]) m4_define([purple_major_version], [2]) m4_define([purple_minor_version], [0]) -m4_define([purple_micro_version], [0]) -m4_define([purple_version_suffix], [beta7]) +m4_define([purple_micro_version], [1]) +m4_define([purple_version_suffix], [devel]) m4_define([purple_version], [purple_major_version.purple_minor_version.purple_micro_version]) m4_define([purple_display_version], purple_version[]m4_ifdef([purple_version_suffix],[purple_version_suffix])) @@ -55,8 +55,8 @@ m4_define([gnt_lt_current], [0]) m4_define([gnt_major_version], [1]) m4_define([gnt_minor_version], [0]) -m4_define([gnt_micro_version], [0]) -m4_define([gnt_version_suffix], [beta7]) +m4_define([gnt_micro_version], [1]) +m4_define([gnt_version_suffix], [devel]) m4_define([gnt_version], [gnt_major_version.gnt_minor_version.gnt_micro_version]) m4_define([gnt_display_version], gnt_version[]m4_ifdef([gnt_version_suffix],[gnt_version_suffix])) @@ -93,8 +93,6 @@ GNT_LT_VERSION_INFO="gnt_lt_current:gnt_micro_version:gnt_minor_version" AC_SUBST(GNT_LT_VERSION_INFO) -AC_DEFINE(PIDGIN_NAME, "Pidgin", [The user-visible application name]) - AC_PATH_PROG(sedpath, sed) dnl Storing configure arguments @@ -1187,7 +1185,7 @@ PERL_CFLAGS=`$perlpath -MExtUtils::Embed -e ccopts 2>/dev/null` if test "_$PERL_CFLAGS" = _ ; then AC_MSG_RESULT([not found, building without perl.]) - enable_perl = no + enable_perl=no else PERL_LIBS=`$perlpath -MExtUtils::Embed -e ldopts 2>/dev/null |$sedpath 's/-lgdbm //'` PERL_LIBS=`echo $PERL_LIBS |$sedpath 's/-ldb //'` @@ -1922,6 +1920,7 @@ AC_CHECK_HEADERS(sys/file.h sys/filio.h sys/ioctl.h sys/msgbuf.h) AC_CHECK_HEADERS(sys/select.h sys/uio.h sys/utsname.h sys/wait.h) AC_CHECK_HEADERS(termios.h) +AC_CHECK_HEADERS(sys/sysctl.h sys/socket.h) AC_VAR_TIMEZONE_EXTERNALS AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff,
--- a/doc/finch.1.in Sun May 06 02:17:45 2007 +0000 +++ b/doc/finch.1.in Sun May 06 02:40:23 2007 +0000 @@ -30,7 +30,7 @@ .SH DESCRIPTION .PP \fBfinch\fR is a console-based modular messaging client capable of using -AIM, MSN, Yahoo!, Jabber, ICQ, IRC, SILC, Novell GroupWise, Lotus Sametime, +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.
--- a/doc/funniest_home_convos.txt Sun May 06 02:17:45 2007 +0000 +++ b/doc/funniest_home_convos.txt Sun May 06 02:40:23 2007 +0000 @@ -460,3 +460,15 @@ 23:59 -!- beta7 was kicked from #pidgin by elb [getting feisty, are we?] 23:59 -!- mode/#pidgin [-o elb] by ChanServ 23:59 <marv> elb: good job getting beta7 out + +14:07 <elb> rizzo: I actually prefer elb, and used it for a long time -- but + switched to Paco-Paco because people kept asking me what an 'elb' + was +14:08 <rizzo> elb: tell them it's short for "elbow", and don't explain any + further +14:08 <elb> rizzo: I actually had people ASK about that +14:08 <elb> 'is your nick elbow?' +14:08 <elb> "... yes" +14:08 <elb> I mean, what do you say +14:08 <Robot101> elb: was their nick "idi"? +
--- a/doc/pidgin.1.in Sun May 06 02:17:45 2007 +0000 +++ b/doc/pidgin.1.in Sun May 06 02:40:23 2007 +0000 @@ -28,7 +28,7 @@ .SH DESCRIPTION .PP -Pidgin is a modular messaging client capable of using AIM, MSN, Yahoo!, Jabber, +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
--- a/finch/finch.c Sun May 06 02:17:45 2007 +0000 +++ b/finch/finch.c Sun May 06 02:40:23 2007 +0000 @@ -274,7 +274,7 @@ } /* show version message */ if (opt_version) { - printf("Finch %s\n", VERSION); + printf("%s %s\n", _("Finch"), VERSION); return 0; }
--- a/finch/gntconv.c Sun May 06 02:17:45 2007 +0000 +++ b/finch/gntconv.c Sun May 06 02:40:23 2007 +0000 @@ -37,13 +37,23 @@ #include "gntplugin.h" #include "gntprefs.h" #include "gntstatus.h" +#include "gntpounce.h" #include "gnt.h" #include "gntbox.h" #include "gntentry.h" +#include "gntlabel.h" +#include "gntmenu.h" +#include "gntmenuitem.h" +#include "gntmenuitemcheck.h" #include "gnttextview.h" +#include "gnttree.h" +#include "gntutils.h" +#include "gntwindow.h" #define PREF_ROOT "/finch/conversations" +#define PREF_CHAT PREF_ROOT "/chats" +#define PREF_USERLIST PREF_CHAT "/userlist" #include "config.h" @@ -266,6 +276,151 @@ } static void +clear_scrollback_cb(GntMenuItem *item, gpointer ggconv) +{ + FinchConv *ggc = ggconv; + gnt_text_view_clear(GNT_TEXT_VIEW(ggc->tv)); +} + +static void +send_file_cb(GntMenuItem *item, gpointer ggconv) +{ + FinchConv *ggc = ggconv; + serv_send_file(purple_conversation_get_gc(ggc->active_conv), + purple_conversation_get_name(ggc->active_conv), NULL); +} + +static void +add_pounce_cb(GntMenuItem *item, gpointer ggconv) +{ + FinchConv *ggc = ggconv; + finch_pounce_editor_show( + purple_conversation_get_account(ggc->active_conv), + purple_conversation_get_name(ggc->active_conv), NULL); +} + +static void +get_info_cb(GntMenuItem *item, gpointer ggconv) +{ + FinchConv *ggc = ggconv; + serv_get_info(purple_conversation_get_gc(ggc->active_conv), + purple_conversation_get_name(ggc->active_conv)); +} + +static void +toggle_timestamps_cb(GntMenuItem *item, gpointer ggconv) +{ + purple_prefs_set_bool(PREF_ROOT "/timestamps", + !purple_prefs_get_bool(PREF_ROOT "/timestamps")); +} + +static void +send_to_cb(GntMenuItem *m, gpointer n) +{ + PurpleAccount *account = g_object_get_data(G_OBJECT(m), "purple_account"); + gchar *buddy = g_object_get_data(G_OBJECT(m), "purple_buddy_name"); + PurpleConversation *conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, buddy); + finch_conversation_set_active(conv); +} + +static void +generate_send_to_menu(FinchConv *ggc) +{ + GntWidget *sub, *menu = ggc->menu; + GntMenuItem *item; + GSList *buds; + GList *list = NULL; + + buds = purple_find_buddies(ggc->active_conv->account, ggc->active_conv->name); + if (!buds) + return; + + item = gnt_menuitem_new(_("Send To")); + gnt_menu_add_item(GNT_MENU(menu), item); + sub = gnt_menu_new(GNT_MENU_POPUP); + gnt_menuitem_set_submenu(item, GNT_MENU(sub)); + + for (; buds; buds = buds->next) { + PurpleBlistNode *node = (PurpleBlistNode *)purple_buddy_get_contact((PurpleBuddy *)buds->data); + for (node = node->child; node != NULL; node = node->next) { + PurpleBuddy *buddy = (PurpleBuddy *)node; + PurpleAccount *account = purple_buddy_get_account(buddy); + if (purple_account_is_connected(account)) { + /* Use the PurplePresence to get unique buddies. */ + PurplePresence *presence = purple_buddy_get_presence(buddy); + if (!g_list_find(list, presence)) + list = g_list_prepend(list, presence); + } + } + } + for (list = g_list_last(list); list != NULL; list = list->prev) { + PurplePresence *pre = list->data; + PurpleBuddy *buddy = purple_presence_get_buddy(pre); + PurpleAccount *account = purple_buddy_get_account(buddy); + gchar *name = g_strdup(purple_buddy_get_name(buddy)); + gchar *text = g_strdup_printf("%s (%s)", purple_buddy_get_name(buddy), purple_account_get_username(account)); + item = gnt_menuitem_new(text); + g_free(text); + gnt_menu_add_item(GNT_MENU(sub), item); + gnt_menuitem_set_callback(item, send_to_cb, NULL); + g_object_set_data(G_OBJECT(item), "purple_account", account); + g_object_set_data_full(G_OBJECT(item), "purple_buddy_name", name, g_free); + } + g_list_free(list); + g_slist_free(buds); +} + +static void +gg_create_menu(FinchConv *ggc) +{ + GntWidget *menu, *sub; + GntMenuItem *item; + + ggc->menu = menu = gnt_menu_new(GNT_MENU_TOPLEVEL); + gnt_window_set_menu(GNT_WINDOW(ggc->window), GNT_MENU(menu)); + + item = gnt_menuitem_new(_("Conversation")); + gnt_menu_add_item(GNT_MENU(menu), item); + + sub = gnt_menu_new(GNT_MENU_POPUP); + gnt_menuitem_set_submenu(item, GNT_MENU(sub)); + + item = gnt_menuitem_new(_("Clear Scrollback")); + gnt_menu_add_item(GNT_MENU(sub), item); + gnt_menuitem_set_callback(item, clear_scrollback_cb, ggc); + + item = gnt_menuitem_check_new(_("Show Timestamps")); + gnt_menuitem_check_set_checked(GNT_MENU_ITEM_CHECK(item), + purple_prefs_get_bool(PREF_ROOT "/timestamps")); + gnt_menu_add_item(GNT_MENU(sub), item); + 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); + + 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); + + generate_send_to_menu(ggc); + } +} + +static void +create_conv_from_userlist(GntWidget *widget, FinchConv *fc) +{ + PurpleAccount *account = purple_conversation_get_account(fc->active_conv); + char *name = gnt_tree_get_selection_data(GNT_TREE(widget)); + purple_conversation_new(PURPLE_CONV_TYPE_IM, account, name); +} + +static void finch_create_conversation(PurpleConversation *conv) { FinchConv *ggc = conv->ui_data; @@ -296,18 +451,37 @@ type = purple_conversation_get_type(conv); title = get_conversation_title(conv, account); - ggc->window = gnt_box_new(FALSE, TRUE); + ggc->window = gnt_vwindow_new(FALSE); gnt_box_set_title(GNT_BOX(ggc->window), title); gnt_box_set_toplevel(GNT_BOX(ggc->window), TRUE); gnt_box_set_pad(GNT_BOX(ggc->window), 0); gnt_widget_set_name(ggc->window, "conversation-window"); + gg_create_menu(ggc); + ggc->tv = gnt_text_view_new(); - gnt_box_add_widget(GNT_BOX(ggc->window), ggc->tv); gnt_widget_set_name(ggc->tv, "conversation-window-textview"); gnt_widget_set_size(ggc->tv, purple_prefs_get_int(PREF_ROOT "/size/width"), purple_prefs_get_int(PREF_ROOT "/size/height")); + if (type == PURPLE_CONV_TYPE_CHAT) { + GntWidget *hbox, *tree; + FinchConvChat *fc = ggc->u.chat = g_new0(FinchConvChat, 1); + hbox = gnt_hbox_new(FALSE); + gnt_box_set_pad(GNT_BOX(hbox), 0); + tree = fc->userlist = gnt_tree_new(); + gnt_tree_set_compare_func(GNT_TREE(tree), (GCompareFunc)g_utf8_collate); + gnt_tree_set_hash_fns(GNT_TREE(tree), g_str_hash, g_str_equal, g_free); + GNT_WIDGET_SET_FLAGS(tree, GNT_WIDGET_NO_BORDER); + gnt_box_add_widget(GNT_BOX(hbox), ggc->tv); + gnt_box_add_widget(GNT_BOX(hbox), tree); + gnt_box_add_widget(GNT_BOX(ggc->window), hbox); + g_signal_connect(G_OBJECT(tree), "activate", G_CALLBACK(create_conv_from_userlist), ggc); + gnt_widget_set_visible(tree, purple_prefs_get_bool(PREF_USERLIST)); + } else { + gnt_box_add_widget(GNT_BOX(ggc->window), ggc->tv); + } + ggc->info = gnt_vbox_new(FALSE); gnt_box_add_widget(GNT_BOX(ggc->window), ggc->info); @@ -338,6 +512,7 @@ } g_free(title); + gnt_box_give_focus_to_child(GNT_BOX(ggc->window), ggc->entry); } static void @@ -350,6 +525,7 @@ ggc->active_conv = ggc->list->data; if (ggc->list == NULL) { + g_free(ggc->u.chat); gnt_widget_destroy(ggc->window); g_free(ggc); } @@ -380,8 +556,7 @@ gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(ggconv->tv), "\n", GNT_TEXT_FLAG_NORMAL); /* Unnecessary to print the timestamp for delayed message */ - if (!(flags & PURPLE_MESSAGE_DELAYED) && - purple_prefs_get_bool("/finch/conversations/timestamps")) + if (purple_prefs_get_bool("/finch/conversations/timestamps")) gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(ggconv->tv), purple_utf8_strftime("(%H:%M:%S) ", localtime(&mtime)), GNT_TEXT_FLAG_DIM); @@ -510,8 +685,11 @@ for (; users; users = users->next) { PurpleConvChatBuddy *cbuddy = users->data; + GntTree *tree = GNT_TREE(ggc->u.chat->userlist); gnt_entry_add_suggest(entry, cbuddy->name); gnt_entry_add_suggest(entry, cbuddy->alias); + gnt_tree_add_row_after(tree, g_strdup(cbuddy->name), + gnt_tree_create_row(tree, cbuddy->alias), NULL, NULL); } } @@ -521,9 +699,13 @@ /* Update the name for string completion */ FinchConv *ggc = conv->ui_data; GntEntry *entry = GNT_ENTRY(ggc->entry); + GntTree *tree = GNT_TREE(ggc->u.chat->userlist); gnt_entry_remove_suggest(entry, old); gnt_entry_add_suggest(entry, new_n); gnt_entry_add_suggest(entry, new_a); + gnt_tree_remove(tree, (gpointer)old); + gnt_tree_add_row_after(tree, g_strdup(new_n), + gnt_tree_create_row(tree, new_a), NULL, NULL); } static void @@ -532,8 +714,11 @@ /* Remove the name from string completion */ FinchConv *ggc = conv->ui_data; GntEntry *entry = GNT_ENTRY(ggc->entry); - for (; list; list = list->next) + for (; list; list = list->next) { + GntTree *tree = GNT_TREE(ggc->u.chat->userlist); gnt_entry_remove_suggest(entry, list->data); + gnt_tree_remove(tree, list->data); + } } static void @@ -677,6 +862,23 @@ return PURPLE_CMD_STATUS_OK; } +static PurpleCmdRet +users_command_cb(PurpleConversation *conv, const char *cmd, char **args, char **error, gpointer data) +{ + FinchConv *fc = conv->ui_data; + FinchConvChat *ch; + if (!fc) + return PURPLE_CMD_STATUS_FAILED; + + ch = fc->u.chat; + gnt_widget_set_visible(ch->userlist, + (GNT_WIDGET_IS_FLAG_SET(ch->userlist, GNT_WIDGET_INVISIBLE))); + gnt_box_readjust(GNT_BOX(fc->window)); + gnt_box_give_focus_to_child(GNT_BOX(fc->window), fc->entry); + purple_prefs_set_bool(PREF_USERLIST, !(GNT_WIDGET_IS_FLAG_SET(ch->userlist, GNT_WIDGET_INVISIBLE))); + return PURPLE_CMD_STATUS_OK; +} + void finch_conversation_init() { purple_prefs_add_none(PREF_ROOT); @@ -686,6 +888,8 @@ purple_prefs_add_none(PREF_ROOT "/position"); purple_prefs_add_int(PREF_ROOT "/position/x", 0); purple_prefs_add_int(PREF_ROOT "/position/y", 0); + purple_prefs_add_none(PREF_CHAT); + purple_prefs_add_bool(PREF_USERLIST, FALSE); /* Xerox the commands */ purple_cmd_register("say", "S", PURPLE_CMD_P_DEFAULT, @@ -703,6 +907,9 @@ purple_cmd_register("help", "w", PURPLE_CMD_P_DEFAULT, PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, NULL, help_command_cb, _("help <command>: Help on a specific command."), NULL); + purple_cmd_register("users", "", PURPLE_CMD_P_DEFAULT, + PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, NULL, + users_command_cb, _("users: Show the list of users in the chat."), NULL); /* Now some commands to bring up some other windows */ purple_cmd_register("plugins", "", PURPLE_CMD_P_DEFAULT,
--- a/finch/libgnt/gntentry.c Sun May 06 02:17:45 2007 +0000 +++ b/finch/libgnt/gntentry.c Sun May 06 02:40:23 2007 +0000 @@ -44,6 +44,29 @@ } static gboolean +complete_suggest(GntEntry *entry, const char *text) +{ + gboolean changed = FALSE; + if (entry->word) { + char *s = get_beginning_of_word(entry); + const char *iter = text; + while (*iter && toupper(*s) == toupper(*iter)) { + if (*s != *iter) + changed = TRUE; + *s++ = *iter++; + } + if (*iter) { + gnt_entry_key_pressed(GNT_WIDGET(entry), iter); + changed = TRUE; + } + } else { + gnt_entry_set_text_internal(entry, text); + changed = TRUE; + } + return changed; +} + +static gboolean show_suggest_dropdown(GntEntry *entry) { char *suggest = NULL; @@ -51,6 +74,8 @@ int offset = 0, x, y; int count = 0; GList *iter; + const char *text = NULL; + const char *sgst = NULL; if (entry->word) { @@ -85,24 +110,28 @@ for (count = 0, iter = entry->suggests; iter; iter = iter->next) { - const char *text = iter->data; + text = iter->data; if (g_ascii_strncasecmp(suggest, text, len) == 0 && strlen(text) >= len) { gnt_tree_add_row_after(GNT_TREE(entry->ddown), (gpointer)text, gnt_tree_create_row(GNT_TREE(entry->ddown), text), NULL, NULL); count++; + sgst = text; } } g_free(suggest); - if (count == 0) - { + if (count == 0) { destroy_suggest(entry); return FALSE; + } else if (count == 1) { + destroy_suggest(entry); + return complete_suggest(entry, sgst); + } else { + gnt_widget_draw(entry->ddown->parent); } - gnt_widget_draw(entry->ddown->parent); return TRUE; } @@ -324,10 +353,7 @@ { GntEntry *entry = GNT_ENTRY(bind); if (entry->ddown) { - if (g_list_length(GNT_TREE(entry->ddown)->list) == 1) - gnt_entry_key_pressed(GNT_WIDGET(entry), "\r"); - else - gnt_bindable_perform_action_named(GNT_BINDABLE(entry->ddown), "move-down"); + gnt_bindable_perform_action_named(GNT_BINDABLE(entry->ddown), "move-down"); return TRUE; } return show_suggest_dropdown(entry); @@ -512,33 +538,11 @@ } else { - if (text[0] == '\t') - { - if (entry->ddown) - destroy_suggest(entry); - else if (entry->suggests) - return show_suggest_dropdown(entry); - - return FALSE; - } - else if (text[0] == '\r' && entry->ddown) + if ((text[0] == '\r' || text[0] == ' ') && entry->ddown) { char *text = g_strdup(gnt_tree_get_selection_data(GNT_TREE(entry->ddown))); destroy_suggest(entry); - if (entry->word) - { - char *s = get_beginning_of_word(entry); - char *iter = text; - while (*iter && toupper(*s) == toupper(*iter)) - { - *s++ = *iter++; - } - gnt_entry_key_pressed(widget, iter); - } - else - { - gnt_entry_set_text_internal(entry, text); - } + complete_suggest(entry, text); g_free(text); entry_text_changed(entry); return TRUE;
--- a/finch/libgnt/gntmain.c Sun May 06 02:17:45 2007 +0000 +++ b/finch/libgnt/gntmain.c Sun May 06 02:40:23 2007 +0000 @@ -12,13 +12,16 @@ #include "gnt.h" #include "gntbox.h" +#include "gntbutton.h" #include "gntcolors.h" #include "gntclipboard.h" #include "gntkeys.h" +#include "gntlabel.h" #include "gntmenu.h" #include "gntstyle.h" #include "gnttree.h" #include "gntutils.h" +#include "gntwindow.h" #include "gntwm.h" #include <panel.h> @@ -303,6 +306,49 @@ } static void +exit_confirmed(gpointer null) +{ + gnt_bindable_perform_action_named(GNT_BINDABLE(wm), "wm-quit", NULL); +} + +static void +exit_win_close(GntWidget *w, GntWidget **win) +{ + *win = NULL; +} + +static void +ask_before_exit() +{ + static GntWidget *win = NULL; + GntWidget *bbox, *button; + + if (win) + goto raise; + + win = gnt_vwindow_new(FALSE); + gnt_box_add_widget(GNT_BOX(win), gnt_label_new("Are you sure you want to quit?")); + gnt_box_set_title(GNT_BOX(win), "Quit?"); + gnt_box_set_alignment(GNT_BOX(win), GNT_ALIGN_MID); + g_signal_connect(G_OBJECT(win), "destroy", G_CALLBACK(exit_win_close), &win); + + bbox = gnt_hbox_new(FALSE); + gnt_box_add_widget(GNT_BOX(win), bbox); + + button = gnt_button_new("Quit"); + g_signal_connect(G_OBJECT(button), "activate", G_CALLBACK(exit_confirmed), NULL); + gnt_box_add_widget(GNT_BOX(bbox), button); + + button = gnt_button_new("Cancel"); + g_signal_connect_swapped(G_OBJECT(button), "activate", G_CALLBACK(gnt_widget_destroy), win); + gnt_box_add_widget(GNT_BOX(bbox), button); + + gnt_widget_show(win); +raise: + gnt_wm_raise_window(wm, win); +} + +static void sighandler(int sig) { switch (sig) { @@ -318,6 +364,10 @@ clean_pid(); signal(SIGCHLD, sighandler); break; + case SIGINT: + ask_before_exit(); + signal(SIGINT, sighandler); + break; } } @@ -387,6 +437,7 @@ signal(SIGWINCH, sighandler); #endif signal(SIGCHLD, sighandler); + signal(SIGINT, sighandler); signal(SIGPIPE, SIG_IGN); g_type_init();
--- a/finch/libgnt/wms/Makefile.am Sun May 06 02:17:45 2007 +0000 +++ b/finch/libgnt/wms/Makefile.am Sun May 06 02:40:23 2007 +0000 @@ -15,7 +15,6 @@ AM_CPPFLAGS = \ -DDATADIR=\"$(datadir)\" \ - -DVERSION=\"$(VERSION)\" \ -I$(top_srcdir)/libpurple \ -I$(top_srcdir)/finch \ -I$(top_srcdir)/finch/libgnt \
--- a/finch/plugins/Makefile.am Sun May 06 02:17:45 2007 +0000 +++ b/finch/plugins/Makefile.am Sun May 06 02:40:23 2007 +0000 @@ -32,7 +32,6 @@ AM_CPPFLAGS = \ -DDATADIR=\"$(datadir)\" \ - -DVERSION=\"$(VERSION)\" \ -I$(top_builddir)/libpurple \ -I$(top_srcdir)/libpurple \ -I$(top_srcdir) \
--- a/libpurple/buddyicon.c Sun May 06 02:17:45 2007 +0000 +++ b/libpurple/buddyicon.c Sun May 06 02:40:23 2007 +0000 @@ -279,6 +279,7 @@ icon->account = account; icon->username = g_strdup(username); icon->checksum = NULL; + icon->ref_count = 1; icon_cache = g_hash_table_lookup(account_cache, account); @@ -653,7 +654,6 @@ const char *checksum; icon = purple_buddy_icon_create(account, username); - icon->ref_count = 0; icon->img = NULL; checksum = purple_blist_node_get_string((PurpleBlistNode*)b, "icon_checksum"); purple_buddy_icon_set_data(icon, data, len, checksum);
--- a/libpurple/dnssrv.c Sun May 06 02:17:45 2007 +0000 +++ b/libpurple/dnssrv.c Sun May 06 02:40:23 2007 +0000 @@ -192,11 +192,19 @@ PurpleSrvCallback cb = query_data->cb; int status; - read(source, &size, sizeof(int)); - purple_debug_info("dnssrv","found %d SRV entries\n", size); - tmp = res = g_new0(PurpleSrvResponse, size); - for (i = 0; i < size; i++) { - read(source, tmp++, sizeof(PurpleSrvResponse)); + if (read(source, &size, sizeof(int)) > 0) + { + purple_debug_info("dnssrv","found %d SRV entries\n", size); + tmp = res = g_new0(PurpleSrvResponse, size); + for (i = 0; i < size; i++) { + read(source, tmp++, sizeof(PurpleSrvResponse)); + } + } + else + { + purple_debug_info("dnssrv","found 0 SRV entries; errno is %i\n", errno); + size = 0; + res = NULL; } cb(res, size, query_data->extradata);
--- a/libpurple/internal.h Sun May 06 02:17:45 2007 +0000 +++ b/libpurple/internal.h Sun May 06 02:40:23 2007 +0000 @@ -184,6 +184,7 @@ #define purple_strlcat(dest, src) g_strlcat(dest, src, sizeof(dest)) #define PURPLE_WEBSITE "http://pidgin.im/" +#define PURPLE_DEVEL_WEBSITE "http://developer.pidgin.im/" /* This is for the accounts code to notify the buddy icon code that * it's done loading. We may want to replace this with a signal. */
--- a/libpurple/nat-pmp.c Sun May 06 02:17:45 2007 +0000 +++ b/libpurple/nat-pmp.c Sun May 06 02:40:23 2007 +0000 @@ -29,64 +29,58 @@ */ #include "nat-pmp.h" +#include "internal.h" #include "debug.h" #include "signals.h" #include "network.h" -#include <sys/types.h> -#ifndef _WIN32 -#include <arpa/inet.h> -#include <netinet/in.h> -#include <sys/socket.h> +#ifdef HAVE_SYS_SYSCTL_H #include <sys/sysctl.h> - -#include <net/if.h> -#include <net/route.h> - -#include <netdb.h> -#include <err.h> #endif -#include <stdio.h> -#include <stdlib.h> -#include <string.h> +#ifdef HAVE_SYS_SOCKET_H +#include <sys/socket.h> +#endif -#include <errno.h> +/* We will need sysctl() and NET_RT_DUMP, both of which are not present + * on all platforms, to continue. */ +#if defined(HAVE_SYS_SYSCTL_H) && defined(NET_RT_DUMP) -#ifdef NET_RT_DUMP +#include <sys/types.h> +#include <net/route.h> #define PMP_DEBUG 1 typedef struct { - uint8_t version; - uint8_t opcode; + guint8 version; + guint8 opcode; } PurplePmpIpRequest; typedef struct { - uint8_t version; - uint8_t opcode; /* 128 + n */ - uint16_t resultcode; - uint32_t epoch; - uint32_t address; + guint8 version; + guint8 opcode; /* 128 + n */ + guint16 resultcode; + guint32 epoch; + guint32 address; } PurplePmpIpResponse; typedef struct { - uint8_t version; - uint8_t opcode; + guint8 version; + guint8 opcode; char reserved[2]; - uint16_t privateport; - uint16_t publicport; - uint32_t lifetime; + guint16 privateport; + guint16 publicport; + guint32 lifetime; } PurplePmpMapRequest; struct _PurplePmpMapResponse { - uint8_t version; - uint8_t opcode; - uint16_t resultcode; - uint32_t epoch; - uint16_t privateport; - uint16_t publicport; - uint32_t lifetime; + guint8 version; + guint8 opcode; + guint16 resultcode; + guint32 epoch; + guint16 privateport; + guint16 publicport; + guint32 lifetime; }; typedef struct _PurplePmpMapResponse PurplePmpMapResponse; @@ -549,4 +543,4 @@ { } -#endif /* #ifndef NET_RT_DUMP */ +#endif /* #if !(defined(HAVE_SYS_SYCTL_H) && defined(NET_RT_DUMP)) */
--- a/libpurple/nat-pmp.h Sun May 06 02:17:45 2007 +0000 +++ b/libpurple/nat-pmp.h Sun May 06 02:40:23 2007 +0000 @@ -31,7 +31,6 @@ #ifndef _PURPLE_NAT_PMP_H #define _PURPLE_NAT_PMP_H -#include <stdint.h> #include <glib.h> #define PURPLE_PMP_LIFETIME 3600 /* 3600 seconds */
--- a/libpurple/plugins/Makefile.am Sun May 06 02:17:45 2007 +0000 +++ b/libpurple/plugins/Makefile.am Sun May 06 02:40:23 2007 +0000 @@ -127,7 +127,6 @@ AM_CPPFLAGS = \ -DDATADIR=\"$(datadir)\" \ - -DVERSION=\"$(VERSION)\" \ -I$(top_srcdir)/libpurple \ -I$(top_builddir)/libpurple \ $(DEBUG_CFLAGS) \
--- a/libpurple/plugins/mono/loader/Makefile.am Sun May 06 02:17:45 2007 +0000 +++ b/libpurple/plugins/mono/loader/Makefile.am Sun May 06 02:40:23 2007 +0000 @@ -17,7 +17,6 @@ mono_la_LIBADD = $(MONO_LIBS) AM_CPPFLAGS = \ - -DVERSION=\"$(VERSION)\" \ -I$(top_srcdir) \ -I$(top_srcdir)/libpurple \ $(DEBUG_CFLAGS) \
--- a/libpurple/plugins/perl/Makefile.am Sun May 06 02:17:45 2007 +0000 +++ b/libpurple/plugins/perl/Makefile.am Sun May 06 02:40:23 2007 +0000 @@ -152,7 +152,6 @@ fi AM_CPPFLAGS = \ - -DVERSION=\"$(VERSION)\" \ -I$(top_srcdir) \ -I$(top_srcdir)/libpurple \ -I$(top_builddir)/libpurple \
--- a/libpurple/plugins/psychic.c Sun May 06 02:17:45 2007 +0000 +++ b/libpurple/plugins/psychic.c Sun May 06 02:40:23 2007 +0000 @@ -21,7 +21,7 @@ #define PLUGIN_SUMMARY N_("Psychic mode for incoming conversation") #define PLUGIN_DESC N_("Causes conversation windows to appear as other" \ " users begin to message you. This works for" \ - " AIM, ICQ, Jabber, Sametime, and Yahoo!") + " AIM, ICQ, XMPP, Sametime, and Yahoo!") #define PLUGIN_AUTHOR "Christopher O'Brien <siege@preoccupied.net>"
--- a/libpurple/plugins/tcl/Makefile.am Sun May 06 02:17:45 2007 +0000 +++ b/libpurple/plugins/tcl/Makefile.am Sun May 06 02:40:23 2007 +0000 @@ -12,7 +12,6 @@ EXTRA_DIST = signal-test.tcl Makefile.mingw AM_CPPFLAGS = \ - -DVERSION=\"$(VERSION)\" \ -I$(top_srcdir) \ -I$(top_srcdir)/libpurple \ -I$(top_builddir)/libpurple \
--- a/libpurple/protocols/bonjour/bonjour.c Sun May 06 02:17:45 2007 +0000 +++ b/libpurple/protocols/bonjour/bonjour.c Sun May 06 02:40:23 2007 +0000 @@ -602,7 +602,7 @@ option = purple_account_option_string_new(_("AIM Account"), "AIM", ""); prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); - option = purple_account_option_string_new(_("Jabber Account"), "jid", ""); + option = purple_account_option_string_new(_("XMPP Account"), "jid", ""); prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); my_protocol = plugin;
--- a/libpurple/protocols/irc/Makefile.am Sun May 06 02:17:45 2007 +0000 +++ b/libpurple/protocols/irc/Makefile.am Sun May 06 02:40:23 2007 +0000 @@ -1,4 +1,4 @@ -EXTRA_DIST = PROTOCOL Makefile.mingw +EXTRA_DIST = Makefile.mingw pkgdir = $(libdir)/purple-$(PURPLE_MAJOR_VERSION)
--- a/libpurple/protocols/jabber/buddy.c Sun May 06 02:17:45 2007 +0000 +++ b/libpurple/protocols/jabber/buddy.c Sun May 06 02:40:23 2007 +0000 @@ -575,8 +575,8 @@ if(x_vc_data != NULL) xmlnode_free(x_vc_data); - purple_request_fields(gc, _("Edit Jabber vCard"), - _("Edit Jabber vCard"), + purple_request_fields(gc, _("Edit XMPP vCard"), + _("Edit XMPP vCard"), _("All items below are optional. Enter only the " "information with which you feel comfortable."), fields, @@ -1729,7 +1729,7 @@ if(!instructions) { instructions = g_strdup(_("Fill in one or more fields to search " - "for any matching Jabber users.")); + "for any matching XMPP users.")); } if(xmlnode_get_child(query, "first")) { @@ -1757,8 +1757,8 @@ usi->js = js; usi->directory_server = g_strdup(from); - purple_request_fields(js->gc, _("Search for Jabber users"), - _("Search for Jabber users"), instructions, fields, + purple_request_fields(js->gc, _("Search for XMPP users"), + _("Search for XMPP users"), instructions, fields, _("Search"), G_CALLBACK(user_search_cb), _("Cancel"), G_CALLBACK(user_search_cancel_cb), NULL, NULL, NULL,
--- a/libpurple/protocols/jabber/jabber.c Sun May 06 02:17:45 2007 +0000 +++ b/libpurple/protocols/jabber/jabber.c Sun May 06 02:40:23 2007 +0000 @@ -562,7 +562,7 @@ js->write_buffer = purple_circ_buffer_new(512); if(!js->user) { - purple_connection_error(gc, _("Invalid Jabber ID")); + purple_connection_error(gc, _("Invalid XMPP ID")); return; } @@ -868,8 +868,8 @@ instructions = g_strdup(_("Please fill out the information below " "to register your new account.")); - purple_request_fields(js->gc, _("Register New Jabber Account"), - _("Register New Jabber Account"), instructions, fields, + purple_request_fields(js->gc, _("Register New XMPP Account"), + _("Register New XMPP Account"), instructions, fields, _("Register"), G_CALLBACK(jabber_register_cb), _("Cancel"), G_CALLBACK(jabber_register_cancel_cb), purple_connection_get_account(js->gc), NULL, NULL, @@ -907,7 +907,7 @@ js->next_id = g_random_int(); if(!js->user) { - purple_connection_error(gc, _("Invalid Jabber ID")); + purple_connection_error(gc, _("Invalid XMPP ID")); return; } @@ -1374,8 +1374,8 @@ purple_request_field_string_set_masked(field, TRUE); purple_request_field_group_add_field(group, field); - purple_request_fields(js->gc, _("Change Jabber Password"), - _("Change Jabber Password"), _("Please enter your new password"), + purple_request_fields(js->gc, _("Change XMPP Password"), + _("Change XMPP Password"), _("Please enter your new password"), fields, _("OK"), G_CALLBACK(jabber_password_change_cb), _("Cancel"), NULL, purple_connection_get_account(gc), NULL, NULL, @@ -1489,7 +1489,7 @@ } else if(xmlnode_get_child(error, "item-not-found")) { text = _("Item Not Found"); } else if(xmlnode_get_child(error, "jid-malformed")) { - text = _("Malformed Jabber ID"); + text = _("Malformed XMPP ID"); } else if(xmlnode_get_child(error, "not-acceptable")) { text = _("Not Acceptable"); } else if(xmlnode_get_child(error, "not-allowed")) {
--- a/libpurple/protocols/jabber/libxmpp.c Sun May 06 02:17:45 2007 +0000 +++ b/libpurple/protocols/jabber/libxmpp.c Sun May 06 02:40:23 2007 +0000 @@ -163,9 +163,9 @@ "XMPP", /**< name */ VERSION, /**< version */ /** summary */ - N_("Jabber Protocol Plugin"), + N_("XMPP Protocol Plugin"), /** description */ - N_("Jabber Protocol Plugin"), + N_("XMPP Protocol Plugin"), NULL, /**< author */ PURPLE_WEBSITE, /**< homepage */
--- a/libpurple/protocols/jabber/message.c Sun May 06 02:17:45 2007 +0000 +++ b/libpurple/protocols/jabber/message.c Sun May 06 02:40:23 2007 +0000 @@ -86,7 +86,6 @@ PurpleConversation *conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, from, jm->js->gc->account); if (conv && jid->node && jid->domain) { -#if 0 /* String freeze... make sure to mark the message for translation */ char buf[256]; PurpleBuddy *buddy; @@ -100,7 +99,7 @@ escaped = g_markup_escape_text(who, -1); g_snprintf(buf, sizeof(buf), - "%s has left the conversation.", escaped); + _("%s has left the conversation."), escaped); /* At some point when we restructure PurpleConversation, * this should be able to be implemented by removing the @@ -108,7 +107,6 @@ purple_conversation_write(conv, "", buf, PURPLE_MESSAGE_SYSTEM, time(NULL)); } -#endif } serv_got_typing_stopped(jm->js->gc, from); @@ -269,7 +267,7 @@ buf = g_strdup_printf(_("Message delivery to %s failed: %s"), jm->from, jm->error ? jm->error : ""); - purple_notify_formatted(jm->js->gc, _("Jabber Message Error"), _("Jabber Message Error"), buf, + purple_notify_formatted(jm->js->gc, _("XMPP Message Error"), _("XMPP Message Error"), buf, jm->xhtml ? jm->xhtml : jm->body, NULL, NULL); g_free(buf);
--- a/libpurple/protocols/msn/msn.c Sun May 06 02:17:45 2007 +0000 +++ b/libpurple/protocols/msn/msn.c Sun May 06 02:40:23 2007 +0000 @@ -389,6 +389,15 @@ data); } +static gboolean +msn_offline_message(const PurpleBuddy *buddy) { + MsnUser *user; + if (buddy == NULL) + return FALSE; + user = buddy->proto_data; + return user && user->mobile; +} + static void initiate_chat_cb(PurpleBlistNode *node, gpointer data) { @@ -2188,7 +2197,7 @@ msn_can_receive_file, /* can_receive_file */ msn_send_file, /* send_file */ msn_new_xfer, /* new_xfer */ - NULL, /* offline_message */ + msn_offline_message, /* offline_message */ NULL, /* whiteboard_prpl_ops */ NULL, /* send_raw */ NULL, /* roomlist_room_serialize */
--- a/libpurple/protocols/msn/user.c Sun May 06 02:17:45 2007 +0000 +++ b/libpurple/protocols/msn/user.c Sun May 06 02:40:23 2007 +0000 @@ -102,7 +102,7 @@ "message", user->statusline, NULL); } else if (user->status != NULL) { if (!strcmp(user->status, "offline") && user->mobile) { - purple_prpl_got_user_status(account, user->passport, "available", NULL); + purple_prpl_got_user_status(account, user->passport, "offline", NULL); purple_prpl_got_user_status(account, user->passport, "mobile", NULL); } else { purple_prpl_got_user_status(account, user->passport, user->status, NULL);
--- a/libpurple/protocols/oscar/family_feedbag.c Sun May 06 02:17:45 2007 +0000 +++ b/libpurple/protocols/oscar/family_feedbag.c Sun May 06 02:40:23 2007 +0000 @@ -588,9 +588,7 @@ od->ssi.waiting_for_ack = TRUE; /* Now go mail off our data and wait 4 to 6 weeks */ - aim_ssi_addmoddel(od); - - return 0; + return aim_ssi_addmoddel(od);; } /** @@ -714,9 +712,7 @@ aim_ssi_itemlist_del(&od->ssi.local, cur); /* If we've made any changes then sync our list with the server's */ - aim_ssi_sync(od); - - return 0; + return aim_ssi_sync(od); } /** @@ -769,9 +765,7 @@ aim_ssi_itemlist_rebuildgroup(od->ssi.local, group); /* Sync our local list with the server list */ - aim_ssi_sync(od); - - return 0; + return aim_ssi_sync(od); } /** @@ -795,9 +789,7 @@ aim_ssi_itemlist_add(&od->ssi.local, name, 0x0000, 0xFFFF, AIM_SSI_TYPE_PERMIT, NULL); /* Sync our local list with the server list */ - aim_ssi_sync(od); - - return 0; + return aim_ssi_sync(od); } /** @@ -821,9 +813,7 @@ aim_ssi_itemlist_add(&od->ssi.local, name, 0x0000, 0xFFFF, AIM_SSI_TYPE_DENY, NULL); /* Sync our local list with the server list */ - aim_ssi_sync(od); - - return 0; + return aim_ssi_sync(od); } /** @@ -865,9 +855,7 @@ } /* Sync our local list with the server list */ - aim_ssi_sync(od); - - return 0; + return aim_ssi_sync(od); } /** @@ -892,9 +880,7 @@ aim_ssi_itemlist_del(&od->ssi.local, del); /* Sync our local list with the server list */ - aim_ssi_sync(od); - - return 0; + return aim_ssi_sync(od); } /** @@ -919,9 +905,7 @@ aim_ssi_itemlist_del(&od->ssi.local, del); /* Sync our local list with the server list */ - aim_ssi_sync(od); - - return 0; + return aim_ssi_sync(od); } /** @@ -977,9 +961,7 @@ aim_tlvlist_remove(&tmp->data, 0x0131); /* Sync our local list with the server list */ - aim_ssi_sync(od); - - return 0; + return aim_ssi_sync(od); } /** @@ -1009,9 +991,7 @@ aim_tlvlist_remove(&tmp->data, 0x013c); /* Sync our local list with the server list */ - aim_ssi_sync(od); - - return 0; + return aim_ssi_sync(od); } /** @@ -1037,9 +1017,7 @@ strcpy(group->name, newgn); /* Sync our local list with the server list */ - aim_ssi_sync(od); - - return 0; + return aim_ssi_sync(od); } /** @@ -1079,9 +1057,7 @@ aim_tlvlist_replace_32(&tmp->data, 0x00cb, vismask); /* Sync our local list with the server list */ - aim_ssi_sync(od); - - return 0; + return aim_ssi_sync(od); } /** @@ -1171,9 +1147,7 @@ aim_tlvlist_replace_32(&tmp->data, 0x00c9, presence); /* Sync our local list with the server list */ - aim_ssi_sync(od); - - return 0; + return aim_ssi_sync(od); } /*
--- a/libpurple/protocols/oscar/oscar.c Sun May 06 02:17:45 2007 +0000 +++ b/libpurple/protocols/oscar/oscar.c Sun May 06 02:40:23 2007 +0000 @@ -5098,7 +5098,6 @@ purple_debug_info("oscar", "ssi: %s has given you permission to add him to your buddy list\n", sn); - /* XXX Should data->nick store the alias and nombre just have the sn? -evands */ buddy = purple_find_buddy(gc->account, sn); if (buddy && (purple_buddy_get_alias_only(buddy))) nombre = g_strdup_printf("%s (%s)", sn, purple_buddy_get_alias_only(buddy)); @@ -5106,10 +5105,12 @@ nombre = g_strdup(sn); dialog_msg = g_strdup_printf(_("The user %s has given you permission to add you to their buddy list. Do you want to add them?"), nombre); + g_free(nombre); + data = g_new(struct name_data, 1); data->gc = gc; data->name = g_strdup(sn); - data->nick = NULL; + data->nick = (buddy ? g_strdup(purple_buddy_get_alias_only(buddy)) : NULL); purple_request_yes_no(gc, NULL, _("Authorization Given"), dialog_msg, PURPLE_DEFAULT_ACTION_NONE, @@ -5117,9 +5118,7 @@ data, G_CALLBACK(purple_icq_buddyadd), G_CALLBACK(oscar_free_name_data)); - g_free(dialog_msg); - g_free(nombre); return 1; } @@ -5130,7 +5129,6 @@ char *sn; char *msg; PurpleAccount *account = purple_connection_get_account(gc); - gchar *nombre; gchar *reason = NULL; struct name_data *data; PurpleBuddy *buddy; @@ -5144,10 +5142,6 @@ "ssi: received authorization request from %s\n", sn); buddy = purple_find_buddy(account, sn); - if (buddy && (purple_buddy_get_alias_only(buddy))) - nombre = g_strdup_printf("%s (%s)", sn, purple_buddy_get_alias_only(buddy)); - else - nombre = g_strdup(sn); if (msg != NULL) reason = purple_plugin_oscar_decode_im_part(account, sn, AIM_CHARSET_CUSTOM, 0x0000, msg, strlen(msg)); @@ -5155,12 +5149,12 @@ data = g_new(struct name_data, 1); data->gc = gc; data->name = g_strdup(sn); - data->nick = NULL; - - purple_account_request_authorization(account, nombre, NULL, NULL, + data->nick = (buddy ? g_strdup(purple_buddy_get_alias_only(buddy)) : NULL); + + purple_account_request_authorization(account, sn, NULL, + (buddy ? purple_buddy_get_alias_only(buddy) : NULL), reason, buddy != NULL, G_CALLBACK(purple_auth_grant), G_CALLBACK(purple_auth_dontgrant_msgprompt), data); - g_free(nombre); g_free(reason); return 1; @@ -5791,8 +5785,8 @@ comment_utf8 = comment ? oscar_utf8_try_convert(gc->account, comment) : NULL; data->gc = gc; - data->name = g_strdup(buddy->name); - data->nick = NULL; + data->name = g_strdup(purple_buddy_get_name(buddy)); + data->nick = g_strdup(purple_buddy_get_alias_only(buddy)); title = g_strdup_printf(_("Buddy Comment for %s"), data->name); purple_request_input(gc, title, _("Buddy Comment:"), NULL,
--- a/libpurple/protocols/qq/Makefile.am Sun May 06 02:17:45 2007 +0000 +++ b/libpurple/protocols/qq/Makefile.am Sun May 06 02:40:23 2007 +0000 @@ -94,7 +94,6 @@ AM_CPPFLAGS = \ -I$(top_srcdir)/libpurple \ -I$(top_builddir)/libpurple \ - -DVERSION=\"$(VERSION)\" \ -DQQ_BUDDY_ICON_DIR=\"$(datadir)/pixmaps/purple/buddy_icons/qq\" \ $(DEBUG_CFLAGS) \ $(GLIB_CFLAGS)
--- a/libpurple/prpl.h Sun May 06 02:17:45 2007 +0000 +++ b/libpurple/prpl.h Sun May 06 02:40:23 2007 +0000 @@ -99,7 +99,7 @@ /** * Use a unique name, not an alias, for chat rooms. * - * Jabber lets you choose what name you want for chat. + * XMPP lets you choose what name you want for chat. * So it shouldn't be pulling the alias for when you're in chat; * it gets annoying. */ @@ -108,7 +108,7 @@ /** * Chat rooms have topics. * - * IRC and Jabber support this. + * IRC and XMPP support this. */ OPT_PROTO_CHAT_TOPIC = 0x00000008, @@ -145,7 +145,7 @@ /** * Allows font size to be specified in sane point size * - * Probably just Jabber and Y!M + * Probably just XMPP and Y!M */ OPT_PROTO_USE_POINTSIZE = 0x00000100,
--- a/libpurple/util.c Sun May 06 02:17:45 2007 +0000 +++ b/libpurple/util.c Sun May 06 02:40:23 2007 +0000 @@ -2522,29 +2522,15 @@ purple_mkstemp(char **fpath, gboolean binary) { const gchar *tmpdir; -#ifndef _WIN32 int fd; -#endif FILE *fp = NULL; g_return_val_if_fail(fpath != NULL, NULL); if((tmpdir = (gchar*)g_get_tmp_dir()) != NULL) { if((*fpath = g_strdup_printf("%s" G_DIR_SEPARATOR_S "%s", tmpdir, purple_mkstemp_templ)) != NULL) { -#ifdef _WIN32 - char* result = _mktemp( *fpath ); - if( result == NULL ) - purple_debug(PURPLE_DEBUG_ERROR, "purple_mkstemp", - "Problem creating the template\n"); - else - { - if( (fp = g_fopen( result, binary?"wb+":"w+")) == NULL ) { - purple_debug(PURPLE_DEBUG_ERROR, "purple_mkstemp", - "Couldn't fopen() %s\n", result); - } - } -#else - if((fd = mkstemp(*fpath)) == -1) { + fd = g_mkstemp(*fpath); + if(fd == -1) { purple_debug(PURPLE_DEBUG_ERROR, "purple_mkstemp", "Couldn't make \"%s\", error: %d\n", *fpath, errno); @@ -2555,7 +2541,7 @@ "Couldn't fdopen(), error: %d\n", errno); } } -#endif + if(!fp) { g_free(*fpath); *fpath = NULL;
--- a/pidgin.apspec.in Sun May 06 02:17:45 2007 +0000 +++ b/pidgin.apspec.in Sun May 06 02:40:23 2007 +0000 @@ -14,7 +14,7 @@ [Description] Pidgin allows you to talk to anyone using a variety of messaging protocols, -including AIM (Oscar and TOC), ICQ, IRC, Yahoo!, MSN Messenger, Jabber, +including AIM (Oscar and TOC), ICQ, IRC, Yahoo!, MSN Messenger, XMPP, Gadu-Gadu, and Zephyr. These protocols are implemented using a modular, easy to use design. To use a protocol, just add an account using the account editor.
--- a/pidgin.spec.in Sun May 06 02:17:45 2007 +0000 +++ b/pidgin.spec.in Sun May 06 02:40:23 2007 +0000 @@ -132,7 +132,7 @@ %description Pidgin allows you to talk to anyone using a variety of messaging -protocols including AIM, MSN, Yahoo!, Jabber, Bonjour, Gadu-Gadu, +protocols including AIM, MSN, Yahoo!, XMPP, Bonjour, Gadu-Gadu, ICQ, IRC, Novell Groupwise, QQ, Lotus Sametime, SILC, Simple and Zephyr. These protocols are implemented using a modular, easy to use design. To use a protocol, just add an account using the @@ -154,7 +154,7 @@ and Finch. libpurple supports a variety of messaging protocols including AIM, MSN, -Yahoo!, Jabber, Bonjour, Gadu-Gadu, ICQ, IRC, Novell Groupwise, QQ, +Yahoo!, XMPP, Bonjour, Gadu-Gadu, ICQ, IRC, Novell Groupwise, QQ, Lotus Sametime, SILC, Simple and Zephyr. %description -n libpurple-devel
--- a/pidgin/Makefile.am Sun May 06 02:17:45 2007 +0000 +++ b/pidgin/Makefile.am Sun May 06 02:40:23 2007 +0000 @@ -27,6 +27,7 @@ win32/nsis/pidgin-installer.nsi \ win32/nsis/pidgin-plugin.nsh \ win32/nsis/langmacros.nsh \ + win32/nsis/translations/afrikaans.nsh \ win32/nsis/translations/albanian.nsh \ win32/nsis/translations/bulgarian.nsh \ win32/nsis/translations/catalan.nsh \
--- a/pidgin/gtkblist.c Sun May 06 02:17:45 2007 +0000 +++ b/pidgin/gtkblist.c Sun May 06 02:40:23 2007 +0000 @@ -4881,7 +4881,12 @@ status = pidgin_blist_get_status_icon((PurpleBlistNode*)buddy, PIDGIN_STATUS_ICON_SMALL); - avatar = pidgin_blist_get_buddy_icon((PurpleBlistNode *)buddy, TRUE, TRUE); + /* Speed it up if we don't want buddy icons. */ + if(biglist) + avatar = pidgin_blist_get_buddy_icon((PurpleBlistNode *)buddy, TRUE, TRUE); + else + avatar = NULL; + if (!avatar) { g_object_ref(G_OBJECT(gtkblist->empty_avatar)); avatar = gtkblist->empty_avatar; @@ -5059,6 +5064,7 @@ GdkPixbuf *avatar; GdkPixbuf *emblem; char *mark; + gboolean showicons = purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_buddy_icons"); if(!insert_node(list, node, &iter)) return; @@ -5066,7 +5072,12 @@ status = pidgin_blist_get_status_icon(node, PIDGIN_STATUS_ICON_SMALL); emblem = pidgin_blist_get_emblem(node); - avatar = pidgin_blist_get_buddy_icon(node, TRUE, FALSE); + + /* Speed it up if we don't want buddy icons. */ + if(showicons) + avatar = pidgin_blist_get_buddy_icon(node, TRUE, FALSE); + else + avatar = NULL; mark = g_markup_escape_text(purple_chat_get_name(chat), -1);
--- a/pidgin/gtkconv.c Sun May 06 02:17:45 2007 +0000 +++ b/pidgin/gtkconv.c Sun May 06 02:40:23 2007 +0000 @@ -376,7 +376,7 @@ PurpleCmdStatus status; if (!g_ascii_strcasecmp(args[0], "version")) { - tmp = g_strdup_printf("me is using " PIDGIN_NAME " v%s.", VERSION); + tmp = g_strdup_printf("me is using %s v%s.", PIDGIN_NAME, VERSION); markup = g_markup_escape_text(tmp, -1); status = purple_cmd_do_command(conv, tmp, markup, error);
--- a/pidgin/gtkdialogs.c Sun May 06 02:17:45 2007 +0000 +++ b/pidgin/gtkdialogs.c Sun May 06 02:40:23 2007 +0000 @@ -112,7 +112,7 @@ {"Adam Fritzler", N_("libfaim maintainer"), NULL}, /* If "lazy bum" translates literally into a serious insult, use something else or omit it. */ {"Syd Logan", N_("hacker and designated driver [lazy bum]"), NULL}, - {"Jim Seymour", N_("Jabber developer"), NULL}, + {"Jim Seymour", N_("XMPP developer"), NULL}, {"Mark Spencer", N_("original author"), "markster@marko.net"}, {"Eric Warmenhoven", N_("lead developer"), "warmenhoven@yahoo.com"}, {NULL, NULL, NULL} @@ -350,7 +350,9 @@ gdk_pixbuf_unref(pixbuf); /* Insert the logo */ obj = gtk_widget_get_accessible(logo); - atk_object_set_description(obj, PIDGIN_NAME " " VERSION); + tmp = g_strconcat(PIDGIN_NAME, " " VERSION, NULL); + atk_object_set_description(obj, tmp); + g_free(tmp); gtk_box_pack_start(GTK_BOX(vbox), logo, FALSE, FALSE, 0); frame = pidgin_create_imhtml(FALSE, &text, NULL, NULL); @@ -361,7 +363,7 @@ g_string_append_printf(str, _("%s is a modular messaging client capable of using " - "AIM, MSN, Yahoo!, Jabber, ICQ, IRC, SILC, SIP/SIMPLE, " + "AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, SIP/SIMPLE, " "Novell GroupWise, Lotus Sametime, Bonjour, Zephyr, " "Gadu-Gadu, and QQ all at once. " "It is written using GTK+.<BR><BR>" @@ -506,9 +508,9 @@ #endif #ifdef HAVE_SSL - g_string_append(str, " <b>SSL:</b> " PIDGIN_NAME " was compiled with SSL support.<br/>"); + g_string_append(str, " <b>SSL:</b> SSL support is present.<br/>"); #else - g_string_append(str, " <b>SSL:</b> " PIDGIN_NAME " was <b><i>NOT</i></b> compiled with any SSL support!<br/>"); + g_string_append(str, " <b>SSL:</b> SSL support was <b><i>NOT</i></b> compiled!<br/>"); #endif /* This might be useful elsewhere too, but it is particularly useful for
--- a/pidgin/gtkdocklet.c Sun May 06 02:17:45 2007 +0000 +++ b/pidgin/gtkdocklet.c Sun May 06 02:40:23 2007 +0000 @@ -171,7 +171,7 @@ g_list_free(convs); } else if (ui_ops->set_tooltip) { - char *tooltip_text = g_strconcat(PIDGIN_NAME " - ", + char *tooltip_text = g_strconcat(PIDGIN_NAME, " - ", purple_savedstatus_get_title(saved_status), NULL); ui_ops->set_tooltip(tooltip_text); g_free(tooltip_text); @@ -486,8 +486,8 @@ pidgin_separator(submenu); - new_menu_item_with_status_icon(submenu, _("New..."), PURPLE_STATUS_AVAILABLE, G_CALLBACK(show_custom_status_editor_cb), NULL, 0, 0, NULL); - new_menu_item_with_status_icon(submenu, _("Saved..."), PURPLE_STATUS_AVAILABLE, G_CALLBACK(pidgin_status_window_show), NULL, 0, 0, NULL); + pidgin_new_item_from_stock(submenu, _("New..."), NULL, G_CALLBACK(show_custom_status_editor_cb), NULL, 0, 0, NULL); + pidgin_new_item_from_stock(submenu, _("Saved..."), NULL, G_CALLBACK(pidgin_status_window_show), NULL, 0, 0, NULL); return menuitem; } @@ -648,6 +648,7 @@ void *conn_handle = purple_connections_get_handle(); void *conv_handle = purple_conversations_get_handle(); void *accounts_handle = purple_accounts_get_handle(); + void *status_handle = purple_savedstatuses_get_handle(); void *docklet_handle = pidgin_docklet_get_handle(); purple_prefs_add_none(PIDGIN_PREFS_ROOT "/docklet"); @@ -664,7 +665,7 @@ docklet_handle, PURPLE_CALLBACK(docklet_signed_on_cb), NULL); purple_signal_connect(conn_handle, "signed-off", docklet_handle, PURPLE_CALLBACK(docklet_signed_off_cb), NULL); - purple_signal_connect(accounts_handle, "account-status-changed", + purple_signal_connect(accounts_handle, "account-connecting", docklet_handle, PURPLE_CALLBACK(docklet_update_status_cb), NULL); purple_signal_connect(conv_handle, "received-im-msg", docklet_handle, PURPLE_CALLBACK(docklet_update_status_cb), NULL); @@ -674,6 +675,8 @@ docklet_handle, PURPLE_CALLBACK(docklet_update_status_cb), NULL); purple_signal_connect(conv_handle, "conversation-updated", docklet_handle, PURPLE_CALLBACK(docklet_conv_updated_cb), NULL); + purple_signal_connect(status_handle, "savedstatus-changed", + docklet_handle, PURPLE_CALLBACK(docklet_update_status_cb), NULL); #if 0 purple_signal_connect(purple_get_core(), "quitting", docklet_handle, PURPLE_CALLBACK(purple_quit_cb), NULL);
--- a/pidgin/gtkmain.c Sun May 06 02:17:45 2007 +0000 +++ b/pidgin/gtkmain.c Sun May 06 02:40:23 2007 +0000 @@ -498,18 +498,18 @@ "%s has segfaulted and attempted to dump a core file.\n" "This is a bug in the software and has happened through\n" "no fault of your own.\n\n" - "If you can reproduce the crash, please notify the Pidgin\n" - "developers by reporting a bug at\n" - "%sbug.php\n\n" + "If you can reproduce the crash, please notify the developers\n" + "by reporting a bug at:\n" + "%snewticket/\n\n" "Please make sure to specify what you were doing at the time\n" "and post the backtrace from the core file. If you do not know\n" "how to get the backtrace, please read the instructions at\n" - "%sgdb.php\n\n" + "%swiki/GetABacktrace\n\n" "If you need further assistance, please IM either SeanEgn or \n" "LSchiere (via AIM). Contact information for Sean and Luke \n" "on other protocols is at\n" - "%scontactinfo.php\n"), - PIDGIN_NAME, PURPLE_WEBSITE, PURPLE_WEBSITE, PURPLE_WEBSITE + "%swiki/DeveloperPages\n"), + PIDGIN_NAME, PURPLE_DEVEL_WEBSITE, PURPLE_DEVEL_WEBSITE, PURPLE_DEVEL_WEBSITE ); /* we have to convert the message (UTF-8 to console @@ -630,7 +630,7 @@ } /* show version message */ if (opt_version) { - printf(PIDGIN_NAME " %s\n", VERSION); + printf("%s %s\n", PIDGIN_NAME, VERSION); #ifdef HAVE_SIGNAL_H g_free(segfault_message); #endif @@ -667,7 +667,7 @@ if (!gui_check) { char *display = gdk_get_display(); - printf(PIDGIN_NAME " %s\n", VERSION); + printf("%s %s\n", PIDGIN_NAME, VERSION); g_warning("cannot open display: %s", display ? display : "unset"); g_free(display); @@ -727,7 +727,7 @@ if (!purple_core_init(PIDGIN_UI)) { fprintf(stderr, - "Initialization of the " PIDGIN_NAME " core failed. Dumping core.\n" + "Initialization of the libpurple core failed. Dumping core.\n" "Please report this!\n"); #ifdef HAVE_SIGNAL_H g_free(segfault_message);
--- a/pidgin/gtksound.c Sun May 06 02:17:45 2007 +0000 +++ b/pidgin/gtksound.c Sun May 06 02:40:23 2007 +0000 @@ -418,6 +418,7 @@ if (!strcmp(method, "custom")) { const char *sound_cmd; char *command; + char *esc_filename; GError *error = NULL; sound_cmd = purple_prefs_get_path(PIDGIN_PREFS_ROOT "/sound/command"); @@ -429,16 +430,19 @@ return; } + esc_filename = g_shell_quote(filename); + if(strstr(sound_cmd, "%s")) - command = purple_strreplace(sound_cmd, "%s", filename); + command = purple_strreplace(sound_cmd, "%s", esc_filename); else - command = g_strdup_printf("%s %s", sound_cmd, filename); + command = g_strdup_printf("%s %s", sound_cmd, esc_filename); if(!g_spawn_command_line_async(command, &error)) { purple_debug_error("gtksound", "sound command could not be launched: %s\n", error->message); g_error_free(error); } + g_free(esc_filename); g_free(command); return; }
--- a/pidgin/gtkutils.c Sun May 06 02:17:45 2007 +0000 +++ b/pidgin/gtkutils.c Sun May 06 02:40:23 2007 +0000 @@ -1417,7 +1417,7 @@ char *str, *str2; str = g_strdup_printf(_("Cannot send folder %s."), basename); - str2 = g_strdup_printf(_("%s cannot transfer a folder. You will need to send the files within individually"), PIDGIN_NAME); + str2 = g_strdup_printf(_("%s cannot transfer a folder. You will need to send the files within individually."), PIDGIN_NAME); purple_notify_error(NULL, NULL, str, str2);
--- a/pidgin/pidgin.h Sun May 06 02:17:45 2007 +0000 +++ b/pidgin/pidgin.h Sun May 06 02:40:23 2007 +0000 @@ -45,6 +45,9 @@ /* change this only when we have a sane upgrade path for old prefs */ #define PIDGIN_PREFS_ROOT "/pidgin" +/* Translators may want to transliterate the name. */ +#define PIDGIN_NAME _("Pidgin") + #ifndef _WIN32 # define PIDGIN_ALERT_TITLE "" #else
--- a/pidgin/plugins/Makefile.am Sun May 06 02:17:45 2007 +0000 +++ b/pidgin/plugins/Makefile.am Sun May 06 02:40:23 2007 +0000 @@ -107,7 +107,6 @@ AM_CPPFLAGS = \ -DDATADIR=\"$(datadir)\" \ - -DVERSION=\"$(VERSION)\" \ -I$(top_builddir)/libpurple \ -I$(top_srcdir)/libpurple \ -I$(top_srcdir)/pidgin \
--- a/pidgin/plugins/cap/Makefile.am Sun May 06 02:17:45 2007 +0000 +++ b/pidgin/plugins/cap/Makefile.am Sun May 06 02:40:23 2007 +0000 @@ -19,7 +19,6 @@ AM_CPPFLAGS = \ -DDATADIR=\"$(datadir)\" \ - -DVERSION=\"$(VERSION)\" \ -I$(top_srcdir)/libpurple \ -I$(top_builddir)/libpurple \ -I$(top_srcdir)/pidgin \
--- a/pidgin/plugins/gestures/Makefile.am Sun May 06 02:17:45 2007 +0000 +++ b/pidgin/plugins/gestures/Makefile.am Sun May 06 02:40:23 2007 +0000 @@ -19,7 +19,6 @@ AM_CPPFLAGS = \ -DDATADIR=\"$(datadir)\" \ - -DVERSION=\"$(VERSION)\" \ -I$(top_srcdir)/libpurple \ -I$(top_builddir)/libpurple \ -I$(top_srcdir)/pidgin \
--- a/pidgin/plugins/gevolution/Makefile.am Sun May 06 02:17:45 2007 +0000 +++ b/pidgin/plugins/gevolution/Makefile.am Sun May 06 02:40:23 2007 +0000 @@ -21,7 +21,6 @@ AM_CPPFLAGS = \ -DDATADIR=\"$(datadir)\" \ - -DVERSION=\"$(VERSION)\" \ -I$(top_srcdir)/libpurple \ -I$(top_builddir)/libpurple \ -I$(top_srcdir)/pidgin \
--- a/pidgin/plugins/musicmessaging/Makefile.am Sun May 06 02:17:45 2007 +0000 +++ b/pidgin/plugins/musicmessaging/Makefile.am Sun May 06 02:40:23 2007 +0000 @@ -36,7 +36,6 @@ AM_CPPFLAGS = \ -DDATADIR=\"$(datadir)\" \ - -DVERSION=\"$(VERSION)\" \ -I$(top_builddir)/libpurple \ -I$(top_srcdir)/libpurple \ -I$(top_srcdir)/pidgin \
--- a/pidgin/plugins/perl/Makefile.am Sun May 06 02:17:45 2007 +0000 +++ b/pidgin/plugins/perl/Makefile.am Sun May 06 02:40:23 2007 +0000 @@ -95,7 +95,6 @@ @rm -f Makefile AM_CPPFLAGS = \ - -DVERSION=\"$(VERSION)\" \ -I$(top_srcdir) \ -I$(top_srcdir)/libpurple \ -I$(top_builddir)/libpurple \
--- a/pidgin/plugins/raw.c Sun May 06 02:17:45 2007 +0000 +++ b/pidgin/plugins/raw.c Sun May 06 02:40:23 2007 +0000 @@ -175,7 +175,7 @@ N_("Raw"), VERSION, N_("Lets you send raw input to text-based protocols."), - N_("Lets you send raw input to text-based protocols (Jabber, MSN, IRC, " + N_("Lets you send raw input to text-based protocols (XMPP, MSN, IRC, " "TOC). Hit 'Enter' in the entry box to send. Watch the debug window."), "Eric Warmenhoven <eric@warmenhoven.org>", PURPLE_WEBSITE,
--- a/pidgin/plugins/ticker/Makefile.am Sun May 06 02:17:45 2007 +0000 +++ b/pidgin/plugins/ticker/Makefile.am Sun May 06 02:40:23 2007 +0000 @@ -20,7 +20,6 @@ AM_CPPFLAGS = \ -DDATADIR=\"$(datadir)\" \ - -DVERSION=\"$(VERSION)\" \ -I$(top_srcdir)/libpurple \ -I$(top_builddir)/libpurple \ -I$(top_srcdir)/pidgin \
--- a/pidgin/plugins/timestamp_format.c Sun May 06 02:17:45 2007 +0000 +++ b/pidgin/plugins/timestamp_format.c Sun May 06 02:40:23 2007 +0000 @@ -23,7 +23,7 @@ ppref = purple_plugin_pref_new_with_label(_("Timestamp Format Options")); purple_plugin_pref_frame_add(frame, ppref); - tmp = g_strdup_printf(_("_Force (traditional %s) 24-hour time format"), PIDGIN_NAME); + tmp = g_strdup_printf(_("_Force 24-hour time format")); ppref = purple_plugin_pref_new_with_name_and_label( "/plugins/gtk/timestamp_format/force_24hr", tmp);
--- a/po/ChangeLog Sun May 06 02:17:45 2007 +0000 +++ b/po/ChangeLog Sun May 06 02:40:23 2007 +0000 @@ -1,6 +1,6 @@ Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul -version 2.0.0: +version 2.0.0 (5/3/2007): * Afrikaans translation added (Friedel Wolff) * Afrikaans win32 translation added (Friedel Wolff) * Albanian translation updated (Besnik Bleta)
--- a/po/POTFILES.in Sun May 06 02:17:45 2007 +0000 +++ b/po/POTFILES.in Sun May 06 02:40:23 2007 +0000 @@ -177,6 +177,7 @@ pidgin/gtkutils.c pidgin/gtkwhiteboard.c pidgin/pidgincombobox.c +pidgin/pidgin.h pidgin/pidginstock.c pidgin/plugins/cap/cap.c pidgin/plugins/contact_priority.c
--- a/po/en_AU.po Sun May 06 02:17:45 2007 +0000 +++ b/po/en_AU.po Sun May 06 02:40:23 2007 +0000 @@ -849,10 +849,10 @@ #: plugins/raw.c:154 msgid "" -"Lets you send raw input to text-based protocols (Jabber, MSN, IRC, TOC). Hit " +"Lets you send raw input to text-based protocols (XMPP, MSN, IRC, TOC). Hit " "'Enter' in the entry box to send. Watch the debug window." msgstr "" -"Lets you send raw input to text-based protocols (Jabber, MSN, IRC, TOC). Hit " +"Lets you send raw input to text-based protocols (XMPP, MSN, IRC, TOC). Hit " "'Enter' in the entry box to send. Watch the debug window." #: plugins/relnot.c:63 @@ -2822,8 +2822,8 @@ #: src/gtkdialogs.c:92 #, fuzzy -msgid "Jabber developer" -msgstr "former Jabber developer" +msgid "XMPP developer" +msgstr "former XMPP developer" #: src/gtkdialogs.c:93 msgid "original author" @@ -2996,11 +2996,11 @@ #, fuzzy msgid "" "Gaim is a modular messaging client capable of using AIM, MSN, Yahoo!, " -"Jabber, ICQ, IRC, SILC, Novell GroupWise, Napster, Zephyr, and Gadu-Gadu all " +"XMPP, ICQ, IRC, SILC, Novell GroupWise, Napster, Zephyr, and Gadu-Gadu all " "at once. It is written using GTK+ and is licensed under the GNU GPL.<BR><BR>" msgstr "" "Gaim is a modular messaging client capable of using AIM, MSN, Yahoo!, " -"Jabber, ICQ, IRC, SILC, Novell GroupWise, Napster, Zephyr, and Gadu-Gadu all " +"XMPP, ICQ, IRC, SILC, Novell GroupWise, Napster, Zephyr, and Gadu-Gadu all " "at once. It is written using Gtk+ and is licensed under the GPL.<BR><BR>" #: src/gtkdialogs.c:235 @@ -5001,7 +5001,7 @@ #: src/protocols/gg/gg.c:1495 src/protocols/gg/gg.c:1496 #, fuzzy msgid "Register New Gadu-Gadu Account" -msgstr "Register New Jabber Account" +msgstr "Register New XMPP Account" #: src/protocols/gg/gg.c:1497 msgid "Please, fill in the following fields" @@ -5723,8 +5723,8 @@ msgstr "Birthday" #: src/protocols/jabber/buddy.c:567 src/protocols/jabber/buddy.c:568 -msgid "Edit Jabber vCard" -msgstr "Edit Jabber vCard" +msgid "Edit XMPP vCard" +msgstr "Edit XMPP vCard" #: src/protocols/jabber/buddy.c:569 msgid "" @@ -5735,8 +5735,8 @@ "comfortable." #: src/protocols/jabber/buddy.c:616 -msgid "Jabber ID" -msgstr "Jabber ID" +msgid "XMPP ID" +msgstr "XMPP ID" #: src/protocols/jabber/buddy.c:642 src/protocols/jabber/jabber.c:1711 msgid "Resource" @@ -5814,7 +5814,7 @@ msgstr "" #: src/protocols/jabber/buddy.c:1327 -msgid "Fill in one or more fields to search for any matching Jabber users." +msgid "Fill in one or more fields to search for any matching XMPP users." msgstr "" #: src/protocols/jabber/buddy.c:1331 src/protocols/jabber/jabber.c:653 @@ -5833,7 +5833,7 @@ #: src/protocols/jabber/buddy.c:1355 src/protocols/jabber/buddy.c:1356 #, fuzzy -msgid "Search for Jabber users" +msgid "Search for XMPP users" msgstr "Search for a buddy by e-mail address" #: src/protocols/jabber/buddy.c:1370 @@ -5959,8 +5959,8 @@ msgstr "Unable to create socket" #: src/protocols/jabber/jabber.c:403 src/protocols/jabber/jabber.c:740 -msgid "Invalid Jabber ID" -msgstr "Invalid Jabber ID" +msgid "Invalid XMPP ID" +msgstr "Invalid XMPP ID" #: src/protocols/jabber/jabber.c:473 #, c-format @@ -6006,8 +6006,8 @@ msgstr "Please fill out the information below to register your new account." #: src/protocols/jabber/jabber.c:704 src/protocols/jabber/jabber.c:705 -msgid "Register New Jabber Account" -msgstr "Register New Jabber Account" +msgid "Register New XMPP Account" +msgstr "Register New XMPP Account" #: src/protocols/jabber/jabber.c:842 msgid "Initializing Stream" @@ -6079,8 +6079,8 @@ msgstr "Password (again)" #: src/protocols/jabber/jabber.c:1160 src/protocols/jabber/jabber.c:1161 -msgid "Change Jabber Password" -msgstr "Change Jabber Password" +msgid "Change XMPP Password" +msgstr "Change XMPP Password" #: src/protocols/jabber/jabber.c:1161 msgid "Please enter your new password" @@ -6130,8 +6130,8 @@ msgstr "Item Not Found" #: src/protocols/jabber/jabber.c:1271 -msgid "Malformed Jabber ID" -msgstr "Malformed Jabber ID" +msgid "Malformed XMPP ID" +msgstr "Malformed XMPP ID" #: src/protocols/jabber/jabber.c:1273 msgid "Not Acceptable" @@ -6377,8 +6377,8 @@ #. * summary #. * description #: src/protocols/jabber/jabber.c:1686 src/protocols/jabber/jabber.c:1688 -msgid "Jabber Protocol Plugin" -msgstr "Jabber Protocol Plugin" +msgid "XMPP Protocol Plugin" +msgstr "XMPP Protocol Plugin" #: src/protocols/jabber/jabber.c:1714 msgid "Use TLS if available" @@ -6428,8 +6428,8 @@ msgstr "Message delivery to %s failed: %s" #: src/protocols/jabber/message.c:233 -msgid "Jabber Message Error" -msgstr "Jabber Message Error" +msgid "XMPP Message Error" +msgstr "XMPP Message Error" #: src/protocols/jabber/message.c:297 #, c-format @@ -12182,8 +12182,8 @@ #~ msgid "Invalid nickname" #~ msgstr "Invalid Username" -#~ msgid "Jabber Profile" -#~ msgstr "Jabber Profile" +#~ msgid "XMPP Profile" +#~ msgstr "XMPP Profile" #~ msgid "Roomlist Error" #~ msgstr "Roomlist Error"
--- a/po/en_CA.po Sun May 06 02:17:45 2007 +0000 +++ b/po/en_CA.po Sun May 06 02:40:23 2007 +0000 @@ -849,10 +849,10 @@ #: plugins/raw.c:154 msgid "" -"Lets you send raw input to text-based protocols (Jabber, MSN, IRC, TOC). Hit " +"Lets you send raw input to text-based protocols (XMPP, MSN, IRC, TOC). Hit " "'Enter' in the entry box to send. Watch the debug window." msgstr "" -"Lets you send raw input to text-based protocols (Jabber, MSN, IRC, TOC). Hit " +"Lets you send raw input to text-based protocols (XMPP, MSN, IRC, TOC). Hit " "'Enter' in the entry box to send. Watch the debug window." #: plugins/relnot.c:63 @@ -2818,8 +2818,8 @@ #: src/gtkdialogs.c:92 #, fuzzy -msgid "Jabber developer" -msgstr "former Jabber developer" +msgid "XMPP developer" +msgstr "former XMPP developer" #: src/gtkdialogs.c:93 msgid "original author" @@ -2992,11 +2992,11 @@ #, fuzzy msgid "" "Gaim is a modular messaging client capable of using AIM, MSN, Yahoo!, " -"Jabber, ICQ, IRC, SILC, Novell GroupWise, Napster, Zephyr, and Gadu-Gadu all " +"XMPP, ICQ, IRC, SILC, Novell GroupWise, Napster, Zephyr, and Gadu-Gadu all " "at once. It is written using GTK+ and is licensed under the GNU GPL.<BR><BR>" msgstr "" "Gaim is a modular messaging client capable of using AIM, MSN, Yahoo!, " -"Jabber, ICQ, IRC, SILC, Novell GroupWise, Napster, Zephyr, and Gadu-Gadu all " +"XMPP, ICQ, IRC, SILC, Novell GroupWise, Napster, Zephyr, and Gadu-Gadu all " "at once. It is written using Gtk+ and is licenced under the GPL.<BR><BR>" #: src/gtkdialogs.c:235 @@ -4996,7 +4996,7 @@ #: src/protocols/gg/gg.c:1495 src/protocols/gg/gg.c:1496 #, fuzzy msgid "Register New Gadu-Gadu Account" -msgstr "Register New Jabber Account" +msgstr "Register New XMPP Account" #: src/protocols/gg/gg.c:1497 msgid "Please, fill in the following fields" @@ -5717,8 +5717,8 @@ msgstr "Birthday" #: src/protocols/jabber/buddy.c:567 src/protocols/jabber/buddy.c:568 -msgid "Edit Jabber vCard" -msgstr "Edit Jabber vCard" +msgid "Edit XMPP vCard" +msgstr "Edit XMPP vCard" #: src/protocols/jabber/buddy.c:569 msgid "" @@ -5729,8 +5729,8 @@ "comfortable." #: src/protocols/jabber/buddy.c:616 -msgid "Jabber ID" -msgstr "Jabber ID" +msgid "XMPP ID" +msgstr "XMPP ID" #: src/protocols/jabber/buddy.c:642 src/protocols/jabber/jabber.c:1711 msgid "Resource" @@ -5808,7 +5808,7 @@ msgstr "" #: src/protocols/jabber/buddy.c:1327 -msgid "Fill in one or more fields to search for any matching Jabber users." +msgid "Fill in one or more fields to search for any matching XMPP users." msgstr "" #: src/protocols/jabber/buddy.c:1331 src/protocols/jabber/jabber.c:653 @@ -5827,7 +5827,7 @@ #: src/protocols/jabber/buddy.c:1355 src/protocols/jabber/buddy.c:1356 #, fuzzy -msgid "Search for Jabber users" +msgid "Search for XMPP users" msgstr "Search for a buddy by e-mail address" #: src/protocols/jabber/buddy.c:1370 @@ -5953,8 +5953,8 @@ msgstr "Unable to create socket" #: src/protocols/jabber/jabber.c:403 src/protocols/jabber/jabber.c:740 -msgid "Invalid Jabber ID" -msgstr "Invalid Jabber ID" +msgid "Invalid XMPP ID" +msgstr "Invalid XMPP ID" #: src/protocols/jabber/jabber.c:473 #, c-format @@ -6000,8 +6000,8 @@ msgstr "Please fill out the information below to register your new account." #: src/protocols/jabber/jabber.c:704 src/protocols/jabber/jabber.c:705 -msgid "Register New Jabber Account" -msgstr "Register New Jabber Account" +msgid "Register New XMPP Account" +msgstr "Register New XMPP Account" #: src/protocols/jabber/jabber.c:842 msgid "Initializing Stream" @@ -6073,8 +6073,8 @@ msgstr "Password (again)" #: src/protocols/jabber/jabber.c:1160 src/protocols/jabber/jabber.c:1161 -msgid "Change Jabber Password" -msgstr "Change Jabber Password" +msgid "Change XMPP Password" +msgstr "Change XMPP Password" #: src/protocols/jabber/jabber.c:1161 msgid "Please enter your new password" @@ -6124,8 +6124,8 @@ msgstr "Item Not Found" #: src/protocols/jabber/jabber.c:1271 -msgid "Malformed Jabber ID" -msgstr "Malformed Jabber ID" +msgid "Malformed XMPP ID" +msgstr "Malformed XMPP ID" #: src/protocols/jabber/jabber.c:1273 msgid "Not Acceptable" @@ -6371,8 +6371,8 @@ #. * summary #. * description #: src/protocols/jabber/jabber.c:1686 src/protocols/jabber/jabber.c:1688 -msgid "Jabber Protocol Plugin" -msgstr "Jabber Protocol Plugin" +msgid "XMPP Protocol Plugin" +msgstr "XMPP Protocol Plugin" #: src/protocols/jabber/jabber.c:1714 msgid "Use TLS if available" @@ -6422,8 +6422,8 @@ msgstr "Message delivery to %s failed: %s" #: src/protocols/jabber/message.c:233 -msgid "Jabber Message Error" -msgstr "Jabber Message Error" +msgid "XMPP Message Error" +msgstr "XMPP Message Error" #: src/protocols/jabber/message.c:297 #, c-format @@ -12162,8 +12162,8 @@ #~ msgid "Invalid nickname" #~ msgstr "Invalid Username" -#~ msgid "Jabber Profile" -#~ msgstr "Jabber Profile" +#~ msgid "XMPP Profile" +#~ msgstr "XMPP Profile" #~ msgid "Roomlist Error" #~ msgstr "Roomlist Error"
--- a/po/en_GB.po Sun May 06 02:17:45 2007 +0000 +++ b/po/en_GB.po Sun May 06 02:40:23 2007 +0000 @@ -2744,10 +2744,10 @@ #: ../libpurple/plugins/psychic.c:21 msgid "" "Causes conversation windows to appear as other users begin to message you. " -"This works for AIM, ICQ, Jabber, Sametime, and Yahoo!" +"This works for AIM, ICQ, XMPP, Sametime, and Yahoo!" msgstr "" "Causes conversation windows to appear as other users begin to message you. " -"This works for AIM, ICQ, Jabber, Sametime, and Yahoo!" +"This works for AIM, ICQ, XMPP, Sametime, and Yahoo!" #: ../libpurple/plugins/psychic.c:66 msgid "You feel a disturbance in the force..." @@ -3025,8 +3025,8 @@ msgstr "AIM Account" #: ../libpurple/protocols/bonjour/bonjour.c:583 -msgid "Jabber Account" -msgstr "Jabber Account" +msgid "XMPP Account" +msgstr "XMPP Account" #: ../libpurple/protocols/bonjour/bonjour.h:35 msgid "Bonjour" @@ -4204,8 +4204,8 @@ #: ../libpurple/protocols/jabber/buddy.c:582 #: ../libpurple/protocols/jabber/buddy.c:583 -msgid "Edit Jabber vCard" -msgstr "Edit Jabber vCard" +msgid "Edit XMPP vCard" +msgstr "Edit XMPP vCard" #: ../libpurple/protocols/jabber/buddy.c:584 msgid "" @@ -4320,7 +4320,7 @@ msgid "The following are the results of your search" msgstr "The following are the results of your search" -#. current comment from Jabber User Directory users.jabber.org +#. current comment from XMPP User Directory users.jabber.org #: ../libpurple/protocols/jabber/buddy.c:1674 msgid "" "Find a contact by entering the search criteria in the given fields. Note: " @@ -4345,8 +4345,8 @@ msgstr "Server Instructions: %s" #: ../libpurple/protocols/jabber/buddy.c:1736 -msgid "Fill in one or more fields to search for any matching Jabber users." -msgstr "Fill in one or more fields to search for any matching Jabber users." +msgid "Fill in one or more fields to search for any matching XMPP users." +msgstr "Fill in one or more fields to search for any matching XMPP users." #: ../libpurple/protocols/jabber/buddy.c:1756 #: ../libpurple/protocols/novell/novell.c:1488 @@ -4357,8 +4357,8 @@ #: ../libpurple/protocols/jabber/buddy.c:1765 #: ../libpurple/protocols/jabber/buddy.c:1766 -msgid "Search for Jabber users" -msgstr "Search for Jabber users" +msgid "Search for XMPP users" +msgstr "Search for XMPP users" #. "Search" #: ../libpurple/protocols/jabber/buddy.c:1767 @@ -4501,8 +4501,8 @@ #: ../libpurple/protocols/jabber/jabber.c:567 #: ../libpurple/protocols/jabber/jabber.c:910 -msgid "Invalid Jabber ID" -msgstr "Invalid Jabber ID" +msgid "Invalid XMPP ID" +msgstr "Invalid XMPP ID" #: ../libpurple/protocols/jabber/jabber.c:638 #, c-format @@ -4556,8 +4556,8 @@ #: ../libpurple/protocols/jabber/jabber.c:873 #: ../libpurple/protocols/jabber/jabber.c:874 -msgid "Register New Jabber Account" -msgstr "Register New Jabber Account" +msgid "Register New XMPP Account" +msgstr "Register New XMPP Account" #. Register button #: ../libpurple/protocols/jabber/jabber.c:875 ../pidgin/gtkaccount.c:1478 @@ -4631,8 +4631,8 @@ #: ../libpurple/protocols/jabber/jabber.c:1368 #: ../libpurple/protocols/jabber/jabber.c:1369 -msgid "Change Jabber Password" -msgstr "Change Jabber Password" +msgid "Change XMPP Password" +msgstr "Change XMPP Password" #: ../libpurple/protocols/jabber/jabber.c:1369 msgid "Please enter your new password" @@ -4686,8 +4686,8 @@ msgstr "Item Not Found" #: ../libpurple/protocols/jabber/jabber.c:1481 -msgid "Malformed Jabber ID" -msgstr "Malformed Jabber ID" +msgid "Malformed XMPP ID" +msgstr "Malformed XMPP ID" #: ../libpurple/protocols/jabber/jabber.c:1483 msgid "Not Acceptable" @@ -4954,8 +4954,8 @@ #. * description #: ../libpurple/protocols/jabber/jabber.c:1972 #: ../libpurple/protocols/jabber/jabber.c:1974 -msgid "Jabber Protocol Plugin" -msgstr "Jabber Protocol Plug-in" +msgid "XMPP Protocol Plugin" +msgstr "XMPP Protocol Plug-in" #: ../libpurple/protocols/jabber/jabber.c:2000 msgid "Force old (port 5223) SSL" @@ -4997,8 +4997,8 @@ msgstr "Message delivery to %s failed: %s" #: ../libpurple/protocols/jabber/message.c:272 -msgid "Jabber Message Error" -msgstr "Jabber Message Error" +msgid "XMPP Message Error" +msgstr "XMPP Message Error" #: ../libpurple/protocols/jabber/message.c:352 #, c-format @@ -12364,8 +12364,8 @@ msgstr "hacker and designated driver [lazy bum]" #: ../pidgin/gtkdialogs.c:114 -msgid "Jabber developer" -msgstr "Jabber developer" +msgid "XMPP developer" +msgstr "XMPP developer" #: ../pidgin/gtkdialogs.c:115 msgid "original author" @@ -12634,7 +12634,7 @@ #: ../pidgin/gtkdialogs.c:360 #, c-format msgid "" -"%s is a modular messaging client capable of using AIM, MSN, Yahoo!, Jabber, " +"%s 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 is written using GTK+.<BR><BR>You " "may modify and redistribute the program under the terms of the GPL (version " @@ -12643,7 +12643,7 @@ "'COPYRIGHT' file for the complete list of contributors. We provide no " "warranty for this program.<BR><BR>" msgstr "" -"%s is a modular messaging client capable of using AIM, MSN, Yahoo!, Jabber, " +"%s 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 is written using GTK+.<BR><BR>You " "may modify and redistribute the program under the terms of the GPL (version " @@ -15035,10 +15035,10 @@ #: ../pidgin/plugins/raw.c:178 msgid "" -"Lets you send raw input to text-based protocols (Jabber, MSN, IRC, TOC). Hit " +"Lets you send raw input to text-based protocols (XMPP, MSN, IRC, TOC). Hit " "'Enter' in the entry box to send. Watch the debug window." msgstr "" -"Lets you send raw input to text-based protocols (Jabber, MSN, IRC, TOC). Hit " +"Lets you send raw input to text-based protocols (XMPP, MSN, IRC, TOC). Hit " "'Enter' in the entry box to send. Watch the debug window." #: ../pidgin/plugins/relnot.c:71