# HG changeset patch # User Gabriel Schulhof # Date 1191952911 0 # Node ID 488796f5ba33cca538188fba0d233c161f07eeb0 # Parent b84655373d7bc79a7c8d21c5127d1ba5ce1cdcf8# Parent a2b2fc59b57178c7e2971388df65cfdf1acc43bc propagate from branch 'im.pidgin.pidgin' (head 4d50bf3b08569aa2108a9f5da47fb1548d0c7dd9) to branch 'org.maemo.garage.pidgin.pidgin.dialog-transience' (head 2de97b7c8c13f4714a53d342a4dc68ecd8fc2248) diff -r b84655373d7b -r 488796f5ba33 doc/C-HOWTO.dox --- a/doc/C-HOWTO.dox Mon Oct 08 16:06:39 2007 +0000 +++ b/doc/C-HOWTO.dox Tue Oct 09 18:01:51 2007 +0000 @@ -269,3 +269,4 @@ you may have guessed, this also gets read when libpurple is probing your plugin. If this is missing, the plugin will not load. */ +// vim: syntax=c.doxygen diff -r b84655373d7b -r 488796f5ba33 doc/account-signals.dox --- a/doc/account-signals.dox Mon Oct 08 16:06:39 2007 +0000 +++ b/doc/account-signals.dox Tue Oct 09 18:01:51 2007 +0000 @@ -11,6 +11,8 @@ @signal account-status-changed @endsignals + @see account.h +
@signaldef account-added @@ -101,4 +103,4 @@ @endsignaldef */ -// vim: syntax=c tw=75 et +// vim: syntax=c.doxygen tw=75 et diff -r b84655373d7b -r 488796f5ba33 doc/blist-signals.dox --- a/doc/blist-signals.dox Mon Oct 08 16:06:39 2007 +0000 +++ b/doc/blist-signals.dox Tue Oct 09 18:01:51 2007 +0000 @@ -13,6 +13,8 @@ @signal blist-node-aliased @endsignals + @see blist.h +
@signaldef buddy-status-changed @@ -105,4 +107,4 @@ @endsignaldef */ -// vim: syntax=c tw=75 et +// vim: syntax=c.doxygen tw=75 et diff -r b84655373d7b -r 488796f5ba33 doc/certificate-signals.dox --- a/doc/certificate-signals.dox Mon Oct 08 16:06:39 2007 +0000 +++ b/doc/certificate-signals.dox Tue Oct 09 18:01:51 2007 +0000 @@ -5,6 +5,8 @@ @signal certificate-deleted @endsignals + @see certificate.h +
@signaldef certificate-stored @@ -28,4 +30,4 @@ @endsignaldef */ -// vim: syntax=c tw=75 et +// vim: syntax=c.doxygen tw=75 et diff -r b84655373d7b -r 488796f5ba33 doc/cipher-signals.dox --- a/doc/cipher-signals.dox Mon Oct 08 16:06:39 2007 +0000 +++ b/doc/cipher-signals.dox Tue Oct 09 18:01:51 2007 +0000 @@ -5,6 +5,8 @@ @signal cipher-removed @endsignals + @see cipher.h +
@signaldef cipher-added @@ -26,4 +28,4 @@ @endsignaldef */ -// vim: syntax=c tw=75 et +// vim: syntax=c.doxygen tw=75 et diff -r b84655373d7b -r 488796f5ba33 doc/connection-signals.dox --- a/doc/connection-signals.dox Mon Oct 08 16:06:39 2007 +0000 +++ b/doc/connection-signals.dox Tue Oct 09 18:01:51 2007 +0000 @@ -7,6 +7,8 @@ @signal signed-off @endsignals + @see connection.h +
@signaldef signing-on @@ -46,4 +48,4 @@ @endsignaldef */ -// vim: syntax=c tw=75 et +// vim: syntax=c.doxygen tw=75 et diff -r b84655373d7b -r 488796f5ba33 doc/conversation-signals.dox --- a/doc/conversation-signals.dox Mon Oct 08 16:06:39 2007 +0000 +++ b/doc/conversation-signals.dox Tue Oct 09 18:01:51 2007 +0000 @@ -32,6 +32,8 @@ @signal conversation-extended-menu @endsignals + @see conversation.h + @signaldef writing-im-msg @signalproto gboolean (*writing_im_msg)(PurpleAccount *account, const char *who, @@ -429,4 +431,4 @@ @param list A pointer to the list of actions. @endsignaldef */ -// vim: syntax=c tw=75 et +// vim: syntax=c.doxygen tw=75 et diff -r b84655373d7b -r 488796f5ba33 doc/core-signals.dox --- a/doc/core-signals.dox Mon Oct 08 16:06:39 2007 +0000 +++ b/doc/core-signals.dox Tue Oct 09 18:01:51 2007 +0000 @@ -4,6 +4,8 @@ @signal quitting @endsignals + @see core.h +
@signaldef quitting @@ -15,4 +17,4 @@ @endsignaldef */ -// vim: syntax=c tw=75 et +// vim: syntax=c.doxygen tw=75 et diff -r b84655373d7b -r 488796f5ba33 doc/dbus-server-signals.dox --- a/doc/dbus-server-signals.dox Mon Oct 08 16:06:39 2007 +0000 +++ b/doc/dbus-server-signals.dox Tue Oct 09 18:01:51 2007 +0000 @@ -5,6 +5,8 @@ @signal dbus-introspect @endsignals + @see dbus-server.h +
@signaldef dbus-method-called @@ -29,4 +31,4 @@ @endsignaldef */ -// vim: syntax=c tw=75 et +// vim: syntax=c.doxygen tw=75 et diff -r b84655373d7b -r 488796f5ba33 doc/gtkaccount-signals.dox --- a/doc/gtkaccount-signals.dox Mon Oct 08 16:06:39 2007 +0000 +++ b/doc/gtkaccount-signals.dox Tue Oct 09 18:01:51 2007 +0000 @@ -4,6 +4,8 @@ @signal account-modified @endsignals + @see gtkaccount.h +
@signaldef account-modified @@ -15,4 +17,4 @@ @param account The account that has been modified. @endsignaldef */ -// vim: syntax=c tw=75 et +// vim: syntax=c.doxygen tw=75 et diff -r b84655373d7b -r 488796f5ba33 doc/gtkblist-signals.dox --- a/doc/gtkblist-signals.dox Mon Oct 08 16:06:39 2007 +0000 +++ b/doc/gtkblist-signals.dox Tue Oct 09 18:01:51 2007 +0000 @@ -7,6 +7,8 @@ @signal drawing-tooltip @endsignals + @see gtkblist.h +
@signaldef gtkblist-hiding @@ -52,4 +54,4 @@ a compact tooltip for a non-priority buddy. @endsignaldef */ -// vim: syntax=c tw=75 et +// vim: syntax=c.doxygen tw=75 et diff -r b84655373d7b -r 488796f5ba33 doc/gtkconv-signals.dox --- a/doc/gtkconv-signals.dox Mon Oct 08 16:06:39 2007 +0000 +++ b/doc/gtkconv-signals.dox Tue Oct 09 18:01:51 2007 +0000 @@ -139,4 +139,4 @@ @endsignaldef */ -// vim: syntax=c tw=75 et +// vim: syntax=c.doxygen tw=75 et diff -r b84655373d7b -r 488796f5ba33 doc/gtkimhtml-signals.dox --- a/doc/gtkimhtml-signals.dox Mon Oct 08 16:06:39 2007 +0000 +++ b/doc/gtkimhtml-signals.dox Tue Oct 09 18:01:51 2007 +0000 @@ -8,6 +8,8 @@ @signal format_function_update @endsignals + @see gtkimhtml.h +
@signaldef url_clicked @@ -57,4 +59,4 @@ @param data User defined data. @endsignaldef */ -// vim: syntax=c tw=75 et +// vim: syntax=c.doxygen tw=75 et diff -r b84655373d7b -r 488796f5ba33 doc/gtklog-signals.dox --- a/doc/gtklog-signals.dox Mon Oct 08 16:06:39 2007 +0000 +++ b/doc/gtklog-signals.dox Tue Oct 09 18:01:51 2007 +0000 @@ -4,6 +4,8 @@ @signal log-displaying @endsignals + @see gtklog.h +
@signaldef log-displaying @@ -17,4 +19,4 @@ @endsignaldef */ -// vim: syntax=c tw=75 et +// vim: syntax=c.doxygen tw=75 et diff -r b84655373d7b -r 488796f5ba33 doc/imgstore-signals.dox --- a/doc/imgstore-signals.dox Mon Oct 08 16:06:39 2007 +0000 +++ b/doc/imgstore-signals.dox Tue Oct 09 18:01:51 2007 +0000 @@ -4,6 +4,8 @@ @signal image-deleting @endsignals + @see imgstore.h +
@signaldef image-deleting @@ -11,7 +13,7 @@ char *(*image_deleting)(const PurpleStoredImage *img); @endsignalproto @signaldesc - Emitted when a PurpleStoredImage is about to be destroyed. This allows + Emitted when a #PurpleStoredImage is about to be destroyed. This allows for what amounts to weak references. Code can hold onto a pointer to the PurpleStoredImage without actually "holding" a reference. They can then use a signal handler to let them know when their img is about to @@ -21,4 +23,4 @@ @endsignaldef */ -// vim: syntax=c tw=75 et +// vim: syntax=c.doxygen tw=75 et diff -r b84655373d7b -r 488796f5ba33 doc/log-signals.dox --- a/doc/log-signals.dox Mon Oct 08 16:06:39 2007 +0000 +++ b/doc/log-signals.dox Tue Oct 09 18:01:51 2007 +0000 @@ -4,6 +4,8 @@ @signal log-timestamp @endsignals + @see log.h +
@signaldef log-timestamp @@ -21,4 +23,4 @@ @endsignaldef */ -// vim: syntax=c tw=75 et +// vim: syntax=c.doxygen tw=75 et diff -r b84655373d7b -r 488796f5ba33 doc/notify-signals.dox --- a/doc/notify-signals.dox Mon Oct 08 16:06:39 2007 +0000 +++ b/doc/notify-signals.dox Tue Oct 09 18:01:51 2007 +0000 @@ -6,6 +6,8 @@ @signal displaying-emails-notification @endsignals + @see notify.h + @signaldef displaying-userinfo @signalproto void (*displaying_userinfo)(PurpleAccount *account, const char *who, PurpleNotifyUserInfo *user_info); @@ -53,4 +55,4 @@ @endsignaldef */ -// vim: syntax=c tw=75 et +// vim: syntax=c.doxygen tw=75 et diff -r b84655373d7b -r 488796f5ba33 doc/plugin-ids.dox --- a/doc/plugin-ids.dox Mon Oct 08 16:06:39 2007 +0000 +++ b/doc/plugin-ids.dox Tue Oct 09 18:01:51 2007 +0000 @@ -2,10 +2,10 @@ @section Introduction Every plugin contains a unique identifier to prevent duplicate plugin - loading and conflicts. This, which will be called a plugin ID from here - on, must follow a specific format. This format categorizes a plugin and - makes duplicate IDs unlikely. - + loading and conflicts. Third-party plugins (that is, plugins written by + anyone who is not a libpurple, Pidgin, or Finch developer) are expected + to use a plugin ID that follows a specific format. This format + categorizes plugins and makes duplicate IDs highly unlikely. @section Format The basic format of a plugin ID is as follows: @@ -15,27 +15,79 @@ The @em type indicator specifies the type of plugin. This must be one of the following: - - core - Core plugin, capable of being loaded in any program using - libpurple. It must not use any UI-specific code. - - prpl - Protocol plugin, providing additional protocols to - connect to. - - lopl - Loader plugin, which loads scripts as plugins (like Perl - or TCL). - - gtk - GTK+ 2.x plugin. It may use GTK+ code, but cannot use any - window toolkit code (such as X11 or Win32). - - gtk-x11 - GTK+ 2.x plugin using X11 code. - - gtk-win32 - GTK+ 2.x plugin using Win32 code. - - qpe - Gaim for Qtopia plugin. + - core - A core libpurple plugin, capable of being loaded in any + program using libpurple. Core plugins may not contain any + UI-specific code. + - prpl - A protocol plugin. This is a special type of core plugin, + which provides libpurple the ability to connect to + another IM or chat network. + - lopl - A loader plugin, which loads scripts as plugins. Perl and + Tcl plugins are made possible by loader plugins. + - gtk - A GTK+ 2.x (a.k.a. Pidgin) plugin. These plugins may use + GTK+ code, but may not use window toolkit code, such as + X11, Win32, Cocoa, or Carbon. + - gtk-x11 - A GTK+ 2.x plugin that uses X11 code. These plugins may + use both GTK+ code and X11 code, allowing to hook into + features specific to X11. + - gtk-win32 - A GTK+ plugin that uses Win32 code. These plugins may use + both GTK+ code and Win32 code, allowing to hook into + features available on Windows. + - gnt - A GNT (a.k.a. Finch) plugin. These plugins may use GNT code. + - qpe - A plugin for the (now-abandoned) Qutopia user interface. + + The @em username must be a unique identifier for you. It + @em should be your http://developer.pidgin.im Trac user ID. Failing that, you + could use your SourceForge user ID or your Freenode IRC nickname, if you + have either. The http://developer.pidgin.im Trac user ID is preferred. + Do @em not leave this field blank! + + The @em pluginname is the name of your plugin. It is usually all + lowercase letters and matches the static plugin ID (the first argument to + the PURPLE_INIT_PLUGIN() macro call), although it can be anything you + like. Do @em not include version information in the plugin ID--the + #PurplePluginInfo structure already has a field for this. + + @section nospaces One Last Rule for Plugin IDs + + The last rule of plugin IDs is the most important of all. Plugin IDs may + @em NOT contain spaces. If you need a space, use another hyphen (-). - The @em username must be a unique identifier for that person. It - @em should be your SourceForge ID. Do @em not leave this field - blank. + @section exceptions Exceptions to the Rule + + As with any rule there are exceptions. If you browse through the source + tree you will see that the plugins we distribute with the Pidgin source + do not contain a username field. This is because while one developer may + have written each specific plugin, the plugins are maintained + collectively by the entire development team. This lack of a username + field is also an indicator that the plugin is one of our plugins and not + a third-party plugin. + + Another exception to the rule is the Purple Plugin + Pack. All plugins whose lives started in the Purple Plugin Pack use + "plugin_pack" for the username field to indicate origination in + the Purple Plugin Pack. - The @em pluginname is the name of your plugin. It can be whatever you like, - though it's common to keep it all lowercase. Do not use spaces! If you - want a space, use a '-'. Please do not put a version indicator in the ID. - The PurplePlugin structure already has a field for this. + These two exceptions are mentioned here for completeness. We don't + encourage breaking the conventions set forth by the rules outlined above. + + @section examples Examples of Well-Chosen Plugin IDs + + The following is a list of well-chosen Plugin IDs listing a few good examples. + - "gtk-amc_grim-guifications" - This is the plugin ID for the + Guifications 2.x plugin. + - "gtk-rlaager-album" - This is the plugin ID for the Album + plugin, which is now part of the + Purple Plugin Pack. Its ID follows the + rules because its life started prior + to its inclusion in the Plugin Pack. + - "core-rlaager-irchelper" - This is the plugin ID for the IRC + Helper plugin, which is now part + of the Purple Plugin Pack. Its ID + follows the rules because its + life started prior to its + inclusion in the Plugin Pack. @section plugin-db Plugin Database Although it doesn't exist yet, in time there will be a plugin database @@ -45,4 +97,4 @@ */ -// vim: syntax=c tw=75 et +// vim: syntax=c.doxygen tw=75 et diff -r b84655373d7b -r 488796f5ba33 doc/plugin-signals.dox --- a/doc/plugin-signals.dox Mon Oct 08 16:06:39 2007 +0000 +++ b/doc/plugin-signals.dox Tue Oct 09 18:01:51 2007 +0000 @@ -5,6 +5,8 @@ @signal plugin-unload @endsignals + @see plugin.h +
@signaldef plugin-load @@ -26,4 +28,4 @@ @endsignaldef */ -// vim: syntax=c tw=75 et +// vim: syntax=c.doxygen tw=75 et diff -r b84655373d7b -r 488796f5ba33 doc/savedstatus-signals.dox --- a/doc/savedstatus-signals.dox Mon Oct 08 16:06:39 2007 +0000 +++ b/doc/savedstatus-signals.dox Tue Oct 09 18:01:51 2007 +0000 @@ -4,6 +4,8 @@ @signal savedstatus-changed @endsignals + @see savedstatus.h +
@signaldef savedstatus-changed @@ -15,4 +17,4 @@ @endsignaldef */ -// vim: syntax=c tw=75 et +// vim: syntax=c.doxygen tw=75 et diff -r b84655373d7b -r 488796f5ba33 doc/sound-signals.dox --- a/doc/sound-signals.dox Mon Oct 08 16:06:39 2007 +0000 +++ b/doc/sound-signals.dox Tue Oct 09 18:01:51 2007 +0000 @@ -4,6 +4,8 @@ @signal playing-sound-event @endsignals + @see sound.h +
@signaldef playing-sound-event @@ -18,4 +20,4 @@ @endsignaldef */ -// vim: syntax=c tw=75 et +// vim: syntax=c.doxygen tw=75 et diff -r b84655373d7b -r 488796f5ba33 doc/xfer-signals.dox --- a/doc/xfer-signals.dox Mon Oct 08 16:06:39 2007 +0000 +++ b/doc/xfer-signals.dox Tue Oct 09 18:01:51 2007 +0000 @@ -12,6 +12,8 @@ @signal file-send-complete @endsignals + @see ft.h +
@signaldef file-recv-accept @@ -109,4 +111,4 @@ @endsignaldef */ -// vim: syntax=c tw=75 et +// vim: syntax=c.doxygen tw=75 et diff -r b84655373d7b -r 488796f5ba33 libpurple/plugins/ssl/ssl-nss.c --- a/libpurple/plugins/ssl/ssl-nss.c Mon Oct 08 16:06:39 2007 +0000 +++ b/libpurple/plugins/ssl/ssl-nss.c Tue Oct 09 18:01:51 2007 +0000 @@ -386,6 +386,7 @@ static GList * ssl_nss_peer_certs(PurpleSslConnection *gsc) { +#if 0 PurpleSslNssData *nss_data = PURPLE_SSL_NSS_DATA(gsc); CERTCertificate *cert; /* @@ -397,6 +398,10 @@ /* TODO: this is a blind guess */ cert = SSL_PeerCertificate(nss_data->fd); + if (cert) + CERT_DestroyCertificate(cert); +#endif + return NULL; @@ -430,11 +435,12 @@ filename); /* Load the raw data up */ - g_return_val_if_fail( - g_file_get_contents(filename, - &rawcert, &len, - NULL ), - NULL); + if (!g_file_get_contents(filename, + &rawcert, &len, + NULL)) { + purple_debug_error("nss/x509", "Unable to read certificate file.\n"); + return NULL; + } /* Decode the certificate */ crt_dat = CERT_DecodeCertFromPackage(rawcert, len); diff -r b84655373d7b -r 488796f5ba33 libpurple/protocols/bonjour/bonjour.c --- a/libpurple/protocols/bonjour/bonjour.c Mon Oct 08 16:06:39 2007 +0000 +++ b/libpurple/protocols/bonjour/bonjour.c Tue Oct 09 18:01:51 2007 +0000 @@ -188,6 +188,8 @@ if (bonjour_group != NULL) purple_blist_remove_group(bonjour_group); + g_free(bd); + connection->proto_data = NULL; } static const char * @@ -581,7 +583,7 @@ fullname = g_utf16_to_utf8(username, -1, NULL, NULL, NULL); } - g_idle_add(_set_default_name_cb, fullname); + purple_timeout_add(0, _set_default_name_cb, fullname); return NULL; } diff -r b84655373d7b -r 488796f5ba33 libpurple/protocols/bonjour/parser.c --- a/libpurple/protocols/bonjour/parser.c Mon Oct 08 16:06:39 2007 +0000 +++ b/libpurple/protocols/bonjour/parser.c Tue Oct 09 18:01:51 2007 +0000 @@ -101,7 +101,7 @@ if(!xmlStrcmp(element_name, (xmlChar*) "stream")) { /* Asynchronously close the conversation to prevent bonjour_parser_setup() * being called from within this context */ - g_idle_add(_async_bonjour_jabber_stream_ended_cb, pb); + purple_timeout_add(0, _async_bonjour_jabber_stream_ended_cb, pb); } return; } diff -r b84655373d7b -r 488796f5ba33 libpurple/protocols/jabber/roster.c --- a/libpurple/protocols/jabber/roster.c Mon Oct 08 16:06:39 2007 +0000 +++ b/libpurple/protocols/jabber/roster.c Tue Oct 09 18:01:51 2007 +0000 @@ -67,8 +67,10 @@ if(!groups) { if(!buddies) g2 = g_slist_append(g2, g_strdup(_("Buddies"))); - else + else { + g_slist_free(buddies); return; + } } my_bare_jid = g_strdup_printf("%s@%s", js->user->node, js->user->domain); @@ -229,6 +231,11 @@ remove_purple_buddies(js, jid); } else { GSList *groups = NULL; + + if (js->server_caps & JABBER_CAP_GOOGLE_ROSTER) + if (!jabber_google_roster_incoming(js, item)) + continue; + for(group = xmlnode_get_child(item, "group"); group; group = xmlnode_get_next_twin(group)) { char *group_name; @@ -237,10 +244,9 @@ if (g_slist_find_custom(groups, group_name, (GCompareFunc)purple_utf8_strcasecmp) == NULL) groups = g_slist_append(groups, group_name); + else + g_free(group_name); } - if (js->server_caps & JABBER_CAP_GOOGLE_ROSTER) - if (!jabber_google_roster_incoming(js, item)) - continue; add_purple_buddies_to_groups(js, jid, name, groups); } } @@ -263,6 +269,9 @@ JabberIq *iq; xmlnode *query, *item, *group; + if(!(b = purple_find_buddy(js->gc->account, name))) + return; + if(grps) { groups = grps; } else { @@ -277,9 +286,6 @@ } } - if(!(b = purple_find_buddy(js->gc->account, name))) - return; - iq = jabber_iq_new_query(js, JABBER_IQ_SET, "jabber:iq:roster"); query = xmlnode_get_child(iq->node, "query"); diff -r b84655373d7b -r 488796f5ba33 libpurple/protocols/msn/notification.c --- a/libpurple/protocols/msn/notification.c Mon Oct 08 16:06:39 2007 +0000 +++ b/libpurple/protocols/msn/notification.c Tue Oct 09 18:01:51 2007 +0000 @@ -450,7 +450,7 @@ const char *passport; const char *content_type; - purple_debug_info("MSNP14","Process UBM payload:%s\n",payload); + purple_debug_info("MSNP14","Process UBM payload:%.*s\n", len, payload); msg = msn_message_new_from_cmd(cmdproc->session, cmd); msn_message_parse_payload(msg, payload, len,MSG_LINE_DEM,MSG_BODY_DEM); @@ -533,7 +533,7 @@ }else{ g_return_if_fail(cmd->payload_cb != NULL); - purple_debug_info("MSNP14","UBM payload:{%s}\n",cmd->payload); + purple_debug_info("MSNP14","UBM payload:{%.*s}\n", cmd->payload_len, cmd->payload); ubm_cmd_post(cmdproc, cmd, cmd->payload, cmd->payload_len); } } diff -r b84655373d7b -r 488796f5ba33 libpurple/protocols/msn/soap.c --- a/libpurple/protocols/msn/soap.c Mon Oct 08 16:06:39 2007 +0000 +++ b/libpurple/protocols/msn/soap.c Tue Oct 09 18:01:51 2007 +0000 @@ -131,6 +131,7 @@ MsnSoapSslErrorCbFunction error_cb) { purple_debug_misc("MSN SOAP","Initializing SOAP connection\n"); + g_free(soapconn->login_host); soapconn->login_host = g_strdup(host); soapconn->ssl_conn = ssl; soapconn->connect_cb = connect_cb; @@ -204,11 +205,9 @@ void msn_soap_destroy(MsnSoapConn *soapconn) { - if(soapconn->login_host) - g_free(soapconn->login_host); + g_free(soapconn->login_host); - if(soapconn->login_path) - g_free(soapconn->login_path); + g_free(soapconn->login_path); /*remove the write handler*/ if (soapconn->output_handler > 0){ diff -r b84655373d7b -r 488796f5ba33 libpurple/protocols/oscar/oscar.c --- a/libpurple/protocols/oscar/oscar.c Mon Oct 08 16:06:39 2007 +0000 +++ b/libpurple/protocols/oscar/oscar.c Tue Oct 09 18:01:51 2007 +0000 @@ -1721,7 +1721,6 @@ { PurpleConnection *gc; PurpleAccount *account; - PurplePresence *presence; struct buddyinfo *bi; time_t time_idle = 0, signon = 0; int type = 0; @@ -1734,7 +1733,6 @@ gc = od->gc; account = purple_connection_get_account(gc); - presence = purple_account_get_presence(account); va_start(ap, fr); info = va_arg(ap, aim_userinfo_t *); diff -r b84655373d7b -r 488796f5ba33 libpurple/tests/test_cipher.c --- a/libpurple/tests/test_cipher.c Mon Oct 08 16:06:39 2007 +0000 +++ b/libpurple/tests/test_cipher.c Tue Oct 09 18:01:51 2007 +0000 @@ -8,7 +8,6 @@ #include "tests.h" #include "../cipher.h" -#include "../signal.h" /****************************************************************************** * MD4 Tests diff -r b84655373d7b -r 488796f5ba33 pidgin/gtkblist.c --- a/pidgin/gtkblist.c Mon Oct 08 16:06:39 2007 +0000 +++ b/pidgin/gtkblist.c Tue Oct 09 18:01:51 2007 +0000 @@ -4347,7 +4347,6 @@ gpointer user_data) { PurpleAccount *account; - PurpleStatusType *status_type; gchar *escaped, *text; GtkWidget *button, *label, *image, *hbox; GdkPixbuf *pixbuf; @@ -4362,8 +4361,8 @@ hbox = gtk_hbox_new(FALSE, 6); /* Create the icon */ - if ((status_type = purple_account_get_status_type_with_primitive(account, - PURPLE_STATUS_OFFLINE))) { + if (purple_account_get_status_type_with_primitive(account, + PURPLE_STATUS_OFFLINE) != NULL) { pixbuf = pidgin_create_prpl_icon(account, PIDGIN_PRPL_ICON_SMALL); if (pixbuf != NULL) { image = gtk_image_new_from_pixbuf(pixbuf); @@ -5367,7 +5366,7 @@ BUDDY_ICON_COLUMN, avatar, BUDDY_ICON_VISIBLE_COLUMN, biglist, EMBLEM_COLUMN, emblem, - EMBLEM_VISIBLE_COLUMN, emblem, + EMBLEM_VISIBLE_COLUMN, (emblem != NULL), PROTOCOL_ICON_COLUMN, pidgin_create_prpl_icon(buddy->account, PIDGIN_PRPL_ICON_SMALL), PROTOCOL_ICON_VISIBLE_COLUMN, purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_protocol_icons"), BGCOLOR_COLUMN, NULL, @@ -5378,6 +5377,8 @@ g_free(mark); g_free(idle); + if(emblem) + g_object_unref(emblem); if(status) g_object_unref(status); if(avatar) @@ -5549,6 +5550,8 @@ -1); g_free(mark); + if(emblem) + g_object_unref(emblem); if(status) g_object_unref(status); if(avatar) diff -r b84655373d7b -r 488796f5ba33 pidgin/gtkconv.c --- a/pidgin/gtkconv.c Mon Oct 08 16:06:39 2007 +0000 +++ b/pidgin/gtkconv.c Tue Oct 09 18:01:51 2007 +0000 @@ -2498,11 +2498,16 @@ gtk_list_store_set(GTK_LIST_STORE(gtkconv->infopane_model), &(gtkconv->infopane_iter), CONV_EMBLEM_COLUMN, emblem, -1); + if (emblem) + g_object_unref(emblem); if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_protocol_icons")) { + emblem = pidgin_create_prpl_icon(gtkconv->active_conv->account, PIDGIN_PRPL_ICON_SMALL); gtk_list_store_set(GTK_LIST_STORE(gtkconv->infopane_model), &(gtkconv->infopane_iter), - CONV_PROTOCOL_ICON_COLUMN, pidgin_create_prpl_icon(gtkconv->active_conv->account, PIDGIN_PRPL_ICON_SMALL), -1); + CONV_PROTOCOL_ICON_COLUMN, emblem, -1); + if (emblem) + g_object_unref(emblem); } /* XXX seanegan Why do I have to do this? */ @@ -4358,45 +4363,54 @@ gtk_menu_shell_insert(GTK_MENU_SHELL(menu), menuitem, 1); } - static void resize_imhtml_cb(PidginConversation *gtkconv) { GtkTextBuffer *buffer; GtkTextIter iter; - int wrapped_lines; - int lines; - GdkRectangle oneline; + int wrapped_lines; + int lines; + GdkRectangle oneline; GtkRequisition sr; - int height; - int pad_top, pad_inside, pad_bottom; + int height, diff; + int pad_top, pad_inside, pad_bottom; buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtkconv->entry)); - wrapped_lines = 1; - gtk_text_buffer_get_start_iter(buffer, &iter); - gtk_text_view_get_iter_location(GTK_TEXT_VIEW(gtkconv->entry), &iter, &oneline); - while (gtk_text_view_forward_display_line(GTK_TEXT_VIEW(gtkconv->entry), &iter)) - wrapped_lines++; - - lines = gtk_text_buffer_get_line_count(buffer); - - /* Show a maximum of 4 lines */ - lines = MIN(lines, 4); - wrapped_lines = MIN(wrapped_lines, 4); - - pad_top = gtk_text_view_get_pixels_above_lines(GTK_TEXT_VIEW(gtkconv->entry)); - pad_bottom = gtk_text_view_get_pixels_below_lines(GTK_TEXT_VIEW(gtkconv->entry)); - pad_inside = gtk_text_view_get_pixels_inside_wrap(GTK_TEXT_VIEW(gtkconv->entry)); - - height = (oneline.height + pad_top + pad_bottom) * lines; - height += (oneline.height + pad_inside) * (wrapped_lines - lines); + wrapped_lines = 1; + gtk_text_buffer_get_start_iter(buffer, &iter); + gtk_text_view_get_iter_location(GTK_TEXT_VIEW(gtkconv->entry), &iter, &oneline); + while (gtk_text_view_forward_display_line(GTK_TEXT_VIEW(gtkconv->entry), &iter)) + wrapped_lines++; + + lines = gtk_text_buffer_get_line_count(buffer); + + /* Show a maximum of 4 lines */ + lines = MIN(lines, 4); + wrapped_lines = MIN(wrapped_lines, 4); + + pad_top = gtk_text_view_get_pixels_above_lines(GTK_TEXT_VIEW(gtkconv->entry)); + pad_bottom = gtk_text_view_get_pixels_below_lines(GTK_TEXT_VIEW(gtkconv->entry)); + pad_inside = gtk_text_view_get_pixels_inside_wrap(GTK_TEXT_VIEW(gtkconv->entry)); + + height = (oneline.height + pad_top + pad_bottom) * lines; + height += (oneline.height + pad_inside) * (wrapped_lines - lines); gtkconv->auto_resize = TRUE; - g_idle_add(reset_auto_resize_cb, gtkconv); - gtk_widget_size_request(gtkconv->lower_hbox, &sr); - if (sr.height < height + PIDGIN_HIG_BOX_SPACE) { + g_idle_add(reset_auto_resize_cb, gtkconv); + + diff = height - gtkconv->entry->allocation.height; + + if (diff > 0) { + gtk_widget_size_request(gtkconv->lower_hbox, &sr); gtkconv->entry_growing = TRUE; - gtk_widget_set_size_request(gtkconv->lower_hbox, -1, height + PIDGIN_HIG_BOX_SPACE); + + /* uncomment this to auto resize even after the user manually + resizes + gtk_paned_set_position(GTK_PANED(gtkconv->lower_hbox->parent->parent), + -1); + */ + gtk_widget_set_size_request(gtkconv->lower_hbox, -1, + diff + gtkconv->lower_hbox->allocation.height); } } @@ -4728,7 +4742,6 @@ g_object_set(rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL); #endif - rend = gtk_cell_renderer_pixbuf_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(gtkconv->infopane), rend, FALSE); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(gtkconv->infopane), rend, "pixbuf", CONV_PROTOCOL_ICON_COLUMN, NULL); diff -r b84655373d7b -r 488796f5ba33 pidgin/win32/winpidgin.c --- a/pidgin/win32/winpidgin.c Mon Oct 08 16:06:39 2007 +0000 +++ b/pidgin/win32/winpidgin.c Tue Oct 09 18:01:51 2007 +0000 @@ -545,7 +545,7 @@ if (strstr(lpszCmdLine, "-d") || strstr(lpszCmdLine, "-h") || strstr(lpszCmdLine, "-v")) { /* If stdout hasn't been redirected to a file, alloc a console * (_istty() doesn't work for stuff using the GUI subsystem) */ - if (_fileno(stdout) == -1) { + if (_fileno(stdout) == -1 || _fileno(stdout) == -2) { LPFNATTACHCONSOLE MyAttachConsole = NULL; if ((hmod = GetModuleHandle("kernel32.dll"))) { MyAttachConsole =