Mercurial > pidgin
changeset 16998:2f9e5cde6f97
merge of '493a2b4859d71c992634fcaf587a2df730d6c43d'
and 'a819b8c53725b23320edf69c32888cb5a5ffa764'
author | Jeffrey Connelly <jaconnel@calpoly.edu> |
---|---|
date | Thu, 10 May 2007 03:00:31 +0000 |
parents | 34d9037a228c (current diff) 667a5a24781c (diff) |
children | e60489559d35 531a4585d437 |
files | |
diffstat | 28 files changed, 554 insertions(+), 179 deletions(-) [+] |
line wrap: on
line diff
--- a/COPYRIGHT Thu May 10 02:58:35 2007 +0000 +++ b/COPYRIGHT Thu May 10 03:00:31 2007 +0000 @@ -88,6 +88,7 @@ Jeramey Crawford Michael Culbertson Martijn Dekker +Vinicius Depizzol Philip Derrin Taso N. Devetzis Balwinder Singh Dheeman
--- a/ChangeLog Thu May 10 02:58:35 2007 +0000 +++ b/ChangeLog Thu May 10 03:00:31 2007 +0000 @@ -3,14 +3,25 @@ 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. + * Fix icons on docklet change status menu to match the status selector + * Custom smileys on MSN can be saved by right-clicking on them + * Fix a crash deleting a buddy that is in the Buddy List more than once + * Compile fixes for Solaris + * Fix GTalk formatting when there's a space before/after a */_ + * Fix Log viewer crash when the filename is not in the expected format + * Get User Info now provides immediate feedback, and is updated when the + user information is available + * Make the choose buddy icon dialog correctly list the current directory + * Fix for buddy icons disappearing + * Timestamps are always on in debug output (-d) and Debug Window now + * Don't escape html entities in Yahoo! system messages 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. + "/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
--- a/doc/finch.1.in Thu May 10 02:58:35 2007 +0000 +++ b/doc/finch.1.in Thu May 10 03:00:31 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
--- a/doc/pidgin.1.in Thu May 10 02:58:35 2007 +0000 +++ b/doc/pidgin.1.in Thu May 10 03:00:31 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
--- a/finch/gntconv.c Thu May 10 02:58:35 2007 +0000 +++ b/finch/gntconv.c Thu May 10 03:00:31 2007 +0000 @@ -303,6 +303,11 @@ get_info_cb(GntMenuItem *item, gpointer ggconv) { FinchConv *ggc = ggconv; + PurpleNotifyUserInfo *info = purple_notify_user_info_new(); + purple_notify_user_info_add_pair(info, _("Information"), _("Retrieving...")); + purple_notify_userinfo(ggc->active_conv->account->gc, purple_conversation_get_name(ggc->active_conv), info, NULL, NULL); + purple_notify_user_info_destroy(info); + serv_get_info(purple_conversation_get_gc(ggc->active_conv), purple_conversation_get_name(ggc->active_conv)); }
--- a/finch/gntdebug.c Thu May 10 02:58:35 2007 +0000 +++ b/finch/gntdebug.c Thu May 10 03:00:31 2007 +0000 @@ -43,7 +43,6 @@ GntWidget *window; GntWidget *tview; gboolean paused; - gboolean timestamps; } debug; static void @@ -54,14 +53,11 @@ { int pos = gnt_text_view_get_lines_below(GNT_TEXT_VIEW(debug.tview)); GntTextFormatFlags flag = GNT_TEXT_FLAG_NORMAL; - - if (debug.timestamps) { - const char *mdate; - time_t mtime = time(NULL); - mdate = purple_utf8_strftime("%H:%M:%S ", localtime(&mtime)); - gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(debug.tview), - mdate, flag); - } + const char *mdate; + time_t mtime = time(NULL); + mdate = purple_utf8_strftime("%H:%M:%S ", localtime(&mtime)); + gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(debug.tview), + mdate, flag); gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(debug.tview), category, GNT_TEXT_FLAG_BOLD); @@ -137,13 +133,6 @@ debug.paused = !debug.paused; } -static void -toggle_timestamps(GntWidget *w, gpointer n) -{ - debug.timestamps = !debug.timestamps; - purple_prefs_set_bool("/purple/debug/timestamps", debug.timestamps); -} - /* Xerox */ static void purple_glib_log_handler(const gchar *domain, GLogLevelFlags flags, @@ -202,7 +191,6 @@ void finch_debug_window_show() { debug.paused = FALSE; - debug.timestamps = purple_prefs_get_bool("/purple/debug/timestamps"); if (debug.window == NULL) { GntWidget *wid, *box; @@ -239,12 +227,6 @@ GNT_WIDGET_SET_FLAGS(wid, GNT_WIDGET_GROW_Y); gnt_box_add_widget(GNT_BOX(box), wid); - wid = gnt_check_box_new(_("Timestamps")); - gnt_check_box_set_checked(GNT_CHECK_BOX(wid), debug.timestamps); - g_signal_connect(G_OBJECT(wid), "toggled", G_CALLBACK(toggle_timestamps), NULL); - GNT_WIDGET_SET_FLAGS(wid, GNT_WIDGET_GROW_Y); - gnt_box_add_widget(GNT_BOX(box), wid); - gnt_box_add_widget(GNT_BOX(debug.window), box); GNT_WIDGET_SET_FLAGS(box, GNT_WIDGET_GROW_Y);
--- a/libpurple/buddyicon.c Thu May 10 02:58:35 2007 +0000 +++ b/libpurple/buddyicon.c Thu May 10 03:00:31 2007 +0000 @@ -416,7 +416,7 @@ } ref_filename(filename); } - else + else if (!icon->img) { purple_blist_node_remove_setting((PurpleBlistNode *)buddy, "buddy_icon"); purple_blist_node_remove_setting((PurpleBlistNode *)buddy, "icon_checksum");
--- a/libpurple/debug.c Thu May 10 02:58:35 2007 +0000 +++ b/libpurple/debug.c Thu May 10 03:00:31 2007 +0000 @@ -61,18 +61,12 @@ if (debug_enabled) { gchar *ts_s; - - if ((category != NULL) && - (purple_prefs_exists("/purple/debug/timestamps")) && - (purple_prefs_get_bool("/purple/debug/timestamps"))) { - const char *mdate; + const char *mdate; + time_t mtime = time(NULL); - time_t mtime = time(NULL); - mdate = purple_utf8_strftime("%H:%M:%S", localtime(&mtime)); - ts_s = g_strdup_printf("(%s) ", mdate); - } else { - ts_s = g_strdup(""); - } + + mdate = purple_utf8_strftime("%H:%M:%S", localtime(&mtime)); + ts_s = g_strdup_printf("(%s) ", mdate); if (category == NULL) g_print("%s%s", ts_s, arg_s); @@ -189,11 +183,4 @@ void purple_debug_init(void) { - purple_prefs_add_none("/purple/debug"); - - /* - * This pref is currently used by both the console - * output and the debug window output. - */ - purple_prefs_add_bool("/purple/debug/timestamps", FALSE); }
--- a/libpurple/prefs.c Thu May 10 02:58:35 2007 +0000 +++ b/libpurple/prefs.c Thu May 10 03:00:31 2007 +0000 @@ -1355,6 +1355,7 @@ purple_prefs_remove("/plugins/core/autorecon/hide_reconnecting_dialog"); purple_prefs_remove("/plugins/core/autorecon/restore_state"); purple_prefs_remove("/plugins/core/autorecon"); + purple_prefs_remove("/purple/debug/timestamps"); /* Convert old sounds while_away pref to new 3-way pref. */ if (purple_prefs_exists("/purple/sound/while_away") &&
--- a/libpurple/protocols/jabber/buddy.c Thu May 10 02:58:35 2007 +0000 +++ b/libpurple/protocols/jabber/buddy.c Thu May 10 03:00:31 2007 +0000 @@ -1118,6 +1118,24 @@ return FALSE; } +static gboolean _client_is_blacklisted(JabberBuddyResource *jbr, const char *ns) +{ + /* can't be blacklisted if we don't know what you're running yet */ + if(!jbr->client.name) + return FALSE; + + if(!strcmp(ns, "jabber:iq:last")) { + if(!strcmp(jbr->client.name, "Trillian")) { + if(!strcmp(jbr->client.version, "3.1.0.121")) { + /* verified by nwalp 2007/05/09 */ + return TRUE; + } + } + } + + return FALSE; +} + static void jabber_buddy_get_info_for_jid(JabberStream *js, const char *jid) { JabberIq *iq; @@ -1175,11 +1193,18 @@ jabber_iq_send(iq); } - iq = jabber_iq_new_query(js, JABBER_IQ_GET, "jabber:iq:last"); - xmlnode_set_attrib(iq->node, "to", full_jid); - jabber_iq_set_callback(iq, jabber_last_parse, jbi); - jbi->ids = g_slist_prepend(jbi->ids, g_strdup(iq->id)); - jabber_iq_send(iq); + /* this is to fix the feeling of irritation I get when trying + * to get info on a friend running Trillian, which doesn't + * respont (with an error or otherwise) to jabber:iq:last + * requests. There are a number of Trillian users in my + * office. */ + if(!_client_is_blacklisted(jbr, "jabber:iq:last")) { + iq = jabber_iq_new_query(js, JABBER_IQ_GET, "jabber:iq:last"); + xmlnode_set_attrib(iq->node, "to", full_jid); + jabber_iq_set_callback(iq, jabber_last_parse, jbi); + jbi->ids = g_slist_prepend(jbi->ids, g_strdup(iq->id)); + jabber_iq_send(iq); + } g_free(full_jid); }
--- a/libpurple/protocols/jabber/libxmpp.c Thu May 10 02:58:35 2007 +0000 +++ b/libpurple/protocols/jabber/libxmpp.c Thu May 10 03:00:31 2007 +0000 @@ -192,7 +192,7 @@ PurpleAccountOption *option; /* Translators: 'domain' is used here in the context of Internet domains, e.g. pidgin.im */ - split = purple_account_user_split_new(_("Domain"), "gmail.com", '@'); + split = purple_account_user_split_new(_("Domain"), NULL, '@'); prpl_info.user_splits = g_list_append(prpl_info.user_splits, split); split = purple_account_user_split_new(_("Resource"), "Home", '/');
--- a/libpurple/protocols/yahoo/yahoo.c Thu May 10 02:58:35 2007 +0000 +++ b/libpurple/protocols/yahoo/yahoo.c Thu May 10 03:00:31 2007 +0000 @@ -906,7 +906,7 @@ static void yahoo_process_sysmessage(PurpleConnection *gc, struct yahoo_packet *pkt) { GSList *l = pkt->hash; - char *prim, *me = NULL, *msg = NULL, *escmsg = NULL; + char *prim, *me = NULL, *msg = NULL; while (l) { struct yahoo_pair *pair = l->data; @@ -922,14 +922,10 @@ if (!msg || !g_utf8_validate(msg, -1, NULL)) return; - /* TODO: Does this really need to be escaped? It seems like it doesn't. */ - escmsg = g_markup_escape_text(msg, -1); - prim = g_strdup_printf(_("Yahoo! system message for %s:"), me?me:purple_connection_get_display_name(gc)); - purple_notify_info(NULL, NULL, prim, escmsg); + purple_notify_info(NULL, NULL, prim, msg); g_free(prim); - g_free(escmsg); } struct yahoo_add_request {
--- a/pidgin/gtkaccount.c Thu May 10 02:58:35 2007 +0000 +++ b/pidgin/gtkaccount.c Thu May 10 03:00:31 2007 +0000 @@ -385,12 +385,20 @@ add_login_options(AccountPrefsDialog *dialog, GtkWidget *parent) { GtkWidget *frame; + GtkWidget *hbox; GtkWidget *vbox; GtkWidget *entry; GList *user_splits; GList *l, *l2; char *username = NULL; + if (dialog->protocol_menu != NULL) + { + gtk_widget_ref(dialog->protocol_menu); + hbox = g_object_get_data(G_OBJECT(dialog->protocol_menu), "container"); + gtk_container_remove(GTK_CONTAINER(hbox), dialog->protocol_menu); + } + if (dialog->login_frame != NULL) gtk_widget_destroy(dialog->login_frame); @@ -409,10 +417,17 @@ gtk_widget_show(vbox); /* Protocol */ - dialog->protocol_menu = pidgin_protocol_option_menu_new( - dialog->protocol_id, G_CALLBACK(set_account_protocol_cb), dialog); - - add_pref_box(dialog, vbox, _("Protocol:"), dialog->protocol_menu); + if (dialog->protocol_menu == NULL) + { + dialog->protocol_menu = pidgin_protocol_option_menu_new( + dialog->protocol_id, G_CALLBACK(set_account_protocol_cb), dialog); + gtk_widget_ref(dialog->protocol_menu); + } + + hbox = add_pref_box(dialog, vbox, _("Protocol:"), dialog->protocol_menu); + g_object_set_data(G_OBJECT(dialog->protocol_menu), "container", hbox); + + gtk_widget_unref(dialog->protocol_menu); /* Screen name */ dialog->screenname_entry = gtk_entry_new();
--- a/pidgin/gtkblist.c Thu May 10 02:58:35 2007 +0000 +++ b/pidgin/gtkblist.c Thu May 10 03:00:31 2007 +0000 @@ -274,6 +274,11 @@ static void gtk_blist_menu_info_cb(GtkWidget *w, PurpleBuddy *b) { + PurpleNotifyUserInfo *info = purple_notify_user_info_new(); + purple_notify_user_info_add_pair(info, _("Information"), _("Retrieving...")); + purple_notify_userinfo(b->account->gc, purple_buddy_get_name(b), info, NULL, NULL); + purple_notify_user_info_destroy(info); + serv_get_info(b->account->gc, b->name); }
--- a/pidgin/gtkconv.c Thu May 10 02:58:35 2007 +0000 +++ b/pidgin/gtkconv.c Thu May 10 03:00:31 2007 +0000 @@ -672,6 +672,11 @@ PurpleConversation *conv = gtkconv->active_conv; if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) { + PurpleNotifyUserInfo *info = purple_notify_user_info_new(); + purple_notify_user_info_add_pair(info, _("Information"), _("Retrieving...")); + purple_notify_userinfo(conv->account->gc, purple_conversation_get_name(conv), info, NULL, NULL); + purple_notify_user_info_destroy(info); + serv_get_info(purple_conversation_get_gc(conv), purple_conversation_get_name(conv)); @@ -3111,7 +3116,7 @@ } if (gtkwin->menu.typing_icon == NULL) { gtkwin->menu.typing_icon = gtk_image_new_from_stock(stock_id, GTK_ICON_SIZE_MENU); - pidgin_menu_tray_append(PIDGIN_MENU_TRAY(gtkwin->menu.tray), + pidgin_menu_tray_append(PIDGIN_MENU_TRAY(gtkwin->menu.tray), gtkwin->menu.typing_icon, _("User is typing...")); } else { @@ -3143,8 +3148,10 @@ return; if (purple_conv_im_get_typing_state(im) == PURPLE_NOT_TYPING) { - if (gtkconv->u.im->typing_timer != 0) + if (gtkconv->u.im->typing_timer != 0) { g_source_remove(gtkconv->u.im->typing_timer); + gtkconv->u.im->typing_timer = 0; + } return; }
--- a/pidgin/gtkdebug.c Thu May 10 02:58:35 2007 +0000 +++ b/pidgin/gtkdebug.c Thu May 10 03:00:31 2007 +0000 @@ -49,7 +49,6 @@ GtkListStore *store; - gboolean timestamps; gboolean paused; #ifdef HAVE_REGEX_H @@ -261,21 +260,6 @@ #endif /* HAVE_REGEX_H */ } -static void -timestamps_cb(GtkWidget *w, DebugWindow *win) -{ - win->timestamps = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w)); - - purple_prefs_set_bool("/purple/debug/timestamps", win->timestamps); -} - -static void -timestamps_pref_cb(const char *name, PurplePrefType type, - gconstpointer value, gpointer data) -{ - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data), GPOINTER_TO_INT(value)); -} - /****************************************************************************** * regex stuff *****************************************************************************/ @@ -691,7 +675,6 @@ GtkWidget *vbox; GtkWidget *toolbar; GtkWidget *frame; - GtkWidget *button; GtkWidget *image; gint width, height; void *handle; @@ -779,20 +762,6 @@ NULL, image, G_CALLBACK(pause_cb), win); - /* Timestamps */ - button = gtk_toolbar_append_element(GTK_TOOLBAR(toolbar), - GTK_TOOLBAR_CHILD_TOGGLEBUTTON, - NULL, _("Timestamps"), - _("Timestamps"), NULL, NULL, - G_CALLBACK(timestamps_cb), - win); - - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), - purple_prefs_get_bool("/purple/debug/timestamps")); - - purple_prefs_connect_callback(handle, "/purple/debug/timestamps", - timestamps_pref_cb, button); - #ifdef HAVE_REGEX_H /* regex stuff */ gtk_toolbar_insert_space(GTK_TOOLBAR(toolbar), -1); @@ -1044,9 +1013,10 @@ #ifdef HAVE_REGEX_H GtkTreeIter iter; #endif /* HAVE_REGEX_H */ - gboolean timestamps; gchar *ts_s; gchar *esc_s, *cat_s, *tmp, *s; + const char *mdate; + time_t mtime; if (debug_win == NULL || !purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/debug/enabled")) @@ -1054,22 +1024,9 @@ return; } - timestamps = purple_prefs_get_bool("/purple/debug/timestamps"); - - /* - * For some reason we only print the timestamp if category is - * not NULL. Why the hell do we do that? --Mark - */ - if ((category != NULL) && (timestamps)) { - const char *mdate; - - time_t mtime = time(NULL); - mdate = purple_utf8_strftime("%H:%M:%S", localtime(&mtime)); - ts_s = g_strdup_printf("(%s) ", mdate); - } else { - ts_s = g_strdup(""); - } - + mtime = time(NULL); + mdate = purple_utf8_strftime("%H:%M:%S", localtime(&mtime)); + ts_s = g_strdup_printf("(%s) ", mdate); if (category == NULL) cat_s = g_strdup(""); else
--- a/pidgin/gtkdialogs.c Thu May 10 02:58:35 2007 +0000 +++ b/pidgin/gtkdialogs.c Thu May 10 03:00:31 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. "
--- a/pidgin/gtknotify.c Thu May 10 02:58:35 2007 +0000 +++ b/pidgin/gtknotify.c Thu May 10 03:00:31 2007 +0000 @@ -549,6 +549,21 @@ return FALSE; } +static GtkIMHtmlOptions +notify_imhtml_options() +{ + GtkIMHtmlOptions options = 0; + + if (!purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/show_incoming_formatting")) + options |= GTK_IMHTML_NO_COLOURS | GTK_IMHTML_NO_FONTS | GTK_IMHTML_NO_SIZES; + + options |= GTK_IMHTML_NO_COMMENTS; + options |= GTK_IMHTML_NO_TITLE; + options |= GTK_IMHTML_NO_NEWLINE; + options |= GTK_IMHTML_NO_SCROLL; + return options; +} + static void * pidgin_notify_formatted(const char *title, const char *primary, const char *secondary, const char *text) @@ -559,7 +574,6 @@ GtkWidget *button; GtkWidget *imhtml; GtkWidget *frame; - int options = 0; char label_text[2048]; char *linked_text, *primary_esc, *secondary_esc; @@ -614,20 +628,13 @@ g_signal_connect(G_OBJECT(window), "key_press_event", G_CALLBACK(formatted_input_cb), NULL); - /* Add the text to the gtkimhtml */ - if (!purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/show_incoming_formatting")) - options |= GTK_IMHTML_NO_COLOURS | GTK_IMHTML_NO_FONTS | GTK_IMHTML_NO_SIZES; - - options |= GTK_IMHTML_NO_COMMENTS; - options |= GTK_IMHTML_NO_TITLE; - options |= GTK_IMHTML_NO_NEWLINE; - options |= GTK_IMHTML_NO_SCROLL; - /* Make sure URLs are clickable */ linked_text = purple_markup_linkify(text); - gtk_imhtml_append_text(GTK_IMHTML(imhtml), linked_text, options); + gtk_imhtml_append_text(GTK_IMHTML(imhtml), linked_text, notify_imhtml_options()); g_free(linked_text); + g_object_set_data(G_OBJECT(window), "info-widget", imhtml); + /* Show the window */ gtk_widget_show(window); @@ -856,18 +863,53 @@ return data; } +/** Xerox'ed from Finch! How the tables have turned!! ;) **/ +/** User information. **/ +static GHashTable *userinfo; + +static char * +userinfo_hash(PurpleAccount *account, const char *who) +{ + char key[256]; + snprintf(key, sizeof(key), "%s - %s", purple_account_get_username(account), purple_normalize(account, who)); + return g_utf8_strup(key, -1); +} + +static void +remove_userinfo(GtkWidget *widget, gpointer key) +{ + g_hash_table_remove(userinfo, key); +} + static void * pidgin_notify_userinfo(PurpleConnection *gc, const char *who, PurpleNotifyUserInfo *user_info) { - char *primary, *info; + char *info; void *ui_handle; + char *key = userinfo_hash(purple_connection_get_account(gc), who); + + if (!userinfo) { + userinfo = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); + } - primary = g_strdup_printf(_("Info for %s"), who); info = purple_notify_user_info_get_text_with_newline(user_info, "<br />"); - ui_handle = pidgin_notify_formatted(_("Buddy Information"), primary, NULL, info); + ui_handle = g_hash_table_lookup(userinfo, key); + if (ui_handle != NULL) { + GtkIMHtml *imhtml = g_object_get_data(G_OBJECT(ui_handle), "info-widget"); + char *linked_text = purple_markup_linkify(info); + gtk_imhtml_clear(imhtml); + gtk_imhtml_append_text(imhtml, linked_text, notify_imhtml_options()); + g_free(linked_text); + g_free(key); + } else { + char *primary = g_strdup_printf(_("Info for %s"), who); + ui_handle = pidgin_notify_formatted(_("Buddy Information"), primary, NULL, info); + g_hash_table_insert(userinfo, key, ui_handle); + g_signal_connect(G_OBJECT(ui_handle), "destroy", G_CALLBACK(remove_userinfo), key); + g_free(primary); + } g_free(info); - g_free(primary); return ui_handle; }
--- a/pidgin/gtkutils.c Thu May 10 02:58:35 2007 +0000 +++ b/pidgin/gtkutils.c Thu May 10 03:00:31 2007 +0000 @@ -103,17 +103,17 @@ if (purple_running_gnome()) { char *path, *font; PangoFontDescription *desc = NULL; - + if ((path = g_find_program_in_path("gconftool-2"))) { g_free(path); if (!g_spawn_command_line_sync( - "gconftool-2 -g /desktop/gnome/interface/document_font_name", + "gconftool-2 -g /desktop/gnome/interface/document_font_name", &font, NULL, NULL, NULL)) return; } desc = pango_font_description_from_string(font); g_free(font); - + if (desc) { gtk_widget_modify_font(imhtml, desc); pango_font_description_free(desc); @@ -444,13 +444,13 @@ protocol = g_object_get_data(G_OBJECT(item), "protocol"); if (!strcmp(protocol, "prpl-fake")) - { - guint index = GPOINTER_TO_UINT(g_object_get_data(G_OBJECT(item), "real_index")); - gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), index); + protocol = g_object_get_data(G_OBJECT(item), "real_protocol"); + + if (!strcmp(protocol, g_object_get_data(G_OBJECT(optmenu), "last_protocol"))) return; - } user_data = (g_object_get_data(G_OBJECT(optmenu), "user_data")); + g_object_set_data(G_OBJECT(optmenu), "last_protocol", (gpointer)protocol); if (cb != NULL) ((void (*)(GtkWidget *, const char *, gpointer))cb)(item, protocol, @@ -545,18 +545,33 @@ pidgin_protocol_option_menu_item(menu, sg, image, plugin->info->name, plugin->info->id); if (id != NULL && !strcmp(plugin->info->id, id)) + { + g_object_set_data(G_OBJECT(optmenu), "last_protocol", plugin->info->id); selected_index = i; + } + else if (i == 0) + { + /* Ensure we set the protocol even if id is NULL or can't be found. */ + g_object_set_data(G_OBJECT(optmenu), "last_protocol", plugin->info->id); + } if (!strcmp(plugin->info->id, "prpl-jabber")) { GtkWidget *gtalk_item; + + filename = g_build_filename(DATADIR, "pixmaps", "pidgin", "protocols", + "16", "google-talk.png", NULL); + pixbuf = gdk_pixbuf_new_from_file(filename, NULL); + g_free(filename); + + if (pixbuf) image = gtk_image_new_from_pixbuf(pixbuf); else image = gtk_image_new(); - gtalk_item = pidgin_protocol_option_menu_item(menu, sg, image, _("Google Talk (XMPP)"), "prpl-fake"); - g_object_set_data(G_OBJECT(gtalk_item), "real_index", GUINT_TO_POINTER(i)); + gtalk_item = pidgin_protocol_option_menu_item(menu, sg, image, _("Google Talk"), "prpl-fake"); + g_object_set_data(G_OBJECT(gtalk_item), "real_protocol", plugin->info->id); i++; } @@ -2308,20 +2323,10 @@ GTK_FILE_SELECTION(dialog->icon_filesel))); #endif /* FILECHOOSER */ - if (!filename || g_stat(filename, &st)) + if (!filename || g_stat(filename, &st) || !(pixbuf = gdk_pixbuf_new_from_file(filename, NULL))) { - g_free(filename); - return; - } - - pixbuf = gdk_pixbuf_new_from_file(filename, NULL); - if (!pixbuf) { gtk_image_set_from_pixbuf(GTK_IMAGE(dialog->icon_preview), NULL); gtk_label_set_markup(GTK_LABEL(dialog->icon_text), ""); -#if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ - gtk_file_chooser_set_preview_widget_active( - GTK_FILE_CHOOSER(dialog->icon_filesel), FALSE); -#endif /* FILECHOOSER */ g_free(filename); return; } @@ -2338,10 +2343,6 @@ scale = gdk_pixbuf_scale_simple(pixbuf, width * 50 / height, 50, GDK_INTERP_BILINEAR); gtk_image_set_from_pixbuf(GTK_IMAGE(dialog->icon_preview), scale); -#if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ - gtk_file_chooser_set_preview_widget_active( - GTK_FILE_CHOOSER(dialog->icon_filesel), TRUE); -#endif /* FILECHOOSER */ gtk_label_set_markup(GTK_LABEL(dialog->icon_text), markup); g_object_unref(G_OBJECT(pixbuf)); @@ -2356,7 +2357,9 @@ GtkWidget *pidgin_buddy_icon_chooser_new(GtkWindow *parent, void(*callback)(const char *, gpointer), gpointer data) { struct _icon_chooser *dialog = g_new0(struct _icon_chooser, 1); -#if !GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ +#if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ + GtkWidget *vbox; +#else GtkWidget *hbox; GtkWidget *tv; GtkTreeSelection *sel; @@ -2387,9 +2390,17 @@ dialog->icon_preview = gtk_image_new(); dialog->icon_text = gtk_label_new(NULL); - gtk_widget_set_size_request(GTK_WIDGET(dialog->icon_preview), -1, 50); - gtk_file_chooser_set_preview_widget(GTK_FILE_CHOOSER(dialog->icon_filesel), - GTK_WIDGET(dialog->icon_preview)); + + vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); + gtk_widget_set_size_request(GTK_WIDGET(vbox), -1, 50); + gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(dialog->icon_preview), TRUE, FALSE, 0); + gtk_box_pack_end(GTK_BOX(vbox), GTK_WIDGET(dialog->icon_text), FALSE, FALSE, 0); + gtk_widget_show_all(vbox); + + gtk_file_chooser_set_preview_widget(GTK_FILE_CHOOSER(dialog->icon_filesel), vbox); + gtk_file_chooser_set_preview_widget_active(GTK_FILE_CHOOSER(dialog->icon_filesel), TRUE); + gtk_file_chooser_set_use_preview_label(GTK_FILE_CHOOSER(dialog->icon_filesel), FALSE); + g_signal_connect(G_OBJECT(dialog->icon_filesel), "update-preview", G_CALLBACK(icon_preview_change_cb), dialog); g_signal_connect(G_OBJECT(dialog->icon_filesel), "response", @@ -2403,7 +2414,7 @@ gtk_file_selection_set_filename(GTK_FILE_SELECTION(dialog->icon_filesel), current_folder); - gtk_widget_set_size_request(GTK_WIDGET(dialog->icon_preview), -1, 50); + gtk_widget_set_size_request(GTK_WIDGET(dialog->icon_preview),-1, 50); hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); gtk_box_pack_start( GTK_BOX(GTK_FILE_SELECTION(dialog->icon_filesel)->main_vbox),
--- a/pidgin/pixmaps/emotes/default/22/theme Thu May 10 02:58:35 2007 +0000 +++ b/pidgin/pixmaps/emotes/default/22/theme Thu May 10 03:00:31 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 (%) +
--- a/pidgin/pixmaps/protocols/16/Makefile.am Thu May 10 02:58:35 2007 +0000 +++ b/pidgin/pixmaps/protocols/16/Makefile.am Thu May 10 03:00:31 2007 +0000 @@ -3,6 +3,7 @@ EXTRA_DIST = aim.png \ bonjour.png \ gadu-gadu.png \ + google-talk.png \ novell.png \ icq.png \ irc.png \
--- a/pidgin/pixmaps/protocols/22/Makefile.am Thu May 10 02:58:35 2007 +0000 +++ b/pidgin/pixmaps/protocols/22/Makefile.am Thu May 10 03:00:31 2007 +0000 @@ -3,6 +3,7 @@ EXTRA_DIST = aim.png \ bonjour.png \ gadu-gadu.png \ + google-talk.png \ novell.png \ icq.png \ irc.png \
--- a/pidgin/pixmaps/protocols/48/scalable/Makefile.am Thu May 10 02:58:35 2007 +0000 +++ b/pidgin/pixmaps/protocols/48/scalable/Makefile.am Thu May 10 03:00:31 2007 +0000 @@ -1,6 +1,7 @@ EXTRA_DIST = aim.svg \ bonjour.svg \ gadu-gadu.svg \ + google-talk.svg \ novell.svg \ icq.svg \ irc.svg \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/pixmaps/protocols/48/scalable/google-talk.svg Thu May 10 03:00:31 2007 +0000 @@ -0,0 +1,301 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://web.resource.org/cc/" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + id="svg2417" + sodipodi:version="0.32" + inkscape:version="0.43" + width="48" + height="48" + version="1.0" + sodipodi:docbase="/home/vinicius/tango-icon-theme-code/protocols/scalable" + sodipodi:docname="google-talk.svg" + inkscape:export-filename="/home/vinicius/tango-icon-theme-code/protocols/48x48/google-talk.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + <metadata + id="metadata2422"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title>Google Talk Icon</dc:title> + <dc:date>2006-12-03</dc:date> + <dc:creator> + <cc:Agent> + <dc:title>Vinicius Scopel Depizzol</dc:title> + </cc:Agent> + </dc:creator> + <dc:source>vdepizzol@gmail.com</dc:source> + <dc:subject> + <rdf:Bag> + <rdf:li>Google Talk</rdf:li> + <rdf:li>GTalk</rdf:li> + <rdf:li>VOIP</rdf:li> + <rdf:li>Protocol</rdf:li> + </rdf:Bag> + </dc:subject> + <cc:license + rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" /> + </cc:Work> + <cc:License + rdf:about="http://creativecommons.org/licenses/by-sa/2.0/"> + <cc:permits + rdf:resource="http://web.resource.org/cc/Reproduction" /> + <cc:permits + rdf:resource="http://web.resource.org/cc/Distribution" /> + <cc:requires + rdf:resource="http://web.resource.org/cc/Notice" /> + <cc:requires + rdf:resource="http://web.resource.org/cc/Attribution" /> + <cc:permits + rdf:resource="http://web.resource.org/cc/DerivativeWorks" /> + <cc:requires + rdf:resource="http://web.resource.org/cc/ShareAlike" /> + </cc:License> + </rdf:RDF> + </metadata> + <defs + id="defs2420"> + <linearGradient + inkscape:collect="always" + id="linearGradient6020"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop6022" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop6024" /> + </linearGradient> + <linearGradient + id="linearGradient3299"> + <stop + style="stop-color:#000000;stop-opacity:0.11764706;" + offset="0" + id="stop3301" /> + <stop + style="stop-color:#000000;stop-opacity:0;" + offset="1" + id="stop3303" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3299" + id="radialGradient3305" + cx="15.993708" + cy="26.722889" + fx="15.993708" + fy="26.722889" + r="15.912521" + gradientTransform="matrix(1,0,0,0.295918,-3.769888e-16,18.8151)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + id="linearGradient3527"> + <stop + style="stop-color:#90ba1f;stop-opacity:1;" + offset="0" + id="stop3529" /> + <stop + style="stop-color:#638205;stop-opacity:1;" + offset="1" + id="stop3531" /> + </linearGradient> + <linearGradient + id="linearGradient3518"> + <stop + style="stop-color:#e7d000;stop-opacity:1;" + offset="0" + id="stop3520" /> + <stop + style="stop-color:#c4a000;stop-opacity:1;" + offset="1" + id="stop3522" /> + </linearGradient> + <linearGradient + id="linearGradient3486"> + <stop + style="stop-color:#ef2929;stop-opacity:1;" + offset="0" + id="stop3488" /> + <stop + style="stop-color:#cc0000;stop-opacity:1;" + offset="1" + id="stop3490" /> + </linearGradient> + <linearGradient + id="linearGradient3510"> + <stop + style="stop-color:#3465a4;stop-opacity:1;" + offset="0" + id="stop3512" /> + <stop + style="stop-color:#204a87;stop-opacity:1;" + offset="1" + id="stop3514" /> + </linearGradient> + <linearGradient + id="linearGradient3286"> + <stop + style="stop-color:#d1d1d1;stop-opacity:1;" + offset="0" + id="stop3288" /> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="1" + id="stop3290" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3527" + id="linearGradient4249" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.465389,0,0,2.513895,-105.5963,47.11115)" + x1="55.483334" + y1="-14.40625" + x2="55.483334" + y2="-7.9999866" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3518" + id="linearGradient4252" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.901968,0,0,2.518653,-127.7063,47.25387)" + x1="53.162479" + y1="-14.322747" + x2="53.162479" + y2="-9.9868765" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3486" + id="linearGradient4255" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.48585,0,0,2.48585,-103.0483,47.16833)" + x1="49.45462" + y1="-12.934268" + x2="49.45462" + y2="-8.0529032" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3510" + id="linearGradient4258" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.48585,0,0,2.48585,-100.3774,47.19573)" + x1="45.5" + y1="-14" + x2="45.5" + y2="-8.1156492" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3286" + id="linearGradient4262" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.99378,0,0,2.99378,9.552849e-2,-0.965622)" + x1="8" + y1="15" + x2="8" + y2="0.9916327" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6020" + id="linearGradient6026" + x1="11.466431" + y1="11.008693" + x2="11.466431" + y2="15.000141" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6020" + id="linearGradient6030" + gradientUnits="userSpaceOnUse" + x1="11.466431" + y1="11.008693" + x2="11.466431" + y2="15.000141" + gradientTransform="matrix(1,0,0,1.75,0,-1.25)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3286" + id="linearGradient6052" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.99378,0,0,2.99378,-59.90447,-0.965622)" + x1="8" + y1="15" + x2="8" + y2="0.9916327" /> + </defs> + <sodipodi:namedview + inkscape:window-height="714" + inkscape:window-width="1014" + inkscape:pageshadow="2" + inkscape:pageopacity="0" + borderopacity="1" + bordercolor="#666666" + pagecolor="#ffffff" + id="base" + showgrid="false" + showguides="true" + inkscape:guide-bbox="true" + inkscape:zoom="1" + inkscape:cx="27.558407" + inkscape:cy="20.353863" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:current-layer="svg2417" + showborder="false" + inkscape:showpageshadow="false" /> + <path + sodipodi:type="arc" + style="opacity:1;fill:url(#radialGradient3305);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="path2424" + sodipodi:cx="15.993708" + sodipodi:cy="26.722889" + sodipodi:rx="15.912521" + sodipodi:ry="4.7088075" + d="M 31.906229,26.722889 A 15.912521,4.7088075 0 1 1 31.906148,26.707864" + sodipodi:start="0" + sodipodi:end="6.2799944" + sodipodi:open="true" + transform="matrix(1.45896,0,0,1.538545,0.742037,-1.869655)" /> + <path + id="path3264" + d="M 21.80045,3.5250496 C 10.471905,4.3704822 1.592428,11.452408 1.592428,19.990844 C 1.592428,26.29506 6.3896918,31.807945 13.473996,34.585527 C 13.301077,37.113716 12.611393,40.274075 10.57377,42.444203 C 16.402876,42.263357 20.689781,39.28536 23.484452,36.456639 C 23.677129,36.460226 23.851935,36.456639 24.045787,36.456639 C 36.451938,36.456639 46.499142,29.098509 46.499142,19.990844 L 46.499142,19.897289 C 46.459634,10.808172 36.426737,3.5250496 24.045787,3.5250496 C 23.270404,3.5250496 22.555687,3.4686875 21.80045,3.5250496 z " + style="fill:url(#linearGradient4262);fill-opacity:1;fill-rule:nonzero;stroke:#797979;stroke-width:0.99999946;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90" /> + <path + sodipodi:nodetypes="ccccccccccccccccc" + id="path3552" + d="M 14.063569,10.992619 L 10.975162,10.992619 L 10.975162,15.008301 L 9,15.008301 L 9,18.010155 L 10.975162,18.010155 L 10.975162,24.823081 C 10.975162,28.316382 16.413217,26.749332 16.906897,25.946127 L 16.765885,23.742745 C 16.14428,24.364355 14.063569,24.882059 14.063569,24.09267 L 14.063569,18.010155 L 16.089796,18.010155 L 16.089796,15.008301 L 14.063569,15.008301 L 14.063569,11.090553 L 14.063569,11.090553 L 14.063569,10.992619 z " + style="fill:url(#linearGradient4258);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> + <path + style="fill:url(#linearGradient4255);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 20.513467,15.031036 C 20.138171,15.089956 19.656414,15.165467 19.228078,15.318859 C 17.702481,15.865192 16.671718,16.778263 16.671718,16.778263 L 17.928902,19.157272 C 19.392632,18.022338 22.111019,16.595753 21.828421,20.24551 C 16.134551,19.714196 14.746648,23.348506 16.160515,25.369297 C 17.612211,27.444158 20.173876,27.641863 21.329645,26.185476 C 21.514145,25.952987 21.740964,25.678231 21.873764,25.369297 C 22.016347,25.75349 22.226874,26.072865 22.417883,26.321505 C 22.574471,26.517581 23.312178,27.152657 24.004897,27.137684 C 24.806193,27.120365 25.583813,26.58185 26,25.958759 C 25.645136,26.22137 24.252362,25.650216 24.231613,24.779835 L 24.231613,18.29575 C 24.142462,16.667478 22.425687,14.730825 20.513467,15.031036 z M 21.193616,23.328851 C 21.034551,24.122851 19.396586,24.681233 18.790423,24.326402 C 17.894487,23.801947 19.229645,22.393776 20.377437,22.376643 C 21.417389,22.361119 21.33274,22.634384 21.193616,23.328851 z " + id="path3554" + sodipodi:nodetypes="cscccsscsscccccsss" /> + <path + id="path3558" + d="M 29,11 L 26.098032,11 L 26.098032,27.104637 L 29,27.104637 L 29,11 z " + style="fill:url(#linearGradient4252);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> + <path + sodipodi:nodetypes="ccccccccccccc" + id="path3560" + d="M 30,10.895363 L 30,19.851112 L 30,27 L 32.963722,27 L 32.963722,22.924045 L 36.561805,27.064163 L 38.705904,25.193137 L 34.676855,20.715264 L 38.705904,16.23739 L 36.754295,14.238037 L 32.968278,18.187047 C 32.968278,18.187047 32.963722,10.895363 32.963722,10.895363 L 30,10.895363 z " + style="fill:url(#linearGradient4249);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> + <path + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" + d="M 21.84375,4.03125 C 16.273135,4.4469767 11.295199,6.3799921 7.75,9.25 C 4.204801,12.120008 2.09375,15.904106 2.09375,20 C 2.093752,26.050562 6.709849,31.401486 13.65625,34.125 C 13.889662,34.247612 13.966606,34.430582 13.96875,34.625 C 13.8154,36.867085 13.233839,39.586592 11.6875,41.78125 C 16.756159,41.27394 20.580438,38.669315 23.125,36.09375 C 23.324492,35.928053 23.831229,35.96875 24.03125,35.96875 C 30.135475,35.96875 35.660367,34.1562 39.625,31.25 C 43.589633,28.3438 46,24.369973 46,20 L 46,19.90625 C 45.981043,15.545078 43.55655,11.604324 39.59375,8.71875 C 35.63095,5.8331761 30.123683,4.03125 24.03125,4.03125 C 23.381564,4.0312499 22.681539,3.982177 21.84375,4.03125 z M 24.03125,5.03125 C 29.927599,5.03125 35.264412,6.757119 39.03125,9.5 C 42.798088,12.242881 44.982638,15.911852 45,19.90625 L 45,20 C 45,24.002253 42.800008,27.674883 39.03125,30.4375 C 35.262492,33.200117 29.937773,34.96875 24.03125,34.96875 C 23.079654,34.946683 22.695929,35.117383 22.40625,35.40625 C 20.316957,37.520999 17.387178,39.593629 13.59375,40.46875 C 14.470139,38.520138 14.848653,36.443413 14.96875,34.6875 C 15.010593,33.903846 14.715478,33.607465 14.03125,33.1875 C 7.360656,30.572123 3.093751,25.543254 3.09375,20 C 3.09375,16.250753 5.042528,12.754344 8.40625,10.03125 C 11.769972,7.3081563 16.52295,5.4329977 21.90625,5.03125 C 22.667268,4.9737265 23.342191,5.0312499 24.03125,5.03125 z " + id="path6054" + sodipodi:nodetypes="csscccccsccssccsccscscccsscs" /> +</svg>
--- a/pidgin/plugins/extplacement.c Thu May 10 02:58:35 2007 +0000 +++ b/pidgin/plugins/extplacement.c Thu May 10 03:00:31 2007 +0000 @@ -101,6 +101,11 @@ ppref = purple_plugin_pref_new_with_label(_("Conversation Placement")); purple_plugin_pref_frame_add(frame, ppref); + /* Translators: "New conversations" should match the text in the preferences dialog and "By conversation count" should be the same text used above */ + ppref = purple_plugin_pref_new_with_label(_("Note: The preference for \"New conversations\" must be set to \"By conversation count\".")); + purple_plugin_pref_set_type(ppref, PURPLE_PLUGIN_PREF_INFO); + purple_plugin_pref_frame_add(frame, ppref); + ppref = purple_plugin_pref_new_with_name_and_label( "/plugins/gtk/extplacement/placement_number", _("Number of conversations per window"));
--- a/po/th.po Thu May 10 02:58:35 2007 +0000 +++ b/po/th.po Thu May 10 03:00:31 2007 +0000 @@ -3065,7 +3065,7 @@ #: ../src/gtkconv.c:4958 ../src/gtkconv.c:5067 #, c-format msgid "%d person in room" -msgstr "ã¹ËéͧÁÕ %s ¤¹" +msgstr "ã¹ËéͧÁÕ %d ¤¹" #: ../src/gtkconv.c:5624 ../src/gtkstatusbox.c:366 msgid "Typing"