# HG changeset patch # User Etan Reisner # Date 1231334989 0 # Node ID c0255d214741eca7607213313e8399a8f827942d # Parent 674b7434788efb7129988b0ef5467a2fd4c199f4# Parent 45375ae20cd68f351caecc583035087a9ca894f0 merge of '8531e88ebf19846bd138013c731b270540572751' and 'e04ac567cd98f01fdd65d9cd54a09c9c6c17908c' diff -r 674b7434788e -r c0255d214741 ChangeLog --- a/ChangeLog Wed Jan 07 11:30:49 2009 +0000 +++ b/ChangeLog Wed Jan 07 13:29:49 2009 +0000 @@ -15,6 +15,8 @@ XMPP: * Support for XEP-0191 blocking. (Vijay Raghunathan) * Don't put SASL PLAIN or IQ Auth passwords in debug logs. (Paul Aurich) + * Fix removal of avatars (both PEP and vCard), we weren't removing + them correctly before. (Paul Aurich) Pidgin: * Fix a crash in the Add Account dialog when changing protocols under diff -r 674b7434788e -r c0255d214741 ChangeLog.API --- a/ChangeLog.API Wed Jan 07 11:30:49 2009 +0000 +++ b/ChangeLog.API Wed Jan 07 13:29:49 2009 +0000 @@ -1,5 +1,21 @@ Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul +version 2.5.4 (??/??/????): + perl: + Changed: + * Purple::PluginPref->get_bounds no longer takes two integer + arguments it now returns two integers. + + Removed: + * Removed a handful of string-related utility functions that + can generally be better handled with perl's built-in string + functions rather than using pidgin's: + * Purple::Util::strcasereplace + * Purple::Util::strcasestr + * Purple::Util::strreplace + * Purple::Util::str_strip_char + * Purple::Util::chrreplace + version 2.5.3 (12/20/2008): libpurple Changed: diff -r 674b7434788e -r c0255d214741 configure.ac --- a/configure.ac Wed Jan 07 11:30:49 2009 +0000 +++ b/configure.ac Wed Jan 07 13:29:49 2009 +0000 @@ -2285,6 +2285,30 @@ AC_DEFINE(HAVE_TM_GMTOFF, 1, [Define if you have a tm_gmtoff member in struct tm]) fi +AC_CACHE_CHECK([whether va_lists can be copied by value], ac_cv_va_val_copy,[ + AC_TRY_RUN([#include +#include + void f (int i, ...) { + va_list args1, args2; + va_start (args1, i); + args2 = args1; + if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42) + exit (1); + va_end (args1); va_end (args2); + } + int main() { + f (0, 42); + return 0; + }], + [ac_cv_va_val_copy=yes], + [ac_cv_va_val_copy=no], + [ac_cv_va_val_copy=yes]) +]) + +if test "x$ac_cv_va_val_copy" = "xno"; then + AC_DEFINE(VA_COPY_AS_ARRAY, 1, ['va_lists' cannot be copied as values]) +fi + dnl ####################################################################### dnl # Check for check dnl ####################################################################### diff -r 674b7434788e -r c0255d214741 libpurple/plugins/perl/common/PluginPref.xs --- a/libpurple/plugins/perl/common/PluginPref.xs Wed Jan 07 11:30:49 2009 +0000 +++ b/libpurple/plugins/perl/common/PluginPref.xs Wed Jan 07 13:29:49 2009 +0000 @@ -70,10 +70,16 @@ void -purple_plugin_pref_get_bounds(pref, min, max) +purple_plugin_pref_get_bounds(pref, OUTLIST int min, OUTLIST int max) Purple::PluginPref pref - int *min - int *max + # According to the perlxs manual page we shouldn't need to specify a + # prototype here because "[p]arameters preceded by OUTLIST keyword do + # not appear in the usage signature of the generated Perl function." + # however that appears to only work for the usage error message and + # not for the call to newXSproto. Since I can't find any documentation + # for newXSproto at the moment I have no idea if that matters so + # override the prototype here. + PROTOTYPE: $ void purple_plugin_pref_get_choices(pref) diff -r 674b7434788e -r c0255d214741 libpurple/plugins/perl/common/Util.xs --- a/libpurple/plugins/perl/common/Util.xs Wed Jan 07 11:30:49 2009 +0000 +++ b/libpurple/plugins/perl/common/Util.xs Wed Jan 07 13:29:49 2009 +0000 @@ -99,27 +99,10 @@ const char *program gchar_own * -purple_strcasereplace(string, delimiter, replacement) - const char *string - const char *delimiter - const char *replacement - -const char * -purple_strcasestr(haystack, needle) - const char *haystack - const char *needle - -gchar_own * purple_strdup_withhtml(src) const gchar *src gchar_own * -purple_strreplace(string, delimiter, replacement) - const char *string - const char *delimiter - const char *replacement - -gchar_own * purple_text_strip_mnemonic(in) const char *in @@ -356,10 +339,6 @@ purple_str_size_to_units(size) size_t size -void -purple_str_strip_char(IN_OUT char str, thechar) - char thechar - time_t purple_str_to_time(timestamp, utc = FALSE, tm = NULL, OUTLIST long tz_off, OUTLIST const char *rest) const char *timestamp @@ -512,11 +491,6 @@ const char *artist const char *album -void -purple_util_chrreplace(IN_OUT char string, delimiter, replacement) - char delimiter - char replacement - gchar_own* purple_util_format_song_info(title, artist, album, unused) const char* title diff -r 674b7434788e -r c0255d214741 libpurple/plugins/perl/perl-handlers.c --- a/libpurple/plugins/perl/perl-handlers.c Wed Jan 07 11:30:49 2009 +0000 +++ b/libpurple/plugins/perl/perl-handlers.c Wed Jan 07 13:29:49 2009 +0000 @@ -289,14 +289,18 @@ PUSHMARK(sp); purple_signal_get_values(handler->instance, handler->signal, - &ret_value, &value_count, &values); + &ret_value, &value_count, &values); sv_args = g_new(SV *, value_count); copy_args = g_new(void **, value_count); for (i = 0; i < value_count; i++) { sv_args[i] = purple_perl_sv_from_vargs(values[i], +#ifdef VA_COPY_AS_ARRAY + args, +#else (va_list*)&args, +#endif ©_args[i]); XPUSHs(sv_args[i]); diff -r 674b7434788e -r c0255d214741 libpurple/protocols/jabber/buddy.c --- a/libpurple/protocols/jabber/buddy.c Wed Jan 07 11:30:49 2009 +0000 +++ b/libpurple/protocols/jabber/buddy.c Wed Jan 07 13:29:49 2009 +0000 @@ -459,7 +459,10 @@ avatar_data = purple_imgstore_get_data(img); avatar_len = purple_imgstore_get_size(img); - /* have to get rid of the old PHOTO if it exists */ + /* Get rid of an old PHOTO if one exists. + * TODO: This may want to be modified to remove all old PHOTO + * children, at the moment some people have managed to get + * multiple PHOTO entries in their vCard. */ if((photo = xmlnode_get_child(vc_node, "PHOTO"))) { xmlnode_free(photo); } @@ -473,6 +476,12 @@ xmlnode_insert_data(binval, enc, -1); g_free(enc); + } else if (vc_node) { + xmlnode *photo; + /* TODO: Remove all PHOTO children? (see above note) */ + if ((photo = xmlnode_get_child(vc_node, "PHOTO"))) { + xmlnode_free(photo); + } } if (vc_node != NULL) { @@ -578,32 +587,30 @@ jabber_pep_publish((JabberStream*)gc->proto_data, publish); g_free(hash); - } else { /* if(img) */ - /* remove the metadata */ - xmlnode *metadata, *item; - xmlnode *publish = xmlnode_new("publish"); - xmlnode_set_attrib(publish,"node",AVATARNAMESPACEMETA); - - item = xmlnode_new_child(publish, "item"); - - metadata = xmlnode_new_child(item, "metadata"); - xmlnode_set_namespace(metadata,AVATARNAMESPACEMETA); - - xmlnode_new_child(metadata, "stop"); - - /* publish the metadata */ - jabber_pep_publish((JabberStream*)gc->proto_data, publish); + } else { + purple_debug_error("jabber", "jabber_set_buddy_icon received non-png data"); } } else { - purple_debug(PURPLE_DEBUG_ERROR, "jabber", - "jabber_set_buddy_icon received non-png data"); + /* remove the metadata */ + xmlnode *metadata, *item; + xmlnode *publish = xmlnode_new("publish"); + xmlnode_set_attrib(publish,"node",AVATARNAMESPACEMETA); + + item = xmlnode_new_child(publish, "item"); + + metadata = xmlnode_new_child(item, "metadata"); + xmlnode_set_namespace(metadata,AVATARNAMESPACEMETA); + + xmlnode_new_child(metadata, "stop"); + + /* publish the metadata */ + jabber_pep_publish((JabberStream*)gc->proto_data, publish); } } - /* even when the image is not png, we can still publish the vCard, since this - one doesn't require a specific image type */ - - /* publish vCard for those poor older clients */ + /* vCard avatars do not have an image type requirement so update our + * vCard avatar regardless of image type for those poor older clients + */ jabber_set_info(gc, purple_account_get_user_info(gc->account)); gpresence = purple_account_get_presence(gc->account); diff -r 674b7434788e -r c0255d214741 pidgin/plugins/notify.c --- a/pidgin/plugins/notify.c Wed Jan 07 11:30:49 2009 +0000 +++ b/pidgin/plugins/notify.c Wed Jan 07 13:29:49 2009 +0000 @@ -555,9 +555,12 @@ } static void -handle_urgent(PidginWindow *win, gboolean set) +handle_urgent(PidginWindow *purplewin, gboolean set) { - pidgin_set_urgent(GTK_WINDOW(win->window), set); + g_return_if_fail(purplewin != NULL); + g_return_if_fail(purplewin->window != NULL); + + pidgin_set_urgent(GTK_WINDOW(purplewin->window), set); } static void