Mercurial > pidgin
changeset 29821:bf0cbb79d629
propagate from branch 'im.pidgin.pidgin' (head 01b93cf5c82386bcea9bfacb2bd35a7d73dd612c)
to branch 'im.pidgin.cpw.malu.ft_thumbnails' (head 2ed1751127a572260300b706a2d29f760a0c9406)
author | Marcus Lundblad <ml@update.uu.se> |
---|---|
date | Sun, 14 Mar 2010 21:20:14 +0000 |
parents | 611832fe4ee2 (diff) 0fe92a64771d (current diff) |
children | 25a53c299713 |
files | |
diffstat | 19 files changed, 315 insertions(+), 160 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Wed Mar 10 05:40:47 2010 +0000 +++ b/ChangeLog Sun Mar 14 21:20:14 2010 +0000 @@ -20,6 +20,8 @@ * The Recent Log Activity sort method for the Buddy List now distinguishes between no activity and a small amount of activity in the distant past. (Greg McNew) + * Added a menu set mood globally for all mood-supporting accounts + (currently XMPP and ICQ). Bonjour: * Added support for IPv6. (Thanks to T_X for testing) @@ -30,14 +32,27 @@ * Minimum requirement for external libgadu is now also 1.9.0-rc2. ICQ: - * X-Status (Custom ICQ status icon) support (Andrew Ivanov, Tomáš Kebert, - Yuriy Yevgrafov, and trac users bob007, salieff, and nops) + * X-Status (Custom ICQ status icon) support. Since most of the icons + available reflect moods, this is labeled "Set Mood" on the Accounts->ICQ + Account menu. (Andrew Ivanov, Tomáš Kebert, Yuriy Yevgrafov, and trac + users bob007, salieff, and nops) + * Allow setting and displaying icons between 1x1 and 100x100 pixels. + Previously only icons between 48x48 and 52x64 were allowed. + + MSN: + * Support for version 9 of the MSN protocol has been removed. This + version is no longer supported on the servers. XMPP: * Direct messages to a specific resource only upon receipt of a message with content (as opposed to a typing notification, etc). (Thanks to rjoly for testing) + Yahoo: + * Attempt to better handle transparent proxies interfering with HTTP-based + login. + * Fix handling of P2P packets, thus fixing the loss of some messages. + version 2.6.6 (02/18/2010): libpurple: * Fix 'make check' on OS X. (David Fang)
--- a/ChangeLog.API Wed Mar 10 05:40:47 2010 +0000 +++ b/ChangeLog.API Sun Mar 14 21:20:14 2010 +0000 @@ -23,6 +23,7 @@ * ui-caps-changed media manager signal * sent-attention conversation signal * got-attention conversation signal + * PurpleMood struct in status.h Pidgin: Added:
--- a/ChangeLog.win32 Wed Mar 10 05:40:47 2010 +0000 +++ b/ChangeLog.win32 Sun Mar 14 21:20:14 2010 +0000 @@ -1,6 +1,7 @@ version 2.7.0 (??/??/????): + * Updated GTK+ to 2.16.6 + * Private GTK+ Runtime now used (GTK+ Installer no longer supported) * Minimum required GTK+ version increased to 2.14.0 - * Private GTK+ Runtime now used (GTK+ Installer no longer supported) * Win9x no longer supported. * Crash Report files (pidgin.RPT) are now generated in the ~/.purple directory instead of the installation directory.
--- a/Makefile.mingw Wed Mar 10 05:40:47 2010 +0000 +++ b/Makefile.mingw Sun Mar 14 21:20:14 2010 +0000 @@ -31,7 +31,7 @@ exit; \ }' VERSION) -GTK_INSTALL_VERSION = 2.14.7.0 +GTK_INSTALL_VERSION = 2.16.6.0 STRIPPED_RELEASE_DIR = $(PIDGIN_TREE_TOP)/pidgin-$(PIDGIN_VERSION)-win32bin DEBUG_SYMBOLS_DIR = $(PIDGIN_TREE_TOP)/pidgin-$(PIDGIN_VERSION)-dbgsym
--- a/configure.ac Wed Mar 10 05:40:47 2010 +0000 +++ b/configure.ac Sun Mar 14 21:20:14 2010 +0000 @@ -1091,6 +1091,10 @@ AM_CONDITIONAL(USE_INTERNAL_LIBGADU, test "x$gadu_libs" != "xyes") +if test "x$gadu_libs" = "x"; then + gadu_libs=no +fi + AC_SUBST(GADU_LIBS) AC_SUBST(GADU_CFLAGS)
--- a/libpurple/plugins/perl/common/Makefile.mingw Wed Mar 10 05:40:47 2010 +0000 +++ b/libpurple/plugins/perl/common/Makefile.mingw Sun Mar 14 21:20:14 2010 +0000 @@ -13,7 +13,6 @@ TARGET = Purple AUTOSPLIT = lib/auto/Purple/autosplit.ix -EXTUTILS ?= C:/perl/lib/ExtUtils PERL_PLUGIN_TOP := .. ##
--- a/libpurple/protocols/jabber/libxmpp.c Wed Mar 10 05:40:47 2010 +0000 +++ b/libpurple/protocols/jabber/libxmpp.c Sun Mar 14 21:20:14 2010 +0000 @@ -257,7 +257,7 @@ purple_account_user_split_set_reverse(split, FALSE); prpl_info.user_splits = g_list_append(prpl_info.user_splits, split); - split = purple_account_user_split_new(_("Resource"), NULL, '/'); + split = purple_account_user_split_new(_("Resource"), "", '/'); purple_account_user_split_set_reverse(split, FALSE); prpl_info.user_splits = g_list_append(prpl_info.user_splits, split);
--- a/libpurple/protocols/oscar/libaim.c Wed Mar 10 05:40:47 2010 +0000 +++ b/libpurple/protocols/oscar/libaim.c Sun Mar 14 21:20:14 2010 +0000 @@ -31,7 +31,6 @@ OPT_PROTO_MAIL_CHECK | OPT_PROTO_IM_IMAGE, NULL, /* user_splits */ NULL, /* protocol_options */ - /* The mimimum icon size below is not needed in AIM 6.0 */ {"gif,jpeg,bmp,ico", 0, 0, 100, 100, 7168, PURPLE_ICON_SCALE_DISPLAY}, /* icon_spec */ oscar_list_icon_aim, /* list_icon */ oscar_list_emblem, /* list_emblems */
--- a/libpurple/protocols/oscar/libicq.c Wed Mar 10 05:40:47 2010 +0000 +++ b/libpurple/protocols/oscar/libicq.c Sun Mar 14 21:20:14 2010 +0000 @@ -41,8 +41,7 @@ OPT_PROTO_MAIL_CHECK | OPT_PROTO_IM_IMAGE, NULL, /* user_splits */ NULL, /* protocol_options */ - {"gif,jpeg,bmp,ico", 48, 48, 52, 64, 7168, - PURPLE_ICON_SCALE_SEND | PURPLE_ICON_SCALE_DISPLAY}, /* icon_spec */ + {"gif,jpeg,bmp,ico", 0, 0, 100, 100, 7168, PURPLE_ICON_SCALE_DISPLAY}, /* icon_spec */ oscar_list_icon_icq, /* list_icon */ oscar_list_emblem, /* list_emblems */ oscar_status_text, /* status_text */
--- a/libpurple/protocols/yahoo/libymsg.c Wed Mar 10 05:40:47 2010 +0000 +++ b/libpurple/protocols/yahoo/libymsg.c Sun Mar 14 21:20:14 2010 +0000 @@ -1854,6 +1854,7 @@ return; } else if (len > 0 && ret_data && *ret_data) { + PurpleAccount *account = purple_connection_get_account(gc); gchar **split_data = g_strsplit(ret_data, "\r\n", -1); int totalelements = 0; int response_no = -1; @@ -1861,11 +1862,13 @@ totalelements = g_strv_length(split_data); - if(totalelements == 1) + if(totalelements == 1) { /* Received an error code */ response_no = strtol(split_data[0], NULL, 10); - else if(totalelements >= 2) { + } else if(totalelements == 2 || totalelements == 3 ) { /* received valid data */ response_no = strtol(split_data[0], NULL, 10); token = g_strdup(split_data[1] + strlen("ymsgr=")); + } else { /* It looks like a transparent proxy has returned a document we don't want */ + response_no = -1; } g_strfreev(split_data); @@ -1884,8 +1887,8 @@ case 1212: /* Password incorrect */ /* Set password to NULL. Avoids account locking. Brings dialog to enter password if clicked on Re-enable account */ - if (!purple_account_get_remember_password(purple_connection_get_account(gc))) - purple_account_set_password(purple_connection_get_account(gc), NULL); + if (!purple_account_get_remember_password(account)) + purple_account_set_password(account, NULL); error_reason = g_strdup(_("Incorrect password")); error = PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED; break; @@ -1927,7 +1930,6 @@ else { /* OK to login, correct information provided */ PurpleUtilFetchUrlData *url_data = NULL; - PurpleAccount *account = purple_connection_get_account(gc); char *url = NULL; gboolean yahoojp = yahoo_is_japan(account); gboolean proxy_ssl = purple_account_get_bool(account, "proxy_ssl", FALSE); @@ -2731,8 +2733,9 @@ PurpleAccount *account; YahooFriend *f; - /* if status is not 1 ie YAHOO_STATUS_BRB, the packet bounced back, so contains our own ip */ - if(!(pkt->status == YAHOO_STATUS_BRB)) + /* if status is not YAHOO_STATUS_BRB or YAHOO_STATUS_P2P, the packet bounced back, + * so it contains our own ip */ + if(pkt->status != YAHOO_STATUS_BRB && pkt->status != YAHOO_STATUS_P2P) return ; while (l) {
--- a/libpurple/protocols/yahoo/libymsg.h Wed Mar 10 05:40:47 2010 +0000 +++ b/libpurple/protocols/yahoo/libymsg.h Sun Mar 14 21:20:14 2010 +0000 @@ -119,6 +119,7 @@ YAHOO_STATUS_ONVACATION, YAHOO_STATUS_OUTTOLUNCH, YAHOO_STATUS_STEPPEDOUT, + YAHOO_STATUS_P2P = 11, YAHOO_STATUS_INVISIBLE = 12, YAHOO_STATUS_CUSTOM = 99, YAHOO_STATUS_IDLE = 999,
--- a/libpurple/win32/global.mak Wed Mar 10 05:40:47 2010 +0000 +++ b/libpurple/win32/global.mak Sun Mar 14 21:20:14 2010 +0000 @@ -105,7 +105,7 @@ GMSGFMT ?= $(WIN32_DEV_TOP)/gettext-0.17/bin/msgfmt MAKENSIS ?= makensis.exe MAKENSISOPT ?= / -PERL ?= /cygdrive/c/perl/bin/perl +PERL ?= perl WINDRES ?= windres STRIP ?= strip
--- a/libpurple/win32/rules.mak Wed Mar 10 05:40:47 2010 +0000 +++ b/libpurple/win32/rules.mak Sun Mar 14 21:20:14 2010 +0000 @@ -4,7 +4,7 @@ $(CC) $(CFLAGS) $(DEFINES) $(INCLUDE_PATHS) -o $@ -c $< %.c: %.xs - $(PERL) $(EXTUTILS)/xsubpp -typemap $(EXTUTILS)/typemap -typemap $(PURPLE_PERL_TOP)/common/typemap $< > $@ + $(PERL) -MExtUtils::ParseXS -e 'ExtUtils::ParseXS::process_file(filename => "$<", output => "$@", typemap => "$(PURPLE_PERL_TOP)/common/typemap");' %.o: %.rc $(WINDRES) -I$(PURPLE_TOP) -i $< -o $@
--- a/pidgin/gtkblist.c Wed Mar 10 05:40:47 2010 +0000 +++ b/pidgin/gtkblist.c Sun Mar 14 21:20:14 2010 +0000 @@ -3384,6 +3384,253 @@ !purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/debug/enabled")); } +static char *get_mood_icon_path(const char *mood) +{ + char *path; + + if (!strcmp(mood, "busy")) { + path = g_build_filename(DATADIR, "pixmaps", "pidgin", + "status", "16", "busy.png", NULL); + } else if (!strcmp(mood, "hiptop")) { + path = g_build_filename(DATADIR, "pixmaps", "pidgin", + "emblems", "16", "hiptop.png", NULL); + } else { + char *filename = g_strdup_printf("%s.png", mood); + path = g_build_filename(DATADIR, "pixmaps", "pidgin", + "emotes", "small", filename, NULL); + g_free(filename); + } + return path; +} + +static void +update_status_with_mood(PurpleAccount *account, const gchar *mood, + const gchar *text) +{ + if (mood != NULL && !purple_strequal(mood, "")) { + if (text) { + purple_account_set_status(account, "mood", TRUE, + PURPLE_MOOD_NAME, mood, + PURPLE_MOOD_COMMENT, text, + NULL); + } else { + purple_account_set_status(account, "mood", TRUE, + PURPLE_MOOD_NAME, mood, + NULL); + } + } else { + purple_account_set_status(account, "mood", FALSE, NULL); + } +} + +static void +edit_mood_cb(PurpleConnection *gc, PurpleRequestFields *fields) +{ + PurpleRequestField *mood_field, *text_field; + GList *l; + + mood_field = purple_request_fields_get_field(fields, "mood"); + text_field = purple_request_fields_get_field(fields, "text"); + l = purple_request_field_list_get_selected(mood_field); + + if (l) { + const char *mood = purple_request_field_list_get_data(mood_field, l->data); + const char *text = purple_request_field_string_get_value(text_field); + + if (gc) { + PurpleAccount *account = purple_connection_get_account(gc); + + update_status_with_mood(account, mood, text); + } else { + GList *accounts = purple_accounts_get_all_active(); + + for (; accounts ; accounts = g_list_delete_link(accounts, accounts)) { + PurpleAccount *account = (PurpleAccount *) accounts->data; + PurpleConnection *gc = purple_account_get_connection(account); + + if (gc->flags && PURPLE_CONNECTION_SUPPORT_MOODS) { + update_status_with_mood(account, mood, text); + } + } + } + } +} + +static void +global_moods_for_each(gpointer key, gpointer value, gpointer user_data) +{ + GList **out_moods = (GList **) user_data; + PurpleMood *mood = (PurpleMood *) value; + + *out_moods = g_list_append(*out_moods, mood); +} + +static PurpleMood * +get_global_moods(void) +{ + GHashTable *global_moods = + g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); + GHashTable *mood_counts = + g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); + GList *accounts = purple_accounts_get_all_active(); + PurpleMood *result = NULL; + GList *out_moods = NULL; + int i = 0; + int num_accounts = 0; + + for (; accounts ; accounts = g_list_delete_link(accounts, accounts)) { + PurpleAccount *account = (PurpleAccount *) accounts->data; + PurpleConnection *gc = purple_account_get_connection(account); + + if (gc->flags & PURPLE_CONNECTION_SUPPORT_MOODS) { + PurplePluginProtocolInfo *prpl_info = + PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl); + PurpleMood *mood = NULL; + + for (mood = prpl_info->get_moods(account) ; + mood->mood != NULL ; mood++) { + int mood_count = + GPOINTER_TO_INT(g_hash_table_lookup(mood_counts, mood->mood)); + + if (!g_hash_table_lookup(global_moods, mood->mood)) { + g_hash_table_insert(global_moods, g_strdup(mood->mood), mood); + } + g_hash_table_insert(mood_counts, g_strdup(mood->mood), + GINT_TO_POINTER(mood_count + 1)); + } + + num_accounts++; + } + } + + g_hash_table_foreach(global_moods, global_moods_for_each, &out_moods); + result = g_new0(PurpleMood, g_hash_table_size(global_moods) + 1); + + while (out_moods) { + PurpleMood *mood = (PurpleMood *) out_moods->data; + int in_num_accounts = + GPOINTER_TO_INT(g_hash_table_lookup(mood_counts, mood->mood)); + + if (in_num_accounts == num_accounts) { + /* mood is present in all accounts supporting moods */ + result[i].mood = mood->mood; + result[i].description = mood->description; + i++; + } + out_moods = g_list_delete_link(out_moods, out_moods); + } + + g_hash_table_destroy(global_moods); + g_hash_table_destroy(mood_counts); + + return result; +} + +/* get current set mood for all mood-supporting accounts, or NULL if not set + or not set to the same on all */ +static const gchar * +get_global_mood_status(void) +{ + GList *accounts = purple_accounts_get_all_active(); + const gchar *found_mood = NULL; + + for (; accounts ; accounts = g_list_delete_link(accounts, accounts)) { + PurpleAccount *account = (PurpleAccount *) accounts->data; + + if (purple_account_get_connection(account)->flags & + PURPLE_CONNECTION_SUPPORT_MOODS) { + PurplePresence *presence = purple_account_get_presence(account); + PurpleStatus *status = purple_presence_get_status(presence, "mood"); + const gchar *curr_mood = purple_status_get_attr_string(status, PURPLE_MOOD_NAME); + + if (found_mood != NULL && !purple_strequal(curr_mood, found_mood)) { + /* found a different mood */ + found_mood = NULL; + break; + } else { + found_mood = curr_mood; + } + } + } + + return found_mood; +} + +static void +set_mood_cb(GtkWidget *widget, PurpleAccount *account) +{ + const char *current_mood; + PurpleRequestFields *fields; + PurpleRequestFieldGroup *g; + PurpleRequestField *f; + PurpleConnection *gc = NULL; + PurplePluginProtocolInfo *prpl_info = NULL; + PurpleMood *mood; + PurpleMood *global_moods = get_global_moods(); + + if (account) { + PurplePresence *presence = purple_account_get_presence(account); + PurpleStatus *status = purple_presence_get_status(presence, "mood"); + gc = purple_account_get_connection(account); + g_return_if_fail(gc->prpl != NULL); + prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl); + current_mood = purple_status_get_attr_string(status, PURPLE_MOOD_NAME); + } else { + current_mood = get_global_mood_status(); + } + + fields = purple_request_fields_new(); + g = purple_request_field_group_new(NULL); + f = purple_request_field_list_new("mood", _("Please select your mood from the list")); + + purple_request_field_list_add(f, _("None"), ""); + if (current_mood == NULL) + purple_request_field_list_add_selected(f, _("None")); + + /* TODO: rlaager wants this sorted. */ + for (mood = account ? prpl_info->get_moods(account) : global_moods; + mood->mood != NULL ; mood++) { + char *path; + + if (mood->mood == NULL || mood->description == NULL) + continue; + + path = get_mood_icon_path(mood->mood); + purple_request_field_list_add_icon(f, _(mood->description), + path, (gpointer)mood->mood); + g_free(path); + + if (current_mood && !strcmp(current_mood, mood->mood)) + purple_request_field_list_add_selected(f, _(mood->description)); + } + purple_request_field_group_add_field(g, f); + + purple_request_fields_add_group(fields, g); + + /* if the connection allows setting a mood message */ + if (gc && (gc->flags & PURPLE_CONNECTION_SUPPORT_MOOD_MESSAGES)) { + g = purple_request_field_group_new(NULL); + f = purple_request_field_string_new("text", + _("Message (optional)"), NULL, FALSE); + purple_request_field_group_add_field(g, f); + purple_request_fields_add_group(fields, g); + } + + purple_request_fields(gc, _("Edit User Mood"), _("Edit User Mood"), + NULL, fields, + _("OK"), G_CALLBACK(edit_mood_cb), + _("Cancel"), NULL, + gc ? purple_connection_get_account(gc) : NULL, + NULL, NULL, gc); + + g_free(global_moods); +} + +static void +set_mood_show(void) +{ + set_mood_cb(NULL, NULL); +} /*************************************************** * Crap * @@ -3423,6 +3670,7 @@ { N_("/Tools/Plu_gins"), "<CTL>U", pidgin_plugin_dialog_show, 2, "<StockItem>", PIDGIN_STOCK_TOOLBAR_PLUGINS }, { N_("/Tools/Pr_eferences"), "<CTL>P", pidgin_prefs_show, 0, "<StockItem>", GTK_STOCK_PREFERENCES }, { N_("/Tools/Pr_ivacy"), NULL, pidgin_privacy_dialog_show, 0, "<Item>", NULL }, + { N_("/Tools/Set _Mood"), "<CTL>M", set_mood_show, 0, "<Item>", NULL }, { "/Tools/sep2", NULL, NULL, 0, "<Separator>", NULL }, { N_("/Tools/_File Transfers"), "<CTL>T", pidgin_xfer_dialog_show, 0, "<StockItem>", PIDGIN_STOCK_TOOLBAR_TRANSFER }, { N_("/Tools/R_oom List"), NULL, pidgin_roomlist_dialog_show, 0, "<Item>", NULL }, @@ -3754,25 +4002,6 @@ return pb; } -static char *get_mood_icon_path(const char *mood) -{ - char *path; - - if (!strcmp(mood, "busy")) { - path = g_build_filename(DATADIR, "pixmaps", "pidgin", - "status", "16", "busy.png", NULL); - } else if (!strcmp(mood, "hiptop")) { - path = g_build_filename(DATADIR, "pixmaps", "pidgin", - "emblems", "16", "hiptop.png", NULL); - } else { - char *filename = g_strdup_printf("%s.png", mood); - path = g_build_filename(DATADIR, "pixmaps", "pidgin", - "emotes", "small", filename, NULL); - g_free(filename); - } - return path; -} - GdkPixbuf * pidgin_blist_get_emblem(PurpleBlistNode *node) { @@ -7815,100 +8044,7 @@ purple_account_set_enabled(account, PIDGIN_UI, FALSE); } -static void -edit_mood_cb(PurpleConnection *gc, PurpleRequestFields *fields) -{ - PurpleRequestField *mood_field, *text_field; - GList *l; - - mood_field = purple_request_fields_get_field(fields, "mood"); - text_field = purple_request_fields_get_field(fields, "text"); - l = purple_request_field_list_get_selected(mood_field); - - if (l) { - const char *mood = purple_request_field_list_get_data(mood_field, l->data); - const char *text = purple_request_field_string_get_value(text_field); - PurpleAccount *account = purple_connection_get_account(gc); - - if (mood != NULL && !purple_strequal(mood, "")) { - if (text) { - purple_account_set_status(account, "mood", TRUE, - PURPLE_MOOD_NAME, mood, - PURPLE_MOOD_COMMENT, text, - NULL); - } else { - purple_account_set_status(account, "mood", TRUE, - PURPLE_MOOD_NAME, mood, - NULL); - } - } else { - purple_account_set_status(account, "mood", FALSE, NULL); - } - } -} - -static void -set_mood_cb(GtkWidget *widget, PurpleAccount *account) -{ - PurplePresence *presence = purple_account_get_presence(account); - PurpleStatus *status = purple_presence_get_status(presence, "mood"); - const char *current_mood; - PurpleRequestFields *fields; - PurpleRequestFieldGroup *g; - PurpleRequestField *f; - PurpleConnection *gc = purple_account_get_connection(account); - PurplePluginProtocolInfo *prpl_info; - PurpleMood *mood; - - g_return_if_fail(gc->prpl != NULL); - prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl); - - current_mood = purple_status_get_attr_string(status, PURPLE_MOOD_NAME); - - fields = purple_request_fields_new(); - g = purple_request_field_group_new(NULL); - f = purple_request_field_list_new("mood", _("Please select your mood from the list")); - - purple_request_field_list_add(f, _("None"), ""); - if (current_mood == NULL) - purple_request_field_list_add_selected(f, _("None")); - - /* TODO: rlaager wants this sorted. */ - for (mood = prpl_info->get_moods(account); - mood->mood != NULL ; mood++) { - char *path; - - if (mood->mood == NULL || mood->description == NULL) - continue; - - path = get_mood_icon_path(mood->mood); - purple_request_field_list_add_icon(f, _(mood->description), - path, (gpointer)mood->mood); - g_free(path); - - if (current_mood && !strcmp(current_mood, mood->mood)) - purple_request_field_list_add_selected(f, _(mood->description)); - } - purple_request_field_group_add_field(g, f); - - purple_request_fields_add_group(fields, g); - - /* if the connection allows setting a mood message */ - if (gc->flags & PURPLE_CONNECTION_SUPPORT_MOOD_MESSAGES) { - g = purple_request_field_group_new(NULL); - f = purple_request_field_string_new("text", - _("Message (optional)"), NULL, FALSE); - purple_request_field_group_add_field(g, f); - purple_request_fields_add_group(fields, g); - } - - purple_request_fields(gc, _("Edit User Mood"), _("Edit User Mood"), - NULL, fields, - _("OK"), G_CALLBACK(edit_mood_cb), - _("Cancel"), NULL, - purple_connection_get_account(gc), - NULL, NULL, gc); -} + void pidgin_blist_update_accounts_menu(void)
--- a/pidgin/gtkdialogs.c Wed Mar 10 05:40:47 2010 +0000 +++ b/pidgin/gtkdialogs.c Sun Mar 14 21:20:14 2010 +0000 @@ -76,7 +76,6 @@ {"John 'rekkanoryo' Bailey", N_("bug master"), NULL}, {"Ethan 'Paco-Paco' Blanton", NULL, NULL}, {"Hylke Bons", N_("artist"), "hylkebons@gmail.com"}, - {"Thomas Butter", NULL, NULL}, /* feel free to not translate this */ {N_("Ka-Hing Cheung"), NULL, NULL}, {"Sadrul Habib Chowdhury", NULL, NULL}, @@ -87,8 +86,6 @@ {"Richard 'rlaager' Laager", NULL, "rlaager@pidgin.im"}, {"Sulabh 'sulabh_m' Mahajan", NULL, NULL}, {"Richard 'wabz' Nelson", NULL, NULL}, - {"Christopher 'siege' O'Brien", NULL, "taliesein@users.sf.net"}, - {"Bartosz Oler", NULL, NULL}, {"Etan 'deryni' Reisner", NULL, NULL}, {"Tim 'marv' Ringenbach", NULL, NULL}, {"Michael 'Maiku' Ruprecht", N_("voice and video"), NULL}, @@ -114,12 +111,15 @@ /* Order: Alphabetical by Last Name */ static const struct developer retired_developers[] = { {"Herman Bloggs", N_("win32 port"), "herman@bluedigits.com"}, + {"Thomas Butter", NULL, NULL}, {"Jim Duchek", N_("maintainer"), "jim@linuxpimps.com"}, {"Rob Flynn", N_("maintainer"), NULL}, {"Adam Fritzler", N_("libfaim maintainer"), NULL}, {"Christian 'ChipX86' Hammond", N_("webmaster"), 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}, + {"Christopher 'siege' O'Brien", NULL, "taliesein@users.sf.net"}, + {"Bartosz Oler", NULL, NULL}, {"Megan 'Cae' Schneider", N_("support/QA"), NULL}, {"Jim Seymour", N_("XMPP"), NULL}, {"Mark Spencer", N_("original author"), "markster@marko.net"},
--- a/pidgin/gtkimhtml.c Wed Mar 10 05:40:47 2010 +0000 +++ b/pidgin/gtkimhtml.c Sun Mar 14 21:20:14 2010 +0000 @@ -191,7 +191,7 @@ purple_debug_info("imhtml clipboard", "from clipboard: %s\n", clipboard); - fd = g_fopen("e:\\purplecb.txt", "wb"); + fd = g_fopen("c:\\purplecb.txt", "wb"); fprintf(fd, "%s", clipboard); fclose(fd); #endif @@ -1188,6 +1188,14 @@ memcpy(text, selection_data->data, selection_data->length); } +#ifdef _WIN32 + if (gtk_selection_data_get_data_type(selection_data) == gdk_atom_intern("HTML Format", FALSE)) { + char *tmp = clipboard_win32_to_html(text); + g_free(text); + text = tmp; + } +#endif + if (selection_data->length >= 2 && (*(guint16 *)text == 0xfeff || *(guint16 *)text == 0xfffe)) { /* This is UTF-16 */ @@ -1247,13 +1255,16 @@ #ifdef _WIN32 /* If we're on windows, let's see if we can get data from the HTML Format clipboard before we try to paste from the GTK buffer */ - if (!clipboard_paste_html_win32(imhtml)) -#endif - { + if (!clipboard_paste_html_win32(imhtml)) { + GtkClipboard *clipboard = gtk_widget_get_clipboard(GTK_WIDGET(imhtml), GDK_SELECTION_CLIPBOARD); + gtk_clipboard_request_text(clipboard, paste_plaintext_received_cb, imhtml); + + } +#else GtkClipboard *clipboard = gtk_widget_get_clipboard(GTK_WIDGET(imhtml), GDK_SELECTION_CLIPBOARD); gtk_clipboard_request_contents(clipboard, gdk_atom_intern("text/html", FALSE), paste_received_cb, imhtml); - } +#endif g_signal_stop_emission_by_name(imhtml, "paste-clipboard"); } @@ -1679,8 +1690,10 @@ g_signal_connect_after(G_OBJECT(imhtml), "realize", G_CALLBACK(imhtml_realized_remove_primary), NULL); g_signal_connect(G_OBJECT(imhtml), "unrealize", G_CALLBACK(imhtml_destroy_add_primary), NULL); +#ifndef _WIN32 g_signal_connect_after(G_OBJECT(GTK_IMHTML(imhtml)->text_buffer), "mark-set", G_CALLBACK(mark_set_so_update_selection_cb), imhtml); +#endif gtk_widget_add_events(GTK_WIDGET(imhtml), GDK_LEAVE_NOTIFY_MASK | GDK_ENTER_NOTIFY_MASK);
--- a/pidgin/plugins/perl/common/Makefile.mingw Wed Mar 10 05:40:47 2010 +0000 +++ b/pidgin/plugins/perl/common/Makefile.mingw Sun Mar 14 21:20:14 2010 +0000 @@ -12,7 +12,6 @@ DEFINES := $(subst -DWIN32_LEAN_AND_MEAN,,$(DEFINES)) TARGET = Pidgin -EXTUTILS ?= C:/perl/lib/ExtUtils ## ## INCLUDE PATHS
--- a/pidgin/win32/nsis/generate_gtk_zip.sh Wed Mar 10 05:40:47 2010 +0000 +++ b/pidgin/win32/nsis/generate_gtk_zip.sh Sun Mar 14 21:20:14 2010 +0000 @@ -14,26 +14,21 @@ CONTENTS_FILE=$INSTALL_DIR/CONTENTS #This needs to be changed every time there is any sort of change. -BUNDLE_VERSION=2.14.7.0 +BUNDLE_VERSION=2.16.6.0 -ATK="http://ftp.gnome.org/pub/gnome/binaries/win32/atk/1.24/atk_1.24.0-1_win32.zip ATK 1.24.0-1" +ATK="http://ftp.acc.umu.se/pub/gnome/binaries/win32/atk/1.26/atk_1.26.0-1_win32.zip ATK 1.26.0-1" CAIRO="http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/cairo_1.8.10-1_win32.zip Cairo 1.8.10-1" EXPAT="http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/expat_2.0.1-1_win32.zip Expat 2.0.1-1" FONTCONFIG="http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/fontconfig_2.8.0-2_win32.zip Fontconfig 2.8.0-2" FREETYPE="http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/freetype_2.3.11-2_win32.zip Freetype 2.3.11-2" GETTEXT="http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/gettext-runtime-0.17-1.zip Gettext 0.17-1" GLIB="http://ftp.gnome.org/pub/gnome/binaries/win32/glib/2.20/glib_2.20.5-1_win32.zip Glib 2.20.5-1" -GTK="http://ftp.gnome.org/pub/gnome/binaries/win32/gtk+/2.14/gtk+_2.14.7-1_win32.zip GTK+ 2.14.7-1" -LIBJPEG="http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/jpeg-6b-4.zip libjpeg 6b-4" -#Used by GTK+ -LIBPNG="http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/libpng_1.2.39-1_win32.zip libpng 1.2.39-1" -#Used by Cairo -LIBPNG2="http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/libpng_1.4.0-1_win32.zip libpng 1.4.0-1" -LIBTIFF="http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/libtiff_3.9.1-1_win32.zip libtiff 3.9.1-1" +GTK="http://ftp.acc.umu.se/pub/gnome/binaries/win32/gtk+/2.16/gtk+_2.16.6-2_win32.zip GTK+ 2.16.6-2" +LIBPNG="http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/libpng_1.4.0-1_win32.zip libpng 1.4.0-1" PANGO="http://ftp.gnome.org/pub/gnome/binaries/win32/pango/1.26/pango_1.26.2-1_win32.zip Pango 1.26.2-1" ZLIB="http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/zlib-1.2.3.zip zlib 1.2.3" -ALL="ATK CAIRO EXPAT FONTCONFIG FREETYPE GETTEXT GLIB GTK LIBJPEG LIBPNG LIBPNG2 LIBTIFF PANGO ZLIB" +ALL="ATK CAIRO EXPAT FONTCONFIG FREETYPE GETTEXT GLIB GTK LIBPNG PANGO ZLIB" mkdir -p $STAGE_DIR cd $STAGE_DIR
--- a/po/POTFILES.in Wed Mar 10 05:40:47 2010 +0000 +++ b/po/POTFILES.in Sun Mar 14 21:20:14 2010 +0000 @@ -119,16 +119,6 @@ libpurple/protocols/msn/state.c libpurple/protocols/msn/switchboard.c libpurple/protocols/msn/userlist.c -libpurple/protocols/msnp9/dialog.c -libpurple/protocols/msnp9/error.c -libpurple/protocols/msnp9/msn.c -libpurple/protocols/msnp9/nexus.c -libpurple/protocols/msnp9/notification.c -libpurple/protocols/msnp9/servconn.c -libpurple/protocols/msnp9/session.c -libpurple/protocols/msnp9/state.c -libpurple/protocols/msnp9/switchboard.c -libpurple/protocols/msnp9/userlist.c libpurple/protocols/mxit/actions.c libpurple/protocols/mxit/filexfer.c libpurple/protocols/mxit/http.c