Mercurial > pidgin
changeset 16684:a0cae757170f
merge of '65f2c26feb0bf8de0c50edb97ab36ff815b40daa'
and '7cab5e68b0e84a50800a767e4c5ea7316591b846'
author | Tim Ringenbach <marv@pidgin.im> |
---|---|
date | Wed, 25 Apr 2007 01:12:47 +0000 |
parents | 07b5cf0a46e2 (diff) 3c1c77f441c6 (current diff) |
children | 34618fedf5b9 |
files | |
diffstat | 47 files changed, 459 insertions(+), 97 deletions(-) [+] |
line wrap: on
line diff
--- a/.mtn-ignore Mon Apr 23 21:25:06 2007 +0000 +++ b/.mtn-ignore Wed Apr 25 01:12:47 2007 +0000 @@ -50,6 +50,7 @@ libpurple/purple-client-bindings.h libpurple/purple-client-example libpurple/tests/check_libpurple +libpurple/version.h libpurple/win32/libpurplerc.rc$ libtool local.mak
--- a/ChangeLog.API Mon Apr 23 21:25:06 2007 +0000 +++ b/ChangeLog.API Wed Apr 25 01:12:47 2007 +0000 @@ -164,14 +164,23 @@ * gaim_gtk_buddy_icon_get_scale_size() was changed to accept an additional parameter which is used to determine what kind of scaling should be done, if any. - * purple_request_input(), purple_request_choice(), - purple_request_choice_varg(), purple_request_action(), - purple_request_action_varg(), purple_request_fields(), - purple_request_yes_no(), purple_request_ok_cancel(), - purple_request_accept_cancel(), purple_request_file(), and - purple_request_folder() was changed to accept account, who, and - conversation parameters for associating the request with an account, a - buddy, or a conversation. + * purple_request_input(), purple_request_choice(), + purple_request_choice_varg(), purple_request_action(), + purple_request_action_varg(), purple_request_fields(), + purple_request_yes_no(), purple_request_ok_cancel(), + purple_request_accept_cancel(), purple_request_file(), and + purple_request_folder() was changed to accept account, who, and + conversation parameters for associating the request with an account, a + buddy, or a conversation. + * Significant changes to the buddy icon and imgstore APIs. If you + were using any of it, it's best to look at the header files or + Doxygen documentation, but here are some significant changes: + purple_buddy_icon_new() now takes ownership of ("frees") icon_data + purple_buddy_icon_set_data(): likewise for data + purple_buddy_icon_set_for_user(): likewise for data + purple_buddy_icon_set_for_user() now takes a checksum parameter + purple_imgstore_add() was renamed to purple_imgstore_add_with_id() + which takes ownership of data Removed: * gaim_gtk_sound_{get,set}_mute() (replaced by the /gaim/gtk/sound/mute
--- a/Makefile.am Mon Apr 23 21:25:06 2007 +0000 +++ b/Makefile.am Wed Apr 25 01:12:47 2007 +0000 @@ -17,7 +17,8 @@ pidgin.apspec.in \ pidgin.spec.in \ pidgin.desktop.in \ - po/Makefile.mingw + po/Makefile.mingw \ + valgrind-suppressions noinst_HEADERS = config.h @@ -25,7 +26,7 @@ cp pidgin.spec $(distdir) rm $(distdir)/config.h -distcheck-hook: libpurple/plugins/perl/common/Purple.pm pidgin/plugins/perl/common/GtkUI.pm +distcheck-hook: libpurple/plugins/perl/common/Purple.pm pidgin/plugins/perl/common/Pidgin.pm # cp libpurple/plugins/perl/common/Gaim.pm $(distdir)/libpurple/plugins/perl/common appsdir = $(datadir)/applications
--- a/configure.ac Mon Apr 23 21:25:06 2007 +0000 +++ b/configure.ac Wed Apr 25 01:12:47 2007 +0000 @@ -1,24 +1,67 @@ dnl Process this file with autoconf to produce a configure script. AC_PREREQ([2.50]) -# Making releases: -# purple_micro_version += 1 -# if any functions have been added: +# UPDATING VERSION NUMBERS FOR RELEASES +# +# purple_micro_version += 1 +# +# If any functions have been added to libpurple, Pidgin, or Finch: # purple_micro_version = 0 # purple_minor_version += 1 -# if backwards compatibility has been broken -# purple_minor_version = 0 +# purple_lt_current += 1 +# +# If backwards compatibility has been broken in libpurple, Pidgin, or Finch: # purple_micro_version = 0 +# purple_minor_version = 0 # purple_major_version += 1; +# purple_lt_current += 1 # +# purple_version_suffix should be similar to one of the following: +# For beta releases: [beta2] +# For code under development: [devel] +# For production releases: [] +# +# +# If any code has changed in libgnt: +# gnt_micro_version += 1 +# +# If any functions have been added to libgnt: +# gnt_micro_version = 0 +# gnt_minor_version += 1 +# gnt_lt_current += 1 +# +# If backwards compatibility has been broken in libgnt: +# gnt_micro_version = 0 +# gnt_minor_version = 0 +# gnt_major_version += 1; +# gnt_lt_current += 1 +# +# gnt_version_suffix should be similar to one of the following: +# For beta releases: [beta2] +# For code under development: [devel] +# For production releases: [] +# +# Make sure to update finch/libgnt/configure.ac with libgnt version changes. +# +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], [devel]) +m4_define([purple_version_suffix], [beta7]) 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])) +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_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])) + + AC_INIT([pidgin], [purple_display_version], [devel@pidgin.im]) AC_CANONICAL_SYSTEM @@ -35,12 +78,20 @@ AC_SUBST(PURPLE_MICRO_VERSION) AC_SUBST(PURPLE_VERSION) -m4_define([lt_current], [m4_eval(100 * purple_major_version + purple_minor_version)]) -m4_define([lt_age], [purple_minor_version]) -m4_define([lt_revision], [purple_micro_version]) -LT_VERSION_INFO="lt_current:lt_revision:lt_age" -AC_SUBST(LT_VERSION_INFO) +PURPLE_LT_VERSION_INFO="purple_lt_current:purple_micro_version:purple_minor_version" +AC_SUBST(PURPLE_LT_VERSION_INFO) +GNT_MAJOR_VERSION=gnt_major_version +GNT_MINOR_VERSION=gnt_minor_version +GNT_MICRO_VERSION=gnt_micro_version +GNT_VERSION=[gnt_display_version] +AC_SUBST(GNT_MAJOR_VERSION) +AC_SUBST(GNT_MINOR_VERSION) +AC_SUBST(GNT_MICRO_VERSION) +AC_SUBST(GNT_VERSION) + +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]) @@ -677,6 +728,7 @@ GADU_LIBS="$GADU_LIBS -lgadu" AC_CHECK_LIB(gadu, gg_libgadu_version, [gadu_libs=yes], , $GADU_LIBS) fi +GADU_CFLAGS=`echo $GADU_CFLAGS |$sedpath 's/-Wall//'` if test "x$gadu_libs" = "xyes"; then AC_MSG_CHECKING(for libgadu GPL compatibility)
--- a/finch/gntblist.c Mon Apr 23 21:25:06 2007 +0000 +++ b/finch/gntblist.c Wed Apr 25 01:12:47 2007 +0000 @@ -1699,8 +1699,17 @@ newmessage = gnt_entry_get_text(GNT_ENTRY(ggblist->statustext)); item = gnt_combo_box_get_selected_data(GNT_COMBO_BOX(ggblist->status)); - g_return_val_if_fail(item->type == STATUS_PRIMITIVE, FALSE); - newprim = item->u.prim; + + switch (item->type) { + case STATUS_PRIMITIVE: + newprim = item->u.prim; + break; + case STATUS_SAVED_POPULAR: + newprim = purple_savedstatus_get_type(item->u.saved); + break; + default: + goto end; /* 'New' or 'Saved' is selected, but this should never happen. */ + } if (newprim != prim || ((message && !newmessage) || (!message && newmessage) || @@ -1718,6 +1727,7 @@ } gnt_box_give_focus_to_child(GNT_BOX(ggblist->window), ggblist->tree); +end: if (ggblist->typing) g_source_remove(ggblist->typing); ggblist->typing = 0;
--- a/finch/gntconv.h Mon Apr 23 21:25:06 2007 +0000 +++ b/finch/gntconv.h Wed Apr 25 01:12:47 2007 +0000 @@ -49,6 +49,7 @@ GntWidget *tv; /* text-view */ GntWidget *menu; /* future use */ GntWidget *info; + void *pad; union { @@ -60,11 +61,14 @@ struct _FinchConvChat { GntWidget *userlist; /* the userlist */ + void *pad1; + void *pad2; }; struct _FinchConvIm { void *nothing_for_now; + void *something_for_later; }; /**
--- a/finch/libgnt/Makefile.am Mon Apr 23 21:25:06 2007 +0000 +++ b/finch/libgnt/Makefile.am Wed Apr 25 01:12:47 2007 +0000 @@ -76,7 +76,7 @@ $(libgnt_la_headers) libgnt_la_DEPENDENCIES = -libgnt_la_LDFLAGS = -export-dynamic +libgnt_la_LDFLAGS = -export-dynamic -version_info $(GNT_LT_VERSION_INFO) -no-undefined libgnt_la_LIBADD = \ $(GLIB_LIBS) \ $(GNT_LIBS) \
--- a/finch/libgnt/configure.ac Mon Apr 23 21:25:06 2007 +0000 +++ b/finch/libgnt/configure.ac Wed Apr 25 01:12:47 2007 +0000 @@ -1,10 +1,54 @@ dnl Process this file with autoconf to produce a configure script. -AC_INIT([libgnt], [0.0.0dev], [devel@pidgin.im]) +AC_PREREQ([2.50]) + +# UPDATING VERSION NUMBERS FOR RELEASES +# +# gnt_micro_version += 1 +# +# If any functions have been added to libgnt: +# gnt_micro_version = 0 +# gnt_minor_version += 1 +# gnt_lt_current += 1 +# +# If backwards compatibility has been broken in libgnt: +# gnt_micro_version = 0 +# gnt_minor_version = 0 +# gnt_major_version += 1; +# gnt_lt_current += 1 +# +# gnt_version_suffix should be similar to one of the following: +# For beta releases: [beta2] +# For code under development: [devel] +# For production releases: [] +# +# Make sure to update ../../configure.ac with libgnt version changes. +# + +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_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])) + +AC_INIT([libgnt], [gnt_display_version], [devel@pidgin.im]) AC_CANONICAL_SYSTEM AM_CONFIG_HEADER(config.h) AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION) -AC_PREREQ([2.50]) +GNT_MAJOR_VERSION=gnt_major_version +GNT_MINOR_VERSION=gnt_minor_version +GNT_MICRO_VERSION=gnt_micro_version +GNT_VERSION=[gnt_display_version] +AC_SUBST(GNT_MAJOR_VERSION) +AC_SUBST(GNT_MINOR_VERSION) +AC_SUBST(GNT_MICRO_VERSION) +AC_SUBST(GNT_VERSION) + +GNT_LT_VERSION_INFO="gnt_lt_current:gnt_micro_version:gnt_minor_version" +AC_SUBST(GNT_LT_VERSION_INFO) AC_PATH_PROG(sedpath, sed)
--- a/libpurple/Makefile.am Mon Apr 23 21:25:06 2007 +0000 +++ b/libpurple/Makefile.am Wed Apr 25 01:12:47 2007 +0000 @@ -173,7 +173,7 @@ libpurple_client_lib = libpurple-client.la libpurple_client_la_SOURCES = purple-client.c purple-client.h - +libpurple_client_la_LDFLAGS = -version-info $(PURPLE_LT_VERSION_INFO) -no-undefined libpurple_client_la_LIBADD = $(DBUS_LIBS) purple-client-bindings.c: dbus-analyze-functions.py $(dbus_exported) @@ -221,7 +221,7 @@ $(dbus_headers) libpurple_la_DEPENDENCIES = $(STATIC_LINK_LIBS) -libpurple_la_LDFLAGS = -export-dynamic -version-info $(LT_VERSION_INFO) -no-undefined +libpurple_la_LDFLAGS = -export-dynamic -version-info $(PURPLE_LT_VERSION_INFO) -no-undefined libpurple_la_LIBADD = \ $(DBUS_LIBS) \ $(GLIB_LIBS) \
--- a/libpurple/Makefile.mingw Mon Apr 23 21:25:06 2007 +0000 +++ b/libpurple/Makefile.mingw Wed Apr 25 01:12:47 2007 +0000 @@ -117,7 +117,7 @@ sed -e 's/@PURPLE_VERSION@/$(PURPLE_VERSION)/g' \ $@.in > $@ -$(OBJECTS): $(PURPLE_CONFIG_H) +$(OBJECTS): $(PURPLE_CONFIG_H) $(PURPLE_VERSION_H) $(TARGET).dll $(TARGET).dll.a: $(OBJECTS) $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -Wl,--out-implib,$(TARGET).dll.a -o $(TARGET).dll
--- a/libpurple/account.c Mon Apr 23 21:25:06 2007 +0000 +++ b/libpurple/account.c Wed Apr 25 01:12:47 2007 +0000 @@ -802,7 +802,7 @@ xmlnode_free(node); - purple_buddy_icons_account_loaded_cb(); + _purple_buddy_icons_account_loaded_cb(); }
--- a/libpurple/blist.c Mon Apr 23 21:25:06 2007 +0000 +++ b/libpurple/blist.c Wed Apr 25 01:12:47 2007 +0000 @@ -607,7 +607,7 @@ xmlnode_free(purple); /* This tells the buddy icon code to do its thing. */ - purple_buddy_icons_blist_loaded_cb(); + _purple_buddy_icons_blist_loaded_cb(); }
--- a/libpurple/buddyicon.c Mon Apr 23 21:25:06 2007 +0000 +++ b/libpurple/buddyicon.c Wed Apr 25 01:12:47 2007 +0000 @@ -212,6 +212,10 @@ { const char *filename = purple_imgstore_get_filename(img); + /* If there's no filename, it can't be one of our images. */ + if (filename == NULL) + return; + if (img == g_hash_table_lookup(icon_data_cache, filename)) { purple_buddy_icon_data_uncache_file(filename); @@ -694,11 +698,13 @@ { const char *filename = purple_imgstore_get_filename(img); purple_account_set_string(account, "buddy_icon", filename); + purple_account_set_int(account, "buddy_icon_timestamp", time(NULL)); ref_filename(filename); } else { purple_account_set_string(account, "buddy_icon", NULL); + purple_account_set_int(account, "buddy_icon_timestamp", 0); } unref_filename(old_icon); @@ -721,7 +727,7 @@ if (old_img) purple_imgstore_unref(old_img); - else + else if (old_icon) { /* The old icon may not have been loaded into memory. In that * case, we'll need to uncache the filename. The filenames @@ -733,6 +739,25 @@ return img; } +time_t +purple_buddy_icons_get_account_icon_timestamp(PurpleAccount *account) +{ + time_t ret; + + g_return_val_if_fail(account != NULL, 0); + + ret = purple_account_get_int(account, "buddy_icon_timestamp", 0); + + /* This deals with migration cases. */ + if (ret == 0 && purple_account_get_string(account, "buddy_icon", NULL) != NULL) + { + ret = time(NULL); + purple_account_set_int(account, "buddy_icon_timestamp", ret); + } + + return ret; +} + PurpleStoredImage * purple_buddy_icons_find_custom_icon(PurpleContact *contact) { @@ -829,7 +854,7 @@ if (old_img) purple_imgstore_unref(old_img); - else + else if (old_icon) { /* The old icon may not have been loaded into memory. In that * case, we'll need to uncache the filename. The filenames @@ -842,7 +867,7 @@ } void -purple_buddy_icon_set_old_icons_dir(const char *dirname) +_purple_buddy_icon_set_old_icons_dir(const char *dirname) { old_icons_dir = g_strdup(dirname); } @@ -887,9 +912,19 @@ FILE *file; char *new_filename; - if (!read_icon_file(path, &icon_data, &icon_len) || - icon_data == NULL || icon_len > 0) + if (!read_icon_file(path, &icon_data, &icon_len)) { + g_free(path); + delete_buddy_icon_settings(node, setting_name); + return; + } + + if (icon_data == NULL || icon_len <= 0) + { + /* This really applies to the icon_len check. + * icon_data should never be NULL if + * read_icon_file() returns TRUE. */ + purple_debug_error("buddyicon", "Empty buddy icon file: %s\n", path); delete_buddy_icon_settings(node, setting_name); g_free(path); return; @@ -900,8 +935,11 @@ new_filename = purple_buddy_icon_data_calculate_filename(icon_data, icon_len); if (new_filename == NULL) { + purple_debug_error("buddyicon", + "New icon filename is NULL. This should never happen! " + "The old filename was: %s\n", path); delete_buddy_icon_settings(node, setting_name); - return; + g_return_if_reached(); } path = g_build_filename(dirname, new_filename, NULL); @@ -967,14 +1005,14 @@ } else { - /* If the icon is gone, drop the setting... */ + purple_debug_error("buddyicon", "Old icon file doesn't exist: %s\n", path); delete_buddy_icon_settings(node, setting_name); g_free(path); } } void -purple_buddy_icons_account_loaded_cb() +_purple_buddy_icons_account_loaded_cb() { const char *dirname = purple_buddy_icons_get_cache_dir(); GList *cur; @@ -999,7 +1037,7 @@ } void -purple_buddy_icons_blist_loaded_cb() +_purple_buddy_icons_blist_loaded_cb() { PurpleBlistNode *node = purple_blist_get_root(); const char *dirname = purple_buddy_icons_get_cache_dir(); @@ -1124,7 +1162,8 @@ g_direct_hash, g_direct_equal, NULL, (GFreeFunc)g_hash_table_destroy); - icon_data_cache = g_hash_table_new(g_str_hash, g_str_equal); + icon_data_cache = g_hash_table_new_full(g_str_hash, g_str_equal, + g_free, NULL); icon_file_cache = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); pointer_icon_cache = g_hash_table_new(g_direct_hash, g_direct_equal);
--- a/libpurple/buddyicon.h Mon Apr 23 21:25:06 2007 +0000 +++ b/libpurple/buddyicon.h Wed Apr 25 01:12:47 2007 +0000 @@ -261,6 +261,19 @@ guchar *icon_data, size_t icon_len); /** + * Returns the timestamp of when the icon was set. + * + * This is intended for use in protocols that require a timestamp for + * buddy icon update reasons. + * + * @param account The account + * + * @return The time the icon was set, or 0 if an error occurred. + */ +time_t +purple_buddy_icons_get_account_icon_timestamp(PurpleAccount *account); + +/** * Returns the custom buddy icon image for a contact. * * The caller owns a reference to the image in the store, and must dereference
--- a/libpurple/core.c Mon Apr 23 21:25:06 2007 +0000 +++ b/libpurple/core.c Wed Apr 25 01:12:47 2007 +0000 @@ -401,8 +401,9 @@ if (!strcmp(entry, "logs")) { char buf[MAXPATHLEN]; + size_t linklen; - if (readlink(name, buf, sizeof(buf) - 1) == -1) + if ((linklen = readlink(name, buf, sizeof(buf) - 1) == -1)) { purple_debug_error("core", "Error reading symlink %s: %s\n", name, strerror(errno)); @@ -412,7 +413,7 @@ g_free(old_user_dir); return FALSE; } - buf[sizeof(buf) - 1] = '\0'; + buf[linklen] = '\0'; logs_dir = g_strconcat(user_dir, G_DIR_SEPARATOR_S "logs", NULL); @@ -640,7 +641,7 @@ } old_icons_dir = g_build_filename(old_user_dir, "icons", NULL); - purple_buddy_icon_set_old_icons_dir(old_icons_dir); + _purple_buddy_icon_set_old_icons_dir(old_icons_dir); g_free(old_icons_dir); g_free(old_user_dir);
--- a/libpurple/dnsquery.c Mon Apr 23 21:25:06 2007 +0000 +++ b/libpurple/dnsquery.c Wed Apr 25 01:12:47 2007 +0000 @@ -140,7 +140,7 @@ * Begin the DNS resolver child process functions. */ #ifdef HAVE_SIGNAL_H -static void +G_GNUC_NORETURN static void trap_gdb_bug() { const char *message = @@ -158,7 +158,7 @@ } #endif -static void +G_GNUC_NORETURN static void purple_dnsquery_resolver_run(int child_out, int child_in, gboolean show_debug) { dns_params_t dns_params;
--- a/libpurple/dnssrv.c Mon Apr 23 21:25:06 2007 +0000 +++ b/libpurple/dnssrv.c Wed Apr 25 01:12:47 2007 +0000 @@ -92,7 +92,7 @@ #ifndef _WIN32 -static void +G_GNUC_NORETURN static void resolve(int in, int out) { GList *ret = NULL;
--- a/libpurple/gaim-compat.h Mon Apr 23 21:25:06 2007 +0000 +++ b/libpurple/gaim-compat.h Wed Apr 25 01:12:47 2007 +0000 @@ -345,7 +345,7 @@ #define gaim_buddy_icon_update purple_buddy_icon_update #define gaim_buddy_icon_set_data(icon, data, len) \ - purple_buddy_icon_set_protocol_data(icon, g_memdup(data, len), len, NULL); + purple_buddy_icon_set_data(icon, g_memdup(data, len), len, NULL); #define gaim_buddy_icon_get_account purple_buddy_icon_get_account #define gaim_buddy_icon_get_username purple_buddy_icon_get_username @@ -353,7 +353,7 @@ #define gaim_buddy_icon_get_type purple_buddy_icon_get_extension #define gaim_buddy_icons_set_for_user(icon, data, len) \ - purple_buddy_icons_set_for_user(icon, g_memdup(data, len), len) + purple_buddy_icons_set_for_user(icon, g_memdup(data, len), len, NULL) #define gaim_buddy_icons_find purple_buddy_icons_find #define gaim_buddy_icons_set_caching purple_buddy_icons_set_caching #define gaim_buddy_icons_is_caching purple_buddy_icons_is_caching @@ -961,7 +961,8 @@ #define GaimStoredImage PurpleStoredImage -#define gaim_imgstore_add(data, size, filename) purple_imgstore_add_with_id(g_memdup(data, size), size, filename) +#define gaim_imgstore_add(data, size, filename) \ + purple_imgstore_add_with_id(g_memdup(data, size), size, filename) #define gaim_imgstore_get purple_imgstore_find_by_id #define gaim_imgstore_get_data purple_imgstore_get_data #define gaim_imgstore_get_size purple_imgstore_get_size
--- a/libpurple/internal.h Mon Apr 23 21:25:06 2007 +0000 +++ b/libpurple/internal.h Wed Apr 25 01:12:47 2007 +0000 @@ -187,17 +187,17 @@ /* 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. */ void -purple_buddy_icons_account_loaded_cb(void); +_purple_buddy_icons_account_loaded_cb(void); /* This is for the buddy list to notify the buddy icon code that * it's done loading. We may want to replace this with a signal. */ void -purple_buddy_icons_blist_loaded_cb(void); +_purple_buddy_icons_blist_loaded_cb(void); /* This is for the purple_core_migrate() code to tell the buddy * icon subsystem about the old icons directory so it can * migrate any icons in use. */ void -purple_buddy_icon_set_old_icons_dir(const char *dirname); +_purple_buddy_icon_set_old_icons_dir(const char *dirname); #endif /* _PURPLE_INTERNAL_H_ */
--- a/libpurple/notify.c Mon Apr 23 21:25:06 2007 +0000 +++ b/libpurple/notify.c Wed Apr 25 01:12:47 2007 +0000 @@ -521,6 +521,7 @@ } g_list_free(user_info->user_info_entries); + g_free(user_info); } GList *
--- a/libpurple/plugins/psychic.c Mon Apr 23 21:25:06 2007 +0000 +++ b/libpurple/plugins/psychic.c Wed Apr 25 01:12:47 2007 +0000 @@ -9,6 +9,7 @@ #include "signals.h" #include "status.h" #include "version.h" +#include "privacy.h" #include "plugin.h" #include "pluginpref.h" @@ -47,6 +48,11 @@ return; } + if(FALSE == purple_privacy_check(acct, name)) { + purple_debug_info("psychic", "user %s is blocked", name); + return; + } + gconv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, name, acct); if(! gconv) { purple_debug_info("psychic", "no previous conversation exists\n");
--- a/libpurple/protocols/jabber/auth.c Mon Apr 23 21:25:06 2007 +0000 +++ b/libpurple/protocols/jabber/auth.c Wed Apr 25 01:12:47 2007 +0000 @@ -819,7 +819,7 @@ } else { response = xmlnode_new("response"); xmlnode_set_namespace(response, "urn:ietf:params:xml:ns:xmpp-sasl"); - if (c_out) { + if (clen > 0) { enc_out = purple_base64_encode((unsigned char*)c_out, clen); xmlnode_insert_data(response, enc_out, -1); g_free(enc_out);
--- a/libpurple/protocols/msn/slp.c Mon Apr 23 21:25:06 2007 +0000 +++ b/libpurple/protocols/msn/slp.c Wed Apr 25 01:12:47 2007 +0000 @@ -955,7 +955,7 @@ if (obj == NULL) { -/* purple_buddy_icons_set_for_user(account, user->passport, NULL, 0, NULL); */ + purple_buddy_icons_set_for_user(account, user->passport, NULL, 0, NULL); return; }
--- a/libpurple/protocols/oscar/oscar.c Mon Apr 23 21:25:06 2007 +0000 +++ b/libpurple/protocols/oscar/oscar.c Wed Apr 25 01:12:47 2007 +0000 @@ -1941,9 +1941,9 @@ purple_debug_info("oscar", "Sending buddy icon to %s (%d bytes)\n", userinfo->sn, len); - /* TODO: XXX: FIXME: Does this actually need the mtime of the file? */ aim_im_sendch2_icon(od, userinfo->sn, data, len, - time(NULL), aimutil_iconsum(data, len)); + purple_buddy_icons_get_account_icon_timestamp(account), + aimutil_iconsum(data, len)); } purple_imgstore_unref(img); @@ -4232,8 +4232,7 @@ gconstpointer data = purple_imgstore_get_data(img); args.iconlen = purple_imgstore_get_size(img); args.iconsum = aimutil_iconsum(data, args.iconlen); - /* TODO: XXX: FIXME: Deal with the timestamp issue. */ - args.iconstamp = time(NULL); + args.iconstamp = purple_buddy_icons_get_account_icon_timestamp(account); if ((args.iconlen != bi->ico_me_len) || (args.iconsum != bi->ico_me_csum) || (args.iconstamp != bi->ico_me_time)) { bi->ico_informed = FALSE;
--- a/libpurple/protocols/silc/buddy.c Mon Apr 23 21:25:06 2007 +0000 +++ b/libpurple/protocols/silc/buddy.c Wed Apr 25 01:12:47 2007 +0000 @@ -1706,7 +1706,7 @@ if (!mime) return; - t = purple_util_get_image_extension(purple_imgstore_get_data(img), purple_imgstore_get_size(img)); + t = purple_imgstore_get_extension(img); if (!t || !strcmp(t, "icon")) { silc_mime_free(mime); return;
--- a/libpurple/savedstatuses.c Mon Apr 23 21:25:06 2007 +0000 +++ b/libpurple/savedstatuses.c Wed Apr 25 01:12:47 2007 +0000 @@ -154,7 +154,7 @@ } /** - * A magic number is calcuated for each status, and then the + * A magic number is calculated for each status, and then the * statuses are ordered by the magic number. The magic number * is the date the status was last used offset by one day for * each time the status has been used (but only by 10 days at
--- a/libpurple/win32/global.mak Mon Apr 23 21:25:06 2007 +0000 +++ b/libpurple/win32/global.mak Wed Apr 25 01:12:47 2007 +0000 @@ -48,6 +48,7 @@ PIDGIN_CONFIG_H := $(PIDGIN_TREE_TOP)/config.h PURPLE_CONFIG_H := $(PIDGIN_TREE_TOP)/config.h PIDGIN_IDLETRACK_DLL := $(PIDGIN_IDLETRACK_TOP)/idletrack.dll +PURPLE_VERSION_H := $(PURPLE_TOP)/version.h PURPLE_DLL := $(PURPLE_TOP)/libpurple.dll PURPLE_PERL_DLL := $(PURPLE_PERL_TOP)/perl.dll PIDGIN_DLL := $(PIDGIN_TOP)/pidgin.dll
--- a/libpurple/win32/targets.mak Mon Apr 23 21:25:06 2007 +0000 +++ b/libpurple/win32/targets.mak Wed Apr 25 01:12:47 2007 +0000 @@ -8,7 +8,14 @@ $(PIDGIN_CONFIG_H): $(PIDGIN_TREE_TOP)/config.h.mingw cp $(PIDGIN_TREE_TOP)/config.h.mingw $(PIDGIN_CONFIG_H) -$(PURPLE_DLL) $(PURPLE_DLL).a: +$(PURPLE_VERSION_H): $(PURPLE_VERSION_H).in $(PIDGIN_TREE_TOP)/configure.ac + cp $(PURPLE_VERSION_H).in $(PURPLE_VERSION_H) + awk 'BEGIN {FS="[\\(\\)\\[\\]]"} \ + /^m4_define..purple_major_version/ {system("sed -i -e s/@PURPLE_MAJOR_VERSION@/"$$5"/ $(PURPLE_VERSION_H)");} \ + /^m4_define..purple_minor_version/ {system("sed -i -e s/@PURPLE_MINOR_VERSION@/"$$5"/ $(PURPLE_VERSION_H)");} \ + /^m4_define..purple_micro_version/ {system("sed -i -e s/@PURPLE_MICRO_VERSION@/"$$5"/ $(PURPLE_VERSION_H)"); exit}' $(PIDGIN_TREE_TOP)/configure.ac + +$(PURPLE_DLL) $(PURPLE_DLL).a: $(PURPLE_VERSION_H) $(MAKE) -C $(PURPLE_TOP) -f $(MINGW_MAKEFILE) libpurple.dll $(PURPLE_PERL_DLL) $(PURPLE_PERL_DLL).a:
--- a/pidgin.spec.in Mon Apr 23 21:25:06 2007 +0000 +++ b/pidgin.spec.in Wed Apr 25 01:12:47 2007 +0000 @@ -6,10 +6,10 @@ # When not doing betas comment this out # NOTE: %defines in spec files are evaluated in comments so the correct # way to comment it out is to replace the % with # -#define beta 7 +%define beta 7 %if 0%{?beta} -%define pidginver %(echo "@VERSION@"|sed -e 's/dev//; s/beta.*//') +%define pidginver %(echo "@VERSION@"|sed -e 's/dev.*//; s/beta.*//') %else %define pidginver @VERSION@ %endif @@ -237,24 +237,24 @@ find $RPM_BUILD_ROOT -type f -name '*.bs' -empty -exec rm -f {} ';' %if 0%{!?_with_howl:1} && 0%{!?_with_avahi:1} -rm -f $RPM_BUILD_ROOT%{_libdir}/libpurple/libbonjour.so +rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/libbonjour.so %endif %if 0%{!?_with_meanwhile:1} -rm -f $RPM_BUILD_ROOT%{_libdir}/libpurple/libsametime.so +rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/libsametime.so %endif %if 0%{!?_with_mono:1} -rm -f $RPM_BUILD_ROOT%{_libdir}/libpurple/mono.so -rm -f $RPM_BUILD_ROOT%{_libdir}/libpurple/*.dll +rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/mono.so +rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/*.dll %endif %if 0%{?_without_silc:1} -rm -f $RPM_BUILD_ROOT%{_libdir}/libpurple/libsilcpurple.so +rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/libsilcpurple.so %endif %if 0%{?_without_tcl:1} -rm -f $RPM_BUILD_ROOT%{_libdir}/libpurple/tcl.so +rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/tcl.so %endif %if 0%{?_without_text:1} @@ -265,7 +265,7 @@ %find_lang %{name} -find $RPM_BUILD_ROOT%{_libdir}/libpurple -xtype f -print | \ +find $RPM_BUILD_ROOT%{_libdir}/purple-2 -xtype f -print | \ sed "s@^$RPM_BUILD_ROOT@@g" | \ grep -v /libbonjour.so | \ grep -v /libsametime.so | \ @@ -333,13 +333,12 @@ %doc %{_mandir}/man3*/* %dir %{_libdir}/pidgin -%dir %{perl_vendorarch}/Purple -%attr(755, root, root) %{perl_vendorarch}/Purple/* -%attr(755, root, root) %{perl_vendorarch}/auto/Purple/GtkUI* +%attr(755, root, root) %{perl_vendorarch}/Pidgin.pm +%attr(755, root, root) %{perl_vendorarch}/auto/Pidgin %{_bindir}/pidgin %{_datadir}/pixmaps/pidgin -%{_datadir}/icons/hicolor/*/apps/pidgin.png +%{_datadir}/icons/hicolor/*/apps/pidgin.* %dir %{_datadir}/sounds/pidgin %{_datadir}/sounds/pidgin/* %{_datadir}/applications/* @@ -352,9 +351,7 @@ %{_libdir}/libpurple.so.* %dir %{_libdir}/purple-2 %attr(755, root, root) %{perl_vendorarch}/Purple.pm -%dir %{perl_vendorarch}/auto/Purple -%attr(755, root, root) %{perl_vendorarch}/auto/Purple/Purple.so -%attr(755, root, root) %{perl_vendorarch}/auto/Purple/autosplit.ix +%attr(755, root, root) %{perl_vendorarch}/auto/Purple %{_datadir}/pixmaps/purple @@ -365,7 +362,6 @@ %{_bindir}/purple-send-async %{_bindir}/purple-url-handler %{_libdir}/libpurple-client.so.* -%doc README.dbus %doc libpurple/purple-notifications-example %endif @@ -381,7 +377,6 @@ %doc ChangeLog.API %doc HACKING %doc PLUGIN_HOWTO -%doc PROGRAMMING_NOTES %dir %{_includedir}/libpurple %{_includedir}/libpurple/*.h @@ -397,22 +392,22 @@ %files -n libpurple-bonjour %defattr(-, root, root) -%{_libdir}/libpurple/libbonjour.* +%{_libdir}/purple-2/libbonjour.* %endif %if 0%{?_with_meanwhile:1} %files -n libpurple-meanwhile %defattr(-, root, root) -%{_libdir}/libpurple/libsametime.* +%{_libdir}/purple-2/libsametime.* %endif %if 0%{?_with_mono:1} %files libpurple-mono %defattr(-, root, root) -%{_libdir}/libpurple/mono.so -%{_libdir}/libpurple/*.dll +%{_libdir}/purple-2/mono.so +%{_libdir}/purple-2/*.dll %endif %if 0%{!?_without_text:1} @@ -436,6 +431,9 @@ %endif %changelog +* Sun Apr 29 2007 Stu Tomlinson <stu@nosnilmot.com> +- Update to reflect perl Purple::GtkUI -> Pidgin change + * Wed Apr 25 2007 Stu Tomlinson <stu@nosnilmot.com> - Update libpurple to pick up plugins in %%{_libdir}/purple
--- a/pidgin/gtkconv.c Mon Apr 23 21:25:06 2007 +0000 +++ b/pidgin/gtkconv.c Wed Apr 25 01:12:47 2007 +0000 @@ -2370,8 +2370,13 @@ gtkconv = PIDGIN_CONVERSATION(conv); account = purple_conversation_get_account(conv); - if(account && account->gc) + + if(account && account->gc) { prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(account->gc->prpl); + } else { + gtkconv->u.im->icon_timer = 0; + return FALSE; + } gtkconv->auto_resize = TRUE; g_idle_add(reset_auto_resize_cb, gtkconv);
--- a/pidgin/gtkdocklet.c Mon Apr 23 21:25:06 2007 +0000 +++ b/pidgin/gtkdocklet.c Wed Apr 25 01:12:47 2007 +0000 @@ -118,6 +118,9 @@ DockletStatus newstatus = DOCKLET_STATUS_OFFLINE; gboolean pending = FALSE, connecting = FALSE; + /* get the current savedstatus */ + saved_status = purple_savedstatus_get_current(); + /* determine if any ims have unseen messages */ convs = get_pending_list(DOCKLET_TOOLTIP_LINE_LIMIT); @@ -168,7 +171,10 @@ g_list_free(convs); } else if (ui_ops->set_tooltip) { - ui_ops->set_tooltip(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); } for(l = purple_accounts_get_all(); l != NULL; l = l->next) { @@ -187,7 +193,6 @@ connecting = TRUE; } - saved_status = purple_savedstatus_get_current(); prim = purple_savedstatus_get_type(saved_status); if (pending) newstatus = DOCKLET_STATUS_PENDING;
--- a/pidgin/gtkrequest.c Mon Apr 23 21:25:06 2007 +0000 +++ b/pidgin/gtkrequest.c Wed Apr 25 01:12:47 2007 +0000 @@ -472,7 +472,9 @@ if (title != NULL) gtk_window_set_title(GTK_WINDOW(dialog), title); - +#ifdef _WIN32 + gtk_window_set_title(GTK_WINDOW(dialog), PIDGIN_ALERT_TITLE); +#endif gtk_dialog_add_button(GTK_DIALOG(dialog), text_to_stock(cancel_text), 0); @@ -580,6 +582,9 @@ if (title != NULL) gtk_window_set_title(GTK_WINDOW(dialog), title); +#ifdef _WIN32 + gtk_window_set_title(GTK_WINDOW(dialog), PIDGIN_ALERT_TITLE); +#endif for (i = 0; i < action_count; i++) { gtk_dialog_add_button(GTK_DIALOG(dialog), @@ -1068,6 +1073,9 @@ if (title != NULL) gtk_window_set_title(GTK_WINDOW(win), title); +#ifdef _WIN32 + gtk_window_set_title(GTK_WINDOW(win), PIDGIN_ALERT_TITLE); +#endif gtk_window_set_role(GTK_WINDOW(win), "multifield"); gtk_container_set_border_width(GTK_CONTAINER(win), PIDGIN_HIG_BORDER); @@ -1542,7 +1550,8 @@ else gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(filesel), filename); } - if ((current_folder != NULL) && (*current_folder != '\0')) { + if ((filename == NULL || *filename == '\0' || !g_file_test(filename, G_FILE_TEST_EXISTS)) && + (current_folder != NULL) && (*current_folder != '\0')) { folder_set = gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(filesel), current_folder); } @@ -1609,7 +1618,7 @@ data->cbs[0] = cancel_cb; data->cbs[1] = ok_cb; data->u.file.savedialog = FALSE; - + #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ dirsel = gtk_file_chooser_dialog_new( title ? title : _("Select Folder..."),
--- a/pidgin/gtksavedstatuses.c Mon Apr 23 21:25:06 2007 +0000 +++ b/pidgin/gtksavedstatuses.c Wed Apr 25 01:12:47 2007 +0000 @@ -1677,7 +1677,7 @@ GList *sorted, *cur; int i = 0; int index = -1; - GdkPixbuf *pixbuf, *emblem; + GdkPixbuf *pixbuf; GtkTreeIter iter; GtkCellRenderer *text_rend; GtkCellRenderer *icon_rend;
--- a/pidgin/gtkstatusbox.c Mon Apr 23 21:25:06 2007 +0000 +++ b/pidgin/gtkstatusbox.c Wed Apr 25 01:12:47 2007 +0000 @@ -1447,10 +1447,10 @@ size_t len = 0; if (filename) data = pidgin_convert_buddy_icon(plug, filename, &len); - img = purple_buddy_icons_set_account_icon(box->account, data, len); - purple_account_set_buddy_icon_path(box->account, filename); + img = purple_buddy_icons_set_account_icon(account, data, len); + purple_account_set_buddy_icon_path(account, filename); - purple_account_set_bool(box->account, "use-global-buddyicon", (filename != NULL)); + purple_account_set_bool(account, "use-global-buddyicon", (filename != NULL)); } } } @@ -2071,7 +2071,9 @@ pidgin_status_box_set_buddy_icon(PidginStatusBox *status_box, PurpleStoredImage *img) { purple_imgstore_unref(status_box->buddy_icon_img); - status_box->buddy_icon_img = purple_imgstore_ref(img); + status_box->buddy_icon_img = img; + if (status_box->buddy_icon_img != NULL) + purple_imgstore_ref(status_box->buddy_icon_img); pidgin_status_box_redisplay_buddy_icon(status_box); } @@ -2225,7 +2227,8 @@ PurpleSavedStatusSub *sub = purple_savedstatus_get_substatus(ss, acct); if (sub) { const PurpleStatusType *sub_type = purple_savedstatus_substatus_get_type(sub); - if (!strcmp(purple_status_type_get_id(sub_type), + const char *subtype_status_id = purple_status_type_get_id(sub_type); + if (subtype_status_id && !strcmp(subtype_status_id, purple_status_type_get_id(acct_status_type))) found = TRUE; }
--- a/pidgin/gtkutils.c Mon Apr 23 21:25:06 2007 +0000 +++ b/pidgin/gtkutils.c Wed Apr 25 01:12:47 2007 +0000 @@ -3070,7 +3070,6 @@ for (i = 1; i < height - 1; i++) { row = pixels + (i*rowstride); if (row[3] != 0xff || row[rowstride-1] != 0xff) { - printf("0: %d, last: %d\n", row[3], row[rowstride-1]); return FALSE; } }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/valgrind-suppressions Wed Apr 25 01:12:47 2007 +0000 @@ -0,0 +1,154 @@ +{ + X oddness 1 + Memcheck:Param + write(buf) + fun:__write_nocancel + fun:_X11TransWrite + obj:/usr/X11R6/lib/libX11.so.6.2 + fun:_XReply +} +{ + NSS + Memcheck:Cond + obj:/usr/lib/libsoftokn3.so + obj:/usr/lib/libsoftokn3.so + obj:/usr/lib/libsoftokn3.so + obj:/usr/lib/libsoftokn3.so +} +{ + X oddness 2 + Memcheck:Param + writev(vector[...]) + fun:writev + obj:/usr/X11R6/lib/libX11.so.6.2 + fun:_X11TransWritev + fun:_XSend +} +{ + X oddness 3 + Memcheck:Cond + fun:XcursorImageHash + fun:XcursorNoticePutBitmap + fun:_XNoticePutBitmap + fun:XPutImage +} +{ + X oddness 4 + Memcheck:Param + write(buf) + fun:__write_nocancel + fun:_X11TransWrite + obj:/usr/X11R6/lib/libX11.so.6.2 + fun:XFlush +} +{ + X oddness 5 + Memcheck:Param + write(buf) + fun:__write_nocancel + fun:_X11TransWrite + obj:/usr/X11R6/lib/libX11.so.6.2 + fun:XDrawLine +} +{ + X oddness 6 + Memcheck:Param + write(buf) + fun:__write_nocancel + fun:_X11TransWrite + obj:/usr/X11R6/lib/libX11.so.6.2 + fun:_XEventsQueued +} +{ + File selector + Memcheck:Value4 + fun:_itoa_word + fun:_IO_vfprintf_internal + fun:_IO_vsprintf_internal + fun:_IO_sprintf +} +{ + File selector 2 + Memcheck:Param + write(buf) + fun:__write_nocancel + fun:_X11TransWrite + obj:/usr/X11R6/lib/libX11.so.6.2 + fun:XRenderComposite +} +{ + TCL leak + Memcheck:Leak + fun:malloc + fun:TclpAlloc + fun:Tcl_Alloc + fun:Tcl_StaticPackage +} +{ + FontConfig Maybe + Memcheck:Leak + fun:malloc + fun:FcStrCopy + fun:FcStrSetAdd + fun:FcLangSetCopy +} +{ + File selector 3 + Memcheck:Param + write(buf) + fun:__write_nocancel + fun:_X11TransWrite + obj:/usr/X11R6/lib/libX11.so.6.2 + fun:_XFlushGCCache +} +{ + File selector 4 + Memcheck:Param + write(buf) + fun:__write_nocancel + fun:_X11TransWrite + obj:/usr/X11R6/lib/libX11.so.6.2 + fun:XCreateGC +} +{ + Something else + Memcheck:Param + write(buf) + fun:__write_nocancel + fun:_X11TransWrite + obj:/usr/X11R6/lib/libX11.so.6.2 + fun:_XSetClipRectangles +} +{ + New conversation windows + Memcheck:Cond + obj:/usr/lib/libgtk-x11-2.0.so.0.400.14 + obj:/usr/lib/libgtk-x11-2.0.so.0.400.14 + obj:/usr/lib/libgtk-x11-2.0.so.0.400.14 + obj:/usr/lib/libgtk-x11-2.0.so.0.400.14 +} +{ + New conversation windows 2 + Memcheck:Cond + obj:/usr/lib/libgtk-x11-2.0.so.0.400.14 + obj:/usr/lib/libgtk-x11-2.0.so.0.400.14 + obj:/usr/lib/libgtk-x11-2.0.so.0.400.14 + obj:/usr/lib/libgobject-2.0.so.0.400.8 +} +{ + NSS Init + Memcheck:Leak + fun:malloc + fun:PR_Malloc + fun:PR_CreateStack + fun:_PR_InitFdCache + fun:_PR_InitIO + fun:_PR_ImplicitInitialization + fun:PR_Init + fun:rsa_nss_init + fun:GE_plugin_load + fun:gaim_plugin_load + fun:gaim_plugins_load_saved + fun:main +} +