Mercurial > pidgin
changeset 20086:2a4550082d66
merge of '5eb5c567b85fa0c57d69ad649e737c11b45b70ec'
and 'e82cd09b229587cf4165466490fa52898aedfb82'
author | Evan Schoenberg <evan.s@dreskin.net> |
---|---|
date | Sun, 16 Sep 2007 05:31:33 +0000 |
parents | de39f3855e8f (diff) d4bb8b85ab2e (current diff) |
children | 94874ffc3760 c43f96170910 |
files | libpurple/protocols/jabber/.todo libpurple/protocols/msn/msn.c libpurple/protocols/oscar/.todo |
diffstat | 198 files changed, 1497 insertions(+), 780 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Sun Sep 16 05:30:13 2007 +0000 +++ b/ChangeLog Sun Sep 16 05:31:33 2007 +0000 @@ -1,5 +1,19 @@ Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul +Version 2.2.1: + http://developer.pidgin.im/query?status=closed&milestone=2.2.1 + + Pidgin: + * When aliasing someone to an alias that already exists in the + same group, offer to merge the buddies into the same contact + * It's possible to keep a conversation (chat/IM) open even after closing + the conversation window/tab. + * A music emblem is displayed in the buddy list for a buddy if we know she + is listening to some soothing music. + * 'Move to' menu in buddy list context menu for moving buddies to + other groups + * Move "Smiley" to the top-level of the toolbar + Version 2.2.0 (09/13/2007): http://developer.pidgin.im/query?status=closed&milestone=2.2.0
--- a/configure.ac Sun Sep 16 05:30:13 2007 +0000 +++ b/configure.ac Sun Sep 16 05:31:33 2007 +0000 @@ -46,8 +46,8 @@ m4_define([purple_lt_current], [2]) m4_define([purple_major_version], [2]) m4_define([purple_minor_version], [2]) -m4_define([purple_micro_version], [0]) -m4_define([purple_version_suffix], []) +m4_define([purple_micro_version], [1]) +m4_define([purple_version_suffix], [devel]) 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])) @@ -55,8 +55,8 @@ m4_define([gnt_lt_current], [2]) m4_define([gnt_major_version], [2]) m4_define([gnt_minor_version], [2]) -m4_define([gnt_micro_version], [0]) -m4_define([gnt_version_suffix], []) +m4_define([gnt_micro_version], [1]) +m4_define([gnt_version_suffix], [devel]) 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])) @@ -352,13 +352,19 @@ dnl ####################################################################### if test "x$with_x" = "xyes" ; then PKG_CHECK_MODULES(X11, x11, - [AC_DEFINE(HAVE_X, 1, [Define to 1 if you have X11])], + [AC_DEFINE(HAVE_X11, 1, [Define to 1 if you have X11])], [AC_MSG_RESULT(no) - with_x=no]) + if test "x$x_incpath_add" != "x" -a "x$x_libpath_add" != "x"; then + X11_LIBS="$x_libpath_add" + X11_CFLAGS="$x_incpath_add" + else + with_x=no + fi + ]) AC_SUBST(X11_LIBS) AC_SUBST(X11_CFLAGS) fi - + dnl ####################################################################### dnl # Check for XScreenSaver dnl #######################################################################
--- a/finch/finch.h Sun Sep 16 05:30:13 2007 +0000 +++ b/finch/finch.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,7 +1,8 @@ /** * @defgroup finch Finch (GNT User Interface) - * - * finch + */ + +/* finch * * Finch is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/finch/gntaccount.c Sun Sep 16 05:30:13 2007 +0000 +++ b/finch/gntaccount.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gntaccount.c GNT Account API * @ingroup finch - * - * finch + */ + +/* finch * * Finch is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/finch/gntaccount.h Sun Sep 16 05:30:13 2007 +0000 +++ b/finch/gntaccount.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gntaccount.h GNT Account API * @ingroup finch - * - * finch + */ + +/* finch * * Finch is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/finch/gntblist.c Sun Sep 16 05:30:13 2007 +0000 +++ b/finch/gntblist.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gntblist.c GNT BuddyList API * @ingroup finch - * - * finch + */ + +/* finch * * Finch is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/finch/gntblist.h Sun Sep 16 05:30:13 2007 +0000 +++ b/finch/gntblist.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gntblist.h GNT BuddyList API * @ingroup finch - * - * finch + */ + +/* finch * * Finch is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/finch/gntcertmgr.c Sun Sep 16 05:30:13 2007 +0000 +++ b/finch/gntcertmgr.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gntcertmgr.c GNT Certificate Manager API * @ingroup finch - * - * finch + */ + +/* finch * * Finch is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/finch/gntcertmgr.h Sun Sep 16 05:30:13 2007 +0000 +++ b/finch/gntcertmgr.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gntcertmgr.h GNT Certificate Manager API * @ingroup finch - * - * finch + */ + +/* finch * * Finch is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/finch/gntconn.c Sun Sep 16 05:30:13 2007 +0000 +++ b/finch/gntconn.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gntconn.c GNT Connection API * @ingroup finch - * - * finch + */ + +/* finch * * Finch is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this @@ -104,10 +105,11 @@ { FinchAutoRecon *info; PurpleAccount *account = purple_connection_get_account(gc); - - info = g_hash_table_lookup(hash, account); + GList *list; if (!gc->wants_to_die) { + info = g_hash_table_lookup(hash, account); + if (info == NULL) { info = g_new0(FinchAutoRecon, 1); g_hash_table_insert(hash, account, info); @@ -140,6 +142,17 @@ g_free(secondary); purple_account_set_enabled(account, FINCH_UI, FALSE); } + + /* If we have any open chats, we probably want to rejoin when we get back online. */ + list = purple_get_chats(); + while (list) { + PurpleConversation *conv = list->data; + list = list->next; + if (conv->account != account || + purple_conv_chat_has_left(PURPLE_CONV_CHAT(conv))) + continue; + purple_conversation_set_data(conv, "want-to-rejoin", GINT_TO_POINTER(TRUE)); + } } static void
--- a/finch/gntconn.h Sun Sep 16 05:30:13 2007 +0000 +++ b/finch/gntconn.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gntconn.h GNT Connection API * @ingroup finch - * - * finch + */ + +/* finch * * Finch is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/finch/gntconv.c Sun Sep 16 05:30:13 2007 +0000 +++ b/finch/gntconv.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gntconv.c GNT Conversation API * @ingroup finch - * - * finch + */ + +/* finch * * Finch is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this @@ -310,13 +311,41 @@ static void account_signed_on_off(PurpleConnection *gc, gpointer null) { - GList *ims = purple_get_ims(); - while (ims) { - PurpleConversation *conv = ims->data; + GList *list = purple_get_ims(); + while (list) { + PurpleConversation *conv = list->data; PurpleConversation *cc = find_conv_with_contact(conv->account, conv->name); if (cc) generate_send_to_menu(cc->ui_data); - ims = ims->next; + list = list->next; + } + + if (PURPLE_CONNECTION_IS_CONNECTED(gc)) { + /* We just signed on. Let's see if there's any chat that we have open, + * and hadn't left before the disconnect. */ + list = purple_get_chats(); + while (list) { + PurpleConversation *conv = list->data; + gboolean del = FALSE; + PurpleChat *chat; + + list = list->next; + if (conv->account != gc->account || + !purple_conversation_get_data(conv, "want-to-rejoin")) + continue; + + chat = purple_blist_find_chat(conv->account, conv->name); + if (chat == NULL) { + GHashTable *hash = NULL; + if (PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info_defaults != NULL) + hash = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info_defaults(gc, conv->name); + chat = purple_chat_new(gc->account, conv->name, hash); + del = TRUE; + } + serv_join_chat(gc, chat->components); + if (del) + purple_blist_remove_chat(chat); + } } }
--- a/finch/gntconv.h Sun Sep 16 05:30:13 2007 +0000 +++ b/finch/gntconv.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gntconv.h GNT Conversation API * @ingroup finch - * - * finch + */ + +/* finch * * Finch is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/finch/gntdebug.c Sun Sep 16 05:30:13 2007 +0000 +++ b/finch/gntdebug.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gntdebug.c GNT Debug API * @ingroup finch - * - * finch + */ + +/* finch * * Finch is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/finch/gntdebug.h Sun Sep 16 05:30:13 2007 +0000 +++ b/finch/gntdebug.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gntdebug.h GNT Debug API * @ingroup finch - * - * finch + */ + +/* finch * * Finch is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/finch/gntft.c Sun Sep 16 05:30:13 2007 +0000 +++ b/finch/gntft.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gntft.c GNT File Transfer UI * @ingroup finch - * - * finch + */ + +/* finch * * Finch is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/finch/gntft.h Sun Sep 16 05:30:13 2007 +0000 +++ b/finch/gntft.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gntft.h GNT File Transfer UI * @ingroup finch - * - * finch + */ + +/* finch * * Finch is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/finch/gntidle.h Sun Sep 16 05:30:13 2007 +0000 +++ b/finch/gntidle.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gntidle.h GNT Idle API * @ingroup finch - * - * finch + */ + +/* finch * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/finch/gntnotify.c Sun Sep 16 05:30:13 2007 +0000 +++ b/finch/gntnotify.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gntnotify.c GNT Notify API * @ingroup finch - * - * finch + */ + +/* finch * * Finch is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/finch/gntnotify.h Sun Sep 16 05:30:13 2007 +0000 +++ b/finch/gntnotify.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gntnotify.h GNT Notify API * @ingroup finch - * - * finch + */ + +/* finch * * Finch is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/finch/gntplugin.c Sun Sep 16 05:30:13 2007 +0000 +++ b/finch/gntplugin.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gntplugin.c GNT Plugins API * @ingroup finch - * - * finch + */ + +/* finch * * Finch is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/finch/gntplugin.h Sun Sep 16 05:30:13 2007 +0000 +++ b/finch/gntplugin.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gntplugin.h GNT Plugins API * @ingroup finch - * - * finch + */ + +/* finch * * Finch is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/finch/gntpounce.c Sun Sep 16 05:30:13 2007 +0000 +++ b/finch/gntpounce.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gntpounce.c GNT Buddy Pounce API * @ingroup finch - * - * finch + */ + +/* finch * * Finch is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/finch/gntpounce.h Sun Sep 16 05:30:13 2007 +0000 +++ b/finch/gntpounce.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gntpounce.h GNT Buddy Pounce API * @ingroup finch - * - * finch + */ + +/* finch * * Finch is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/finch/gntprefs.c Sun Sep 16 05:30:13 2007 +0000 +++ b/finch/gntprefs.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gntprefs.c GNT Preferences API * @ingroup finch - * - * finch + */ + +/* finch * * Finch is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/finch/gntprefs.h Sun Sep 16 05:30:13 2007 +0000 +++ b/finch/gntprefs.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gntprefs.h GNT Preferences API * @ingroup finch - * - * finch + */ + +/* finch * * Finch is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/finch/gntrequest.c Sun Sep 16 05:30:13 2007 +0000 +++ b/finch/gntrequest.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gntrequest.c GNT Request API * @ingroup finch - * - * finch + */ + +/* finch * * Finch is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/finch/gntrequest.h Sun Sep 16 05:30:13 2007 +0000 +++ b/finch/gntrequest.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gntrequest.h GNT Request API * @ingroup finch - * - * finch + */ + +/* finch * * Finch is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/finch/gntsound.c Sun Sep 16 05:30:13 2007 +0000 +++ b/finch/gntsound.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gntsound.c GNT Sound API * @ingroup finch - * - * finch + */ + +/* finch * * Finch is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/finch/gntsound.h Sun Sep 16 05:30:13 2007 +0000 +++ b/finch/gntsound.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gntsound.h GNT Sound API * @ingroup finch - * - * finch + */ + +/* finch * * Finch is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/finch/gntstatus.c Sun Sep 16 05:30:13 2007 +0000 +++ b/finch/gntstatus.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gntstatus.c GNT Status API * @ingroup finch - * - * finch + */ + +/* finch * * Finch is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/finch/gntstatus.h Sun Sep 16 05:30:13 2007 +0000 +++ b/finch/gntstatus.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gntstatus.h GNT Status API * @ingroup finch - * - * finch + */ + +/* finch * * Finch is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/account.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/account.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file account.c Account API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/account.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/account.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file account.h Account API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/accountopt.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/accountopt.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file accountopt.c Account Options API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/accountopt.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/accountopt.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file accountopt.h Account Options API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this @@ -49,8 +50,10 @@ } default_value; - gboolean masked; - + gboolean masked; /**< Whether the value entered should be + * obscured from view (for passwords and + * similar options) + */ } PurpleAccountOption; /** @@ -184,10 +187,12 @@ const char *value); /** - * Sets the masking for an account option. + * Sets the masking for an account option. Setting this to %TRUE acts + * as a hint to the UI that the option's value should be obscured from + * view, like a password. * * @param option The account option. - * @param masked The masking. + * @param masked The masking. */ void purple_account_option_set_masked(PurpleAccountOption *option, gboolean masked); @@ -282,11 +287,13 @@ const PurpleAccountOption *option); /** - * Returns the masking for an account option. + * Returns whether an option's value should be masked from view, like a + * password. If so, the UI might display each character of the option + * as a '*' (for example). * * @param option The account option. * - * @return The masking. + * @return %TRUE if the option's value should be obscured. */ gboolean purple_account_option_get_masked(const PurpleAccountOption *option);
--- a/libpurple/blist.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/blist.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file blist.h Buddy List API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/buddyicon.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/buddyicon.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file icon.c Buddy Icon API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/buddyicon.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/buddyicon.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file buddyicon.h Buddy Icon API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/cipher.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/cipher.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file cipher.h Purple Cipher API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/circbuffer.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/circbuffer.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /* * @file circbuffer.h Buffer Utility Functions * @ingroup core - * - * Purple is the legal property of its developers, whose names are too numerous + */ + +/* Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this * source distribution. *
--- a/libpurple/circbuffer.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/circbuffer.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ -/* +/** * @file circbuffer.h Buffer Utility Functions * @ingroup core - * - * Purple is the legal property of its developers, whose names are too numerous + */ + +/* Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this * source distribution. *
--- a/libpurple/cmds.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/cmds.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file cmds.c Commands API * @ingroup core - * - * Copyright (C) 2003-2004 Timothy Ringenbach <omarvo@hotmail.com + */ + +/* Copyright (C) 2003-2004 Timothy Ringenbach <omarvo@hotmail.com * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by
--- a/libpurple/cmds.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/cmds.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file cmds.h Commands API * @ingroup core - * - * Copyright (C) 2003 Timothy Ringenbach <omarvo@hotmail.com> + */ + +/* Copyright (C) 2003 Timothy Ringenbach <omarvo@hotmail.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by
--- a/libpurple/connection.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/connection.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file connection.c Connection API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/connection.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/connection.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file connection.h Connection API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/conversation.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/conversation.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file conversation.h Conversation API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/core.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/core.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file core.c Purple Core API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/core.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/core.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,7 +1,8 @@ /** * @defgroup core libpurple - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/dbus-bindings.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/dbus-bindings.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file dbus-bindings.h Purple DBUS Bindings * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/dbus-server.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/dbus-server.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file dbus-server.h Purple DBUS Server * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/debug.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/debug.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file debug.c Debug API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/debug.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/debug.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file debug.h Debug API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/desktopitem.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/desktopitem.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file purple-desktop-item.c Functions for managing .desktop files * @ingroup core - * - * Purple is the legal property of its developers, whose names are too numerous + */ + +/* Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this * source distribution. *
--- a/libpurple/desktopitem.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/desktopitem.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file desktopitem.h Functions for managing .desktop files * @ingroup core - * - * Purple is the legal property of its developers, whose names are too numerous + */ + +/* Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this * source distribution. *
--- a/libpurple/dnsquery.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/dnsquery.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file dnsquery.c DNS query API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/dnsquery.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/dnsquery.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file dnsquery.h DNS query API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/dnssrv.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/dnssrv.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,7 +1,8 @@ /** * @file dnssrv.c - * - * purple + */ + +/* purple * * Copyright (C) 2005 Thomas Butter <butter@uni-mannheim.de> *
--- a/libpurple/dnssrv.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/dnssrv.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,10 +1,11 @@ /** * @file dnssrv.h - * - * purple + */ + +/* purple * * Copyright (C) 2005, Thomas Butter <butter@uni-mannheim.de> - *i + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or
--- a/libpurple/eventloop.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/eventloop.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file eventloop.c Purple Event Loop API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/eventloop.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/eventloop.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file eventloop.h Purple Event Loop API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/ft.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/ft.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,7 +1,8 @@ /** * @file ft.c File Transfer API - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/ft.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/ft.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file ft.h File Transfer API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/gaim-compat.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/gaim-compat.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gaim-compat.h Gaim Compat macros * @ingroup core - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/idle.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/idle.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file idle.h Idle API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/imgstore.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/imgstore.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file imgstore.h IM Image Store API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/imgstore.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/imgstore.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file imgstore.h IM Image Store API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/internal.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/internal.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file internal.h Internal definitions and includes * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/log.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/log.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file log.c Logging API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/log.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/log.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file log.h Logging API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/nat-pmp.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/nat-pmp.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file nat-pmp.c NAT-PMP Implementation * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/nat-pmp.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/nat-pmp.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file nat-pmp.h NAT-PMP Implementation * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/network.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/network.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file network.c Network Implementation * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/network.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/network.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file network.h Network API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/notify.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/notify.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file notify.c Notification API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/notify.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/notify.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file notify.h Notification API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/ntlm.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/ntlm.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,7 +1,8 @@ /** * @file ntlm.c - * - * purple + */ + +/* purple * * Copyright (C) 2005 Thomas Butter <butter@uni-mannheim.de> *
--- a/libpurple/ntlm.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/ntlm.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,7 +1,8 @@ /** * @file ntlm.h - * - * purple + */ + +/* purple * * Copyright (C) 2005, Thomas Butter <butter@uni-mannheim.de> *
--- a/libpurple/plugin.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/plugin.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file plugin.h Plugin API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/pluginpref.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/pluginpref.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file pluginpref.h Plugin Preferences API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/pounce.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/pounce.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file pounce.c Buddy Pounce API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/pounce.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/pounce.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file pounce.h Buddy Pounce API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/prefs.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/prefs.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file prefs.h Prefs API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/privacy.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/privacy.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file privacy.h Privacy API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/protocols/jabber/.todo Sun Sep 16 05:30:13 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -<todo version="0.1.19"> - <note priority="medium" time="1036044198"> - Browsing - </note> - <note priority="medium" time="1036044416"> - Server Admin operations (messages, etc.) - </note> - <note priority="medium" time="1036044448"> - Add option for user info to be published or not in JUD. - </note> - <note priority="medium" time="1036044583"> - Delete server account. - </note> - <note priority="medium" time="1036045649"> - Permit/Deny buddy support. - </note> - <note priority="medium" time="1036046413"> - a populate roster from local blist. most useful if you want to migrate a blist from one account to another, also useful if something freaky happens and the server blist is lost. - </note> - <note priority="medium" time="1037892911"> - info - <note priority="medium" time="1037893000"> - formatted. enhancement-request so that the birthday field in the setinfo form would split up into relevant fields allowing for a strict syntax (like year--month--day or so, perhaps even dropdown menus) - </note> - </note> - <note priority="verylow" time="1036044192"> - Jabber Transports (having them show up on the buddy list should be fairly easy; having an appropriate right-click menu for them should also be somewhat easy. Providing a UI for adding transports should be rather difficult.) - </note> -</todo>
--- a/libpurple/protocols/jabber/adhoccommands.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/protocols/jabber/adhoccommands.c Sun Sep 16 05:31:33 2007 +0000 @@ -151,8 +151,11 @@ /* display result */ xmlnode *note = xmlnode_get_child(command,"note"); - if(note) - purple_notify_info(NULL, xmlnode_get_attrib(packet, "from"), xmlnode_get_data(note), NULL); + if(note) { + char *data = xmlnode_get_data(note); + purple_notify_info(NULL, xmlnode_get_attrib(packet, "from"), data, NULL); + g_free(data); + } if(xdata) jabber_x_data_request(js, xdata, (jabber_x_data_cb)do_adhoc_ignoreme, NULL);
--- a/libpurple/protocols/jabber/buddy.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/protocols/jabber/buddy.c Sun Sep 16 05:31:33 2007 +0000 @@ -1455,10 +1455,13 @@ return; img = purple_base64_decode(b64data, &size); - if(!img) + if(!img) { + g_free(b64data); return; + } purple_buddy_icons_set_for_user(purple_connection_get_account(js->gc), from, img, size, checksum); + g_free(b64data); } void jabber_buddy_avatar_update_metadata(JabberStream *js, const char *from, xmlnode *items) {
--- a/libpurple/protocols/jabber/jabber.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/protocols/jabber/jabber.c Sun Sep 16 05:31:33 2007 +0000 @@ -141,6 +141,7 @@ if(jabber_process_starttls(js, packet)) return; } else if(purple_account_get_bool(js->gc->account, "require_tls", FALSE) && !js->gsc) { + js->gc->wants_to_die = TRUE; purple_connection_error(js->gc, _("You require encryption, but it is not available on this server.")); return; } @@ -813,7 +814,7 @@ if(account->registration_cb) (account->registration_cb)(account, FALSE, account->registration_cb_user_data); jabber_connection_schedule_close(cbdata->js); -} + } g_free(cbdata->who); g_free(cbdata); } @@ -882,12 +883,12 @@ if((href = xmlnode_get_data(url))) { purple_notify_uri(NULL, href); g_free(href); - if(js->registration) { - js->gc->wants_to_die = TRUE; - if(account->registration_cb) /* succeeded, but we have no login info */ - (account->registration_cb)(account, TRUE, account->registration_cb_user_data); - jabber_connection_schedule_close(js); - } + if(js->registration) { + js->gc->wants_to_die = TRUE; + if(account->registration_cb) /* succeeded, but we have no login info */ + (account->registration_cb)(account, TRUE, account->registration_cb_user_data); + jabber_connection_schedule_close(js); + } return; } } @@ -987,14 +988,14 @@ purple_request_field_group_add_field(group, field); } - if((y = xmlnode_get_child(query, "instructions"))) - instructions = xmlnode_get_data(y); + if((y = xmlnode_get_child(query, "instructions"))) + instructions = xmlnode_get_data(y); else if(registered) instructions = g_strdup(_("Please fill out the information below " "to change your account registration.")); - else - instructions = g_strdup(_("Please fill out the information below " - "to register your new account.")); + else + instructions = g_strdup(_("Please fill out the information below " + "to register your new account.")); cbdata = g_new0(JabberRegisterCBData, 1); cbdata->js = js; @@ -1019,8 +1020,8 @@ g_free(title); } - g_free(instructions); - } + g_free(instructions); +} void jabber_register_start(JabberStream *js) { @@ -1531,15 +1532,15 @@ "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), "mood", _("Mood"), purple_value_new(PURPLE_TYPE_STRING), "moodtext", _("Mood Text"), purple_value_new(PURPLE_TYPE_STRING), - "tune_artist", _("Tune Artist"), purple_value_new(PURPLE_TYPE_STRING), - "tune_title", _("Tune Title"), purple_value_new(PURPLE_TYPE_STRING), - "tune_album", _("Tune Album"), purple_value_new(PURPLE_TYPE_STRING), - "tune_genre", _("Tune Genre"), purple_value_new(PURPLE_TYPE_STRING), - "tune_comment", _("Tune Comment"), purple_value_new(PURPLE_TYPE_STRING), - "tune_track", _("Tune Track"), purple_value_new(PURPLE_TYPE_STRING), - "tune_time", _("Tune Time"), purple_value_new(PURPLE_TYPE_INT), - "tune_year", _("Tune Year"), purple_value_new(PURPLE_TYPE_INT), - "tune_url", _("Tune URL"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_ARTIST, _("Tune Artist"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_TITLE, _("Tune Title"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_ALBUM, _("Tune Album"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_GENRE, _("Tune Genre"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_COMMENT, _("Tune Comment"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_TRACK, _("Tune Track"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_TIME, _("Tune Time"), purple_value_new(PURPLE_TYPE_INT), + PURPLE_TUNE_YEAR, _("Tune Year"), purple_value_new(PURPLE_TYPE_INT), + PURPLE_TUNE_URL, _("Tune URL"), purple_value_new(PURPLE_TYPE_STRING), "nick", _("Nickname"), purple_value_new(PURPLE_TYPE_STRING), "buzz", _("Allow Buzz"), purple_value_new(PURPLE_TYPE_BOOLEAN), NULL); @@ -1554,15 +1555,15 @@ "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), "mood", _("Mood"), purple_value_new(PURPLE_TYPE_STRING), "moodtext", _("Mood Text"), purple_value_new(PURPLE_TYPE_STRING), - "tune_artist", _("Tune Artist"), purple_value_new(PURPLE_TYPE_STRING), - "tune_title", _("Tune Title"), purple_value_new(PURPLE_TYPE_STRING), - "tune_album", _("Tune Album"), purple_value_new(PURPLE_TYPE_STRING), - "tune_genre", _("Tune Genre"), purple_value_new(PURPLE_TYPE_STRING), - "tune_comment", _("Tune Comment"), purple_value_new(PURPLE_TYPE_STRING), - "tune_track", _("Tune Track"), purple_value_new(PURPLE_TYPE_STRING), - "tune_time", _("Tune Time"), purple_value_new(PURPLE_TYPE_INT), - "tune_year", _("Tune Year"), purple_value_new(PURPLE_TYPE_INT), - "tune_url", _("Tune URL"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_ARTIST, _("Tune Artist"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_TITLE, _("Tune Title"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_ALBUM, _("Tune Album"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_GENRE, _("Tune Genre"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_COMMENT, _("Tune Comment"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_TRACK, _("Tune Track"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_TIME, _("Tune Time"), purple_value_new(PURPLE_TYPE_INT), + PURPLE_TUNE_YEAR, _("Tune Year"), purple_value_new(PURPLE_TYPE_INT), + PURPLE_TUNE_URL, _("Tune URL"), purple_value_new(PURPLE_TYPE_STRING), "nick", _("Nickname"), purple_value_new(PURPLE_TYPE_STRING), "buzz", _("Allow Buzz"), purple_value_new(PURPLE_TYPE_BOOLEAN), NULL); @@ -1577,15 +1578,15 @@ "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), "mood", _("Mood"), purple_value_new(PURPLE_TYPE_STRING), "moodtext", _("Mood Text"), purple_value_new(PURPLE_TYPE_STRING), - "tune_artist", _("Tune Artist"), purple_value_new(PURPLE_TYPE_STRING), - "tune_title", _("Tune Title"), purple_value_new(PURPLE_TYPE_STRING), - "tune_album", _("Tune Album"), purple_value_new(PURPLE_TYPE_STRING), - "tune_genre", _("Tune Genre"), purple_value_new(PURPLE_TYPE_STRING), - "tune_comment", _("Tune Comment"), purple_value_new(PURPLE_TYPE_STRING), - "tune_track", _("Tune Track"), purple_value_new(PURPLE_TYPE_STRING), - "tune_time", _("Tune Time"), purple_value_new(PURPLE_TYPE_INT), - "tune_year", _("Tune Year"), purple_value_new(PURPLE_TYPE_INT), - "tune_url", _("Tune URL"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_ARTIST, _("Tune Artist"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_TITLE, _("Tune Title"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_ALBUM, _("Tune Album"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_GENRE, _("Tune Genre"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_COMMENT, _("Tune Comment"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_TRACK, _("Tune Track"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_TIME, _("Tune Time"), purple_value_new(PURPLE_TYPE_INT), + PURPLE_TUNE_YEAR, _("Tune Year"), purple_value_new(PURPLE_TYPE_INT), + PURPLE_TUNE_URL, _("Tune URL"), purple_value_new(PURPLE_TYPE_STRING), "nick", _("Nickname"), purple_value_new(PURPLE_TYPE_STRING), "buzz", _("Allow Buzz"), purple_value_new(PURPLE_TYPE_BOOLEAN), NULL); @@ -1600,15 +1601,15 @@ "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), "mood", _("Mood"), purple_value_new(PURPLE_TYPE_STRING), "moodtext", _("Mood Text"), purple_value_new(PURPLE_TYPE_STRING), - "tune_artist", _("Tune Artist"), purple_value_new(PURPLE_TYPE_STRING), - "tune_title", _("Tune Title"), purple_value_new(PURPLE_TYPE_STRING), - "tune_album", _("Tune Album"), purple_value_new(PURPLE_TYPE_STRING), - "tune_genre", _("Tune Genre"), purple_value_new(PURPLE_TYPE_STRING), - "tune_comment", _("Tune Comment"), purple_value_new(PURPLE_TYPE_STRING), - "tune_track", _("Tune Track"), purple_value_new(PURPLE_TYPE_STRING), - "tune_time", _("Tune Time"), purple_value_new(PURPLE_TYPE_INT), - "tune_year", _("Tune Year"), purple_value_new(PURPLE_TYPE_INT), - "tune_url", _("Tune URL"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_ARTIST, _("Tune Artist"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_TITLE, _("Tune Title"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_ALBUM, _("Tune Album"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_GENRE, _("Tune Genre"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_COMMENT, _("Tune Comment"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_TRACK, _("Tune Track"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_TIME, _("Tune Time"), purple_value_new(PURPLE_TYPE_INT), + PURPLE_TUNE_YEAR, _("Tune Year"), purple_value_new(PURPLE_TYPE_INT), + PURPLE_TUNE_URL, _("Tune URL"), purple_value_new(PURPLE_TYPE_STRING), "nick", _("Nickname"), purple_value_new(PURPLE_TYPE_STRING), "buzz", _("Allow Buzz"), purple_value_new(PURPLE_TYPE_BOOLEAN), NULL); @@ -1623,15 +1624,15 @@ "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), "mood", _("Mood"), purple_value_new(PURPLE_TYPE_STRING), "moodtext", _("Mood Text"), purple_value_new(PURPLE_TYPE_STRING), - "tune_artist", _("Tune Artist"), purple_value_new(PURPLE_TYPE_STRING), - "tune_title", _("Tune Title"), purple_value_new(PURPLE_TYPE_STRING), - "tune_album", _("Tune Album"), purple_value_new(PURPLE_TYPE_STRING), - "tune_genre", _("Tune Genre"), purple_value_new(PURPLE_TYPE_STRING), - "tune_comment", _("Tune Comment"), purple_value_new(PURPLE_TYPE_STRING), - "tune_track", _("Tune Track"), purple_value_new(PURPLE_TYPE_STRING), - "tune_time", _("Tune Time"), purple_value_new(PURPLE_TYPE_INT), - "tune_year", _("Tune Year"), purple_value_new(PURPLE_TYPE_INT), - "tune_url", _("Tune URL"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_ARTIST, _("Tune Artist"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_TITLE, _("Tune Title"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_ALBUM, _("Tune Album"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_GENRE, _("Tune Genre"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_COMMENT, _("Tune Comment"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_TRACK, _("Tune Track"), purple_value_new(PURPLE_TYPE_STRING), + PURPLE_TUNE_TIME, _("Tune Time"), purple_value_new(PURPLE_TYPE_INT), + PURPLE_TUNE_YEAR, _("Tune Year"), purple_value_new(PURPLE_TYPE_INT), + PURPLE_TUNE_URL, _("Tune URL"), purple_value_new(PURPLE_TYPE_STRING), "nick", _("Nickname"), purple_value_new(PURPLE_TYPE_STRING), "buzz", _("Allow Buzz"), purple_value_new(PURPLE_TYPE_BOOLEAN), NULL);
--- a/libpurple/protocols/jabber/message.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/protocols/jabber/message.c Sun Sep 16 05:31:33 2007 +0000 @@ -324,7 +324,7 @@ if(type) { if(!strcmp(type, "normal")) jm->type = JABBER_MESSAGE_NORMAL; - else if(!strcmp(type, "chat")) + else if(!strcmp(type, "chat")) jm->type = JABBER_MESSAGE_CHAT; else if(!strcmp(type, "groupchat")) jm->type = JABBER_MESSAGE_GROUPCHAT;
--- a/libpurple/protocols/jabber/presence.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/protocols/jabber/presence.c Sun Sep 16 05:31:33 2007 +0000 @@ -192,16 +192,11 @@ jabber_tune_set(js->gc, &tuneinfo); /* update old values */ - if(js->old_artist) - g_free(js->old_artist); - if(js->old_title) - g_free(js->old_title); - if(js->old_source) - g_free(js->old_source); - if(js->old_uri) - g_free(js->old_uri); - if(js->old_track) - g_free(js->old_track); + g_free(js->old_artist); + g_free(js->old_title); + g_free(js->old_source); + g_free(js->old_uri); + g_free(js->old_track); js->old_artist = g_strdup(artist); js->old_title = g_strdup(title); js->old_source = g_strdup(source);
--- a/libpurple/protocols/jabber/usernick.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/protocols/jabber/usernick.c Sun Sep 16 05:31:33 2007 +0000 @@ -33,7 +33,7 @@ xmlnode *item = xmlnode_get_child(items, "item"); JabberBuddy *buddy = jabber_buddy_find(js, from, FALSE); xmlnode *nick; - const char *nickname = NULL; + char *nickname = NULL; /* ignore the tune of people not on our buddy list */ if (!buddy || !item) @@ -43,8 +43,8 @@ if (!nick) return; nickname = xmlnode_get_data(nick); - serv_got_alias(js->gc, from, nickname); + g_free(nickname); } static void do_nick_set(JabberStream *js, const char *nick) { @@ -64,7 +64,7 @@ } static void do_nick_got_own_nick_cb(JabberStream *js, const char *from, xmlnode *items) { - const char *oldnickname = NULL; + char *oldnickname = NULL; xmlnode *item = xmlnode_get_child(items,"item"); if(item) { @@ -77,6 +77,7 @@ _("This information is visible to all contacts on your contact list, so choose something appropriate."), oldnickname, FALSE, FALSE, NULL, _("Set"), PURPLE_CALLBACK(do_nick_set), _("Cancel"), NULL, purple_connection_get_account(js->gc), NULL, NULL, js); + g_free(oldnickname); } static void do_nick_set_nick(PurplePluginAction *action) {
--- a/libpurple/protocols/jabber/usertune.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/protocols/jabber/usertune.c Sun Sep 16 05:31:33 2007 +0000 @@ -41,48 +41,61 @@ if (!buddy || !item) return; - tuneinfodata.artist = ""; - tuneinfodata.title = ""; - tuneinfodata.album = ""; - tuneinfodata.track = ""; + tuneinfodata.artist = NULL; + tuneinfodata.title = NULL; + tuneinfodata.album = NULL; + tuneinfodata.track = NULL; tuneinfodata.time = -1; - tuneinfodata.url = ""; - + tuneinfodata.url = NULL; + tune = xmlnode_get_child_with_namespace(item, "tune", "http://jabber.org/protocol/tune"); if (!tune) return; + resource = jabber_buddy_find_resource(buddy, NULL); + if(!resource) + return; /* huh? */ for (tuneinfo = tune->child; tuneinfo; tuneinfo = tuneinfo->next) { if (tuneinfo->type == XMLNODE_TYPE_TAG) { if (!strcmp(tuneinfo->name, "artist")) { - if (tuneinfodata.artist[0] == '\0') /* only pick the first one */ + if (tuneinfodata.artist == NULL) /* only pick the first one */ tuneinfodata.artist = xmlnode_get_data(tuneinfo); } else if (!strcmp(tuneinfo->name, "length")) { if (tuneinfodata.time == -1) { char *length = xmlnode_get_data(tuneinfo); if (length) tuneinfodata.time = strtol(length, NULL, 10); + g_free(length); } } else if (!strcmp(tuneinfo->name, "source")) { - if (tuneinfodata.album[0] == '\0') /* only pick the first one */ + if (tuneinfodata.album == NULL) /* only pick the first one */ tuneinfodata.album = xmlnode_get_data(tuneinfo); } else if (!strcmp(tuneinfo->name, "title")) { - if (tuneinfodata.title[0] == '\0') /* only pick the first one */ + if (tuneinfodata.title == NULL) /* only pick the first one */ tuneinfodata.title = xmlnode_get_data(tuneinfo); } else if (!strcmp(tuneinfo->name, "track")) { - if (tuneinfodata.track[0] == '\0') /* only pick the first one */ + if (tuneinfodata.track == NULL) /* only pick the first one */ tuneinfodata.track = xmlnode_get_data(tuneinfo); } else if (!strcmp(tuneinfo->name, "uri")) { - if (tuneinfodata.url[0] == '\0') /* only pick the first one */ + if (tuneinfodata.url == NULL) /* only pick the first one */ tuneinfodata.url = xmlnode_get_data(tuneinfo); } } } - resource = jabber_buddy_find_resource(buddy, NULL); - if(!resource) - return; /* huh? */ status_id = jabber_buddy_state_get_status_id(resource->state); - purple_prpl_got_user_status(js->gc->account, from, status_id, PURPLE_TUNE_ARTIST, tuneinfodata.artist, PURPLE_TUNE_TITLE, tuneinfodata.title, PURPLE_TUNE_ALBUM, tuneinfodata.album, PURPLE_TUNE_TRACK, tuneinfodata.track, PURPLE_TUNE_TIME, tuneinfodata.time, PURPLE_TUNE_URL, tuneinfodata.url, NULL); + purple_prpl_got_user_status(js->gc->account, from, status_id, + PURPLE_TUNE_ARTIST, tuneinfodata.artist, + PURPLE_TUNE_TITLE, tuneinfodata.title, + PURPLE_TUNE_ALBUM, tuneinfodata.album, + PURPLE_TUNE_TRACK, tuneinfodata.track, + PURPLE_TUNE_TIME, tuneinfodata.time, + PURPLE_TUNE_URL, tuneinfodata.url, NULL); + + g_free(tuneinfodata.artist); + g_free(tuneinfodata.title); + g_free(tuneinfodata.album); + g_free(tuneinfodata.track); + g_free(tuneinfodata.url); } void jabber_tune_init(void) {
--- a/libpurple/protocols/msn/msn.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/protocols/msn/msn.c Sun Sep 16 05:31:33 2007 +0000 @@ -2196,8 +2196,7 @@ prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); - /* TODO: Mark translatable as soon as 2.2.0 is released and we're not string frozen */ - option = purple_account_option_string_new("HTTP Method Server", + option = purple_account_option_string_new(_("HTTP Method Server"), "http_method_server", MSN_HTTPCONN_SERVER); prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
--- a/libpurple/protocols/myspace/Makefile.am Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/protocols/myspace/Makefile.am Sun Sep 16 05:31:33 2007 +0000 @@ -2,7 +2,7 @@ pkgdir = $(libdir)/purple-$(PURPLE_MAJOR_VERSION) -SOURCES = markup.c \ +MSIMSOURCES = markup.c \ markup.h \ message.c \ message.h \ @@ -24,14 +24,14 @@ st = -DPURPLE_STATIC_PRPL noinst_LIBRARIES = libmyspace.a -libmyspace_a_SOURCES = $(SOURCES) +libmyspace_a_SOURCES = $(MSIMSOURCES) libmyspace_a_CFLAGS = $(AM_CFLAGS) else st = pkg_LTLIBRARIES = libmyspace.la -libmyspace_la_SOURCES = $(SOURCES) +libmyspace_la_SOURCES = $(MSIMSOURCES) libmyspace_la_LIBADD = $(GLIB_LIBS) endif
--- a/libpurple/protocols/myspace/myspace.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/protocols/myspace/myspace.c Sun Sep 16 05:31:33 2007 +0000 @@ -2856,7 +2856,7 @@ } /** Callbacks called by Purple, to access this plugin. */ -PurplePluginProtocolInfo prpl_info = { +static PurplePluginProtocolInfo prpl_info = { /* options */ OPT_PROTO_USE_POINTSIZE /* specify font size in sane point size */ | OPT_PROTO_MAIL_CHECK,
--- a/libpurple/protocols/oscar/.todo Sun Sep 16 05:30:13 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,65 +0,0 @@ -<todo version="0.1.19"> - <note priority="high" time="1036040788"> - watch for aol's upcoming increased aim/icq merge - </note> - <note priority="medium" time="1036040405"> - AIM - <note priority="high" time="1036040899"> - option to ignore chat room invitations. (this is something you could vary conceivably want to be done per account, so perhaps a protocol action would be best) - </note> - <note priority="medium" time="1092939731"> - buddies in Recent Buddies don't seem to delete right - </note> - <note priority="low" time="1036040980"> - direct im - <note priority="veryhigh" time="1036040919"> - some way to close direct connect w/out closing convo. - </note> - <note priority="low" time="1036041084"> - failed direct im attempt should allow new attempt some way to cancel an attempt that isn't happening - </note> - </note> - <note priority="verylow" time="1036041121"> - Voice Chat - </note> - </note> - <note priority="medium" time="1036040416"> - ICQ - <note priority="veryhigh" time="1036041206"> - more privacy options - </note> - <note priority="veryhigh" time="1036041223"> - increased authorization support - <note priority="medium" time="1038877503"> - add info to dialog requesting autorization to allow you to check the info of the person who is requesting - </note> - </note> - <note priority="high" time="1036041199"> - color support - </note> - <note priority="high" time="1036041251"> - set status message and of course when libpurple can set them, it needs to be able to get the ones it sets. (yes this is redundant. its a reflection of my current mood) - </note> - <note priority="medium" time="1036041165"> - Chat (this is different from aim chat) - </note> - <note priority="medium" time="1036041190"> - New User Registration - </note> - <note priority="medium" time="1036041215"> - more info support - </note> - <note priority="medium" time="1036041260"> - search for users - </note> - <note priority="low" time="1036041152"> - set the Nickname to be the self-alias - </note> - <note priority="low" time="1092939688"> - icq i18n without breaking aim - </note> - </note> - <note priority="medium" time="1036040870"> - The order of groups and buddies in the server list is not updated when groups and buddies are re-arranged locally in libpurple. - </note> -</todo>
--- a/libpurple/proxy.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/proxy.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file proxy.c Proxy API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this @@ -400,7 +401,7 @@ */ if (!PURPLE_PROXY_CONNECT_DATA_IS_VALID(connect_data)) return; - + purple_debug_info("proxy", "Connected to %s:%d.\n", connect_data->host, connect_data->port); @@ -1992,6 +1993,13 @@ proxy_pref_cb, NULL); purple_prefs_connect_callback(handle, "/purple/proxy/password", proxy_pref_cb, NULL); + + /* Load the initial proxy settings */ + purple_prefs_trigger_callback("/purple/proxy/type"); + purple_prefs_trigger_callback("/purple/proxy/host"); + purple_prefs_trigger_callback("/purple/proxy/port"); + purple_prefs_trigger_callback("/purple/proxy/username"); + purple_prefs_trigger_callback("/purple/proxy/password"); } void
--- a/libpurple/proxy.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/proxy.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file proxy.h Proxy API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/prpl.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/prpl.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file prpl.h Protocol Plugin functions * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/request.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/request.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file request.c Request API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/request.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/request.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file request.h Request API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/roomlist.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/roomlist.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file roomlist.c Room List API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/roomlist.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/roomlist.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file roomlist.h Room List API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/savedstatuses.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/savedstatuses.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file savedstatuses.c Saved Status API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/savedstatuses.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/savedstatuses.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file savedstatuses.h Saved Status API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/server.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/server.c Sun Sep 16 05:31:33 2007 +0000 @@ -143,6 +143,7 @@ */ auto_reply_pref = purple_prefs_get_string("/purple/away/auto_reply"); if ((gc->flags & PURPLE_CONNECTION_AUTO_RESP) && + flags & PURPLE_MESSAGE_AUTO_RESP && !purple_presence_is_available(presence) && strcmp(auto_reply_pref, "never")) {
--- a/libpurple/server.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/server.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file server.h Server API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/signals.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/signals.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file signals.c Signal API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/signals.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/signals.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file signals.h Signal API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/sound.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/sound.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file sound.h Sound API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/sslconn.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/sslconn.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file sslconn.c SSL API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/sslconn.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/sslconn.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file sslconn.h SSL API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/status.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/status.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file status.c Status API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this @@ -1668,6 +1669,14 @@ purple_prefs_connect_callback(handle, "/purple/status/scores/offline_msg", score_pref_changed_cb, GINT_TO_POINTER(SCORE_OFFLINE_MESSAGE)); + + purple_prefs_trigger_callback("/purple/status/scores/offline"); + purple_prefs_trigger_callback("/purple/status/scores/available"); + purple_prefs_trigger_callback("/purple/status/scores/invisible"); + purple_prefs_trigger_callback("/purple/status/scores/away"); + purple_prefs_trigger_callback("/purple/status/scores/extended_away"); + purple_prefs_trigger_callback("/purple/status/scores/idle"); + purple_prefs_trigger_callback("/purple/status/scores/offline_msg"); } void
--- a/libpurple/stringref.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/stringref.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file stringref.c Reference-counted immutable strings * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/stringref.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/stringref.h Sun Sep 16 05:31:33 2007 +0000 @@ -3,8 +3,9 @@ /** * @file stringref.h Reference-counted immutable strings * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/stun.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/stun.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file stun.c STUN (RFC3489) Implementation * @ingroup core - * - * purple + */ + +/* purple * * STUN implementation inspired by jstun [http://jstun.javawi.de/] *
--- a/libpurple/stun.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/stun.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file stun.h STUN API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/upnp.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/upnp.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file upnp.c UPnP Implementation * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/upnp.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/upnp.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file upnp.h Universal Plug N Play API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/util.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/util.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /* * @file util.h Utility Functions * @ingroup core - * - * Purple is the legal property of its developers, whose names are too numerous + */ + +/* Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this * source distribution. *
--- a/libpurple/util.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/util.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file util.h Utility Functions * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/value.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/value.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file value.c Value wrapper API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/value.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/value.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file value.h Value wrapper API * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/version.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/version.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /* * @file version.c Version Functions * @ingroup core - * - * Purple is the legal property of its developers, whose names are too numerous + */ + +/* Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this * source distribution. *
--- a/libpurple/whiteboard.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/whiteboard.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,7 +1,8 @@ /** * @file whiteboard.h The PurpleWhiteboard core object - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/xmlnode.c Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/xmlnode.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,7 +1,8 @@ /** * @file xmlnode.c XML DOM functions - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/libpurple/xmlnode.h Sun Sep 16 05:30:13 2007 +0000 +++ b/libpurple/xmlnode.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file xmlnode.h XML DOM functions * @ingroup core - * - * purple + */ + +/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin.spec.in Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin.spec.in Sun Sep 16 05:31:33 2007 +0000 @@ -363,8 +363,6 @@ %{_bindir}/pidgin %{_datadir}/pixmaps/pidgin %{_datadir}/icons/hicolor/*/apps/pidgin.* -%dir %{_datadir}/sounds/pidgin -%{_datadir}/sounds/pidgin/* %{_datadir}/applications/* %{_sysconfdir}/gconf/schemas/purple.schemas @@ -374,6 +372,8 @@ %{_libdir}/libpurple.so.* %dir %{_libdir}/purple-2 +%{_datadir}/purple +%{_datadir}/sounds/purple %attr(755, root, root) %{perl_vendorarch}/Purple.pm %attr(755, root, root) %{perl_vendorarch}/auto/Purple @@ -427,7 +427,7 @@ %endif %if 0%{?_with_mono:1} -%files libpurple-mono +%files -n libpurple-mono %defattr(-, root, root) %{_libdir}/purple-2/mono.so @@ -457,6 +457,9 @@ %endif %changelog +* Fri Sep 14 2007 Stu Tomlinson <stu@nosnilmot.com> +- Fix spec file for moved sounds & new CA certificates + * Thu Jul 12 2007 Stu Tomlinson <stu@nosnilmot.com> - Don't hardcode silc header locations, rely on pkg-config for those, because I think I broke non-pkg-config detection of older silc
--- a/pidgin/gtkaccount.c Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkaccount.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtkaccount.c GTK+ Account Editor UI * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkaccount.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkaccount.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtkaccount.h GTK+ Account Editor UI * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkblist.c Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkblist.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /* * @file gtkblist.c GTK+ BuddyList API * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this @@ -87,6 +88,8 @@ GtkWidget *group_combo; GtkWidget *entries_box; GtkSizeGroup *sg; + GtkWidget *autojoin; + GtkWidget *persistent; GList *entries; @@ -137,13 +140,23 @@ static void redo_buddy_list(PurpleBuddyList *list, gboolean remove, gboolean rerender); static void pidgin_blist_collapse_contact_cb(GtkWidget *w, PurpleBlistNode *node); static char *pidgin_get_group_title(PurpleBlistNode *gnode, gboolean expanded); - -struct _pidgin_blist_node { +static void pidgin_blist_expand_contact_cb(GtkWidget *w, PurpleBlistNode *node); + +typedef enum { + PIDGIN_BLIST_NODE_HAS_PENDING_MESSAGE = 1 << 0, /* Whether there's pending message in a conversation */ +} PidginBlistNodeFlags; + +typedef struct _pidgin_blist_node { GtkTreeRowReference *row; gboolean contact_expanded; gboolean recent_signonoff; gint recent_signonoff_timer; -}; + struct { + PurpleConversation *conv; + time_t last_message; /* timestamp for last displayed message */ + PidginBlistNodeFlags flags; + } conv; +} PidginBlistNode; static char dim_grey_string[8] = ""; static char *dim_grey() @@ -305,12 +318,36 @@ serv_send_file(b->account->gc, b->name, NULL); } +static void gtk_blist_menu_move_to_cb(GtkWidget *w, PurpleBlistNode *node) +{ + PurpleBlistNode *group = g_object_get_data(w, "groupnode"); + purple_blist_add_contact(node, group, NULL); + +} + static void gtk_blist_menu_autojoin_cb(GtkWidget *w, PurpleChat *chat) { purple_blist_node_set_bool((PurpleBlistNode*)chat, "gtk-autojoin", gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(w))); } +static void gtk_blist_menu_persistent_cb(GtkWidget *w, PurpleChat *chat) +{ + purple_blist_node_set_bool((PurpleBlistNode*)chat, "gtk-persistent", + gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(w))); +} + +static PurpleConversation * +find_conversation_with_buddy(PurpleBuddy *buddy) +{ + PidginBlistNode *ui = buddy->node.ui_data; + if (ui) + return ui->conv.conv; + return purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, + purple_buddy_get_name(buddy), + purple_buddy_get_account(buddy)); +} + static void gtk_blist_join_chat(PurpleChat *chat) { PurpleConversation *conv; @@ -394,6 +431,104 @@ } #endif +static void +gtk_blist_do_personize(GList *merges) +{ + PurpleBlistNode *contact = NULL; + int max = 0; + GList *tmp; + + /* First, we find the contact to merge the rest of the buddies into. + * This will be the contact with the most buddies in it; ties are broken + * by which contact is higher in the list + */ + for (tmp = merges; tmp; tmp = tmp->next) { + PurpleBlistNode *node = tmp->data; + PurpleBlistNode *b; + int i = 0; + + if (node->type == PURPLE_BLIST_BUDDY_NODE) + node = node->parent; + + if (node->type != PURPLE_BLIST_CONTACT_NODE) + continue; + + + for (b = node->child; b; b = b->next) + i++; + if (i > max) { + contact = node; + max = i; + } + } + + if (contact == NULL) + return; + + /* Merge all those buddies into this contact */ + for (tmp = merges; tmp; tmp = tmp->next) { + PurpleBlistNode *node = tmp->data; + if (node->type == PURPLE_BLIST_BUDDY_NODE) + node = node->parent; + + if (node == contact) + continue; + + purple_blist_merge_contact(node, contact); + } + + /* And show the expanded contact, so the people know what's going on */ + pidgin_blist_expand_contact_cb(NULL, contact); + g_list_free(merges); +} + +static void +gtk_blist_auto_personize(PurpleBlistNode *group, const char *alias) +{ + PurpleBlistNode *contact; + PurpleBlistNode *buddy; + GList *merges = NULL; + int i = 0; + char *a = g_utf8_casefold(alias, -1); + + for (contact = group->child; contact; contact = contact->next) { + char *node_alias; + if (contact->type != PURPLE_BLIST_CONTACT_NODE) + continue; + + node_alias = g_utf8_casefold(purple_contact_get_alias(contact), -1); + if (node_alias && !g_utf8_collate(node_alias, a)) { + merges = g_list_append(merges, contact); + i++; + g_free(node_alias); + continue; + } + g_free(node_alias); + + for (buddy = contact->child; buddy; buddy = buddy->next) { + if (buddy->type != PURPLE_BLIST_BUDDY_NODE) + continue; + + node_alias = g_utf8_casefold(purple_buddy_get_alias(buddy), -1); + if (node_alias && !g_utf8_collate(node_alias, a)) { + merges = g_list_append(merges, buddy); + i++; + } + g_free(node_alias); + } + } + g_free(a); + + if (i > 1) + { + char *msg = g_strdup_printf(ngettext("You currently have %d contact named %s. Would you like to merge them?", "You currently have %d contacts named %s. Would you like to merge them?", i), i, alias); + purple_request_action(NULL, NULL, msg, _("Merging these contacts will cause them to share a single entry on the buddy list and use a single conversation window. " + "You can separate them again by choosing 'Expand' from the contact's context menu"), 0, NULL, NULL, NULL, + merges, 2, _("_Merge"), PURPLE_CALLBACK(gtk_blist_do_personize), _("_Cancel"), PURPLE_CALLBACK(g_list_free)); + g_free(msg); + } +} + static void gtk_blist_renderer_edited_cb(GtkCellRendererText *text_rend, char *arg1, char *arg2, PurpleBuddyList *list) { @@ -420,13 +555,14 @@ PurpleContact *contact = (PurpleContact *)node; struct _pidgin_blist_node *gtknode = (struct _pidgin_blist_node *)node->ui_data; - if (contact->alias || gtknode->contact_expanded) + if (contact->alias || gtknode->contact_expanded) { purple_blist_alias_contact(contact, arg2); - else - { + gtk_blist_auto_personize(node->parent, arg2); + } else { PurpleBuddy *buddy = purple_contact_get_priority_buddy(contact); purple_blist_alias_buddy(buddy, arg2); serv_alias_buddy(buddy); + gtk_blist_auto_personize(node->parent, arg2); } } break; @@ -434,6 +570,7 @@ case PURPLE_BLIST_BUDDY_NODE: purple_blist_alias_buddy((PurpleBuddy*)node, arg2); serv_alias_buddy((PurpleBuddy *)node); + gtk_blist_auto_personize(node->parent->parent, arg2); break; case PURPLE_BLIST_GROUP_NODE: dest = purple_find_group(arg2); @@ -1118,6 +1255,34 @@ g_list_free(ll); } + + +static void +pidgin_append_blist_node_move_to_menu(GtkWidget *menu, PurpleBlistNode *node) +{ + GtkWidget *submenu; + GtkWidget *menuitem; + PurpleBlistNode *group; + + menuitem = gtk_menu_item_new_with_label(_("Move to")); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); + gtk_widget_show(menuitem); + + submenu = gtk_menu_new(); + gtk_menu_item_set_submenu(menuitem, submenu); + + for (group = purple_blist_get_root(); group; group = group->next) { + if (group->type != PURPLE_BLIST_GROUP_NODE) + continue; + if (group == node->parent) + continue; + menuitem = pidgin_new_item_from_stock(submenu, purple_group_get_name(group), NULL, + G_CALLBACK(gtk_blist_menu_move_to_cb), node, 0, 0, NULL); + g_object_set_data(G_OBJECT(menuitem), "groupnode", group); + } + gtk_widget_show_all(submenu); +} + void pidgin_blist_make_buddy_menu(GtkWidget *menu, PurpleBuddy *buddy, gboolean sub) { PurplePluginProtocolInfo *prpl_info; @@ -1169,6 +1334,9 @@ (PurpleBlistNode *)buddy); pidgin_append_blist_node_extended_menu(menu, (PurpleBlistNode *)buddy); + if (!contact_expanded) + pidgin_append_blist_node_move_to_menu(menu, contact); + if (((PurpleBlistNode*)buddy)->parent && ((PurpleBlistNode*)buddy)->parent->child->next && !sub && !contact_expanded) { pidgin_separator(menu); @@ -1255,16 +1423,19 @@ create_chat_menu(PurpleBlistNode *node, PurpleChat *c) { GtkWidget *menu; - gboolean autojoin; + gboolean autojoin, persistent; menu = gtk_menu_new(); autojoin = (purple_blist_node_get_bool(node, "gtk-autojoin") || (purple_blist_node_get_string(node, "gtk-autojoin") != NULL)); + persistent = purple_blist_node_get_bool(node, "gtk-persistent"); pidgin_new_item_from_stock(menu, _("_Join"), PIDGIN_STOCK_CHAT, G_CALLBACK(gtk_blist_menu_join_cb), node, 0, 0, NULL); pidgin_new_check_item(menu, _("Auto-Join"), G_CALLBACK(gtk_blist_menu_autojoin_cb), node, autojoin); + pidgin_new_check_item(menu, _("Persistent"), + G_CALLBACK(gtk_blist_menu_persistent_cb), node, persistent); pidgin_new_item_from_stock(menu, _("View _Log"), NULL, G_CALLBACK(gtk_blist_menu_showlog_cb), node, 0, 0, NULL); @@ -1306,7 +1477,6 @@ node, 0, 0, NULL); pidgin_append_blist_node_extended_menu(menu, node); - return menu; } @@ -2264,18 +2434,19 @@ if (prpl_info && prpl_info->icon_spec.scale_rules & PURPLE_ICON_SCALE_DISPLAY) purple_buddy_icon_get_scale_size(&prpl_info->icon_spec, &scale_width, &scale_height); - if (scaled) { + if (scaled || scale_height > 200 || scale_width > 200) { + float scale_size = scaled ? 32.0 : 200.0; if(scale_height > scale_width) { - scale_width = 32.0 * (double)scale_width / (double)scale_height; - scale_height = 32; + scale_width = scale_size * (double)scale_width / (double)scale_height; + scale_height = scale_size; } else { - scale_height = 32.0 * (double)scale_height / (double)scale_width; - scale_width = 32; + scale_height = scale_size * (double)scale_height / (double)scale_width; + scale_width = scale_size; } - ret = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, 32, 32); + ret = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, scale_size, scale_size); gdk_pixbuf_fill(ret, 0x00000000); - gdk_pixbuf_scale(buf, ret, (32-scale_width)/2, (32-scale_height)/2, scale_width, scale_height, (32-scale_width)/2, (32-scale_height)/2, (double)scale_width/(double)orig_width, (double)scale_height/(double)orig_height, GDK_INTERP_BILINEAR); + gdk_pixbuf_scale(buf, ret, (scale_size-scale_width)/2, (scale_size-scale_height)/2, scale_width, scale_height, (scale_size-scale_width)/2, (scale_size-scale_height)/2, (double)scale_width/(double)orig_width, (double)scale_height/(double)orig_height, GDK_INTERP_BILINEAR); if (pidgin_gdk_pixbuf_is_opaque(ret)) pidgin_gdk_pixbuf_make_round(ret); } else { @@ -3143,8 +3314,6 @@ GdkPixbuf *ret; PurplePresence *p; - - if(PURPLE_BLIST_NODE_IS_CONTACT(node)) { if(!gtknode->contact_expanded) { buddy = purple_contact_get_priority_buddy((PurpleContact*)node); @@ -3186,6 +3355,13 @@ return ret; } + if (purple_status_get_attr_string(purple_presence_get_active_status(p), PURPLE_TUNE_TITLE)) { + path = g_build_filename(DATADIR, "pixmaps", "pidgin", "emblems", "16", "music.png", NULL); + ret = gdk_pixbuf_new_from_file(path, NULL); + g_free(path); + return ret; + } + prpl = purple_find_prpl(purple_account_get_protocol_id(buddy->account)); if (!prpl) return NULL; @@ -3259,17 +3435,17 @@ } if(buddy) { - PurpleConversation *conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, - purple_buddy_get_name(buddy), - purple_buddy_get_account(buddy)); + PurpleConversation *conv = find_conversation_with_buddy(buddy); PurplePresence *p; gboolean trans; if(conv != NULL) { PidginConversation *gtkconv = PIDGIN_CONVERSATION(conv); - if((gtkconv == NULL || pidgin_conv_is_hidden(gtkconv)) && size == PIDGIN_STATUS_ICON_SMALL) { - return gtk_widget_render_icon (GTK_WIDGET(gtkblist->treeview), PIDGIN_STOCK_STATUS_MESSAGE, - icon_size, "GtkTreeView"); + if (gtkconv == NULL && size == PIDGIN_STATUS_ICON_SMALL) { + PidginBlistNode *ui = buddy->node.ui_data; + if (ui == NULL || (ui->conv.flags & PIDGIN_BLIST_NODE_HAS_PENDING_MESSAGE)) + return gtk_widget_render_icon (GTK_WIDGET(gtkblist->treeview), + PIDGIN_STOCK_STATUS_MESSAGE, icon_size, "GtkTreeView"); } } @@ -3325,16 +3501,17 @@ struct _pidgin_blist_node *gtkcontactnode = NULL; char *idletime = NULL, *statustext = NULL; time_t t; - PurpleConversation *conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, - purple_buddy_get_name(b), - purple_buddy_get_account(b)); - PidginConversation *gtkconv; + PurpleConversation *conv = find_conversation_with_buddy(b); gboolean hidden_conv = FALSE; - if(conv != NULL) { - gtkconv = PIDGIN_CONVERSATION(conv); - if(gtkconv == NULL || pidgin_conv_is_hidden(gtkconv)) { - hidden_conv = TRUE; + if (conv != NULL) { + PidginBlistNode *ui = b->node.ui_data; + if (ui) { + if (ui->conv.flags & PIDGIN_BLIST_NODE_HAS_PENDING_MESSAGE) + hidden_conv = TRUE; + } else { + if (PIDGIN_CONVERSATION(conv) == NULL) + hidden_conv = TRUE; } } @@ -3669,7 +3846,7 @@ menu = NULL; } - convs = pidgin_conversations_find_unseen_list(PURPLE_CONV_TYPE_IM, PIDGIN_UNSEEN_TEXT, TRUE, 0); + convs = pidgin_conversations_find_unseen_list(PURPLE_CONV_TYPE_ANY, PIDGIN_UNSEEN_TEXT, TRUE, 0); if (!convs) /* no conversations added, don't show the menu */ return; @@ -3725,7 +3902,7 @@ gtkblist->menutrayicon = NULL; } - convs = pidgin_conversations_find_unseen_list(PURPLE_CONV_TYPE_IM, PIDGIN_UNSEEN_TEXT, TRUE, 0); + convs = pidgin_conversations_find_unseen_list(PURPLE_CONV_TYPE_ANY, PIDGIN_UNSEEN_TEXT, TRUE, 0); if (convs) { GtkWidget *img = NULL; GString *tooltip_text = NULL; @@ -3733,14 +3910,10 @@ tooltip_text = g_string_new(""); l = convs; while (l != NULL) { - if (PIDGIN_IS_PIDGIN_CONVERSATION(l->data)) { - PidginConversation *gtkconv = PIDGIN_CONVERSATION((PurpleConversation *)l->data); - - g_string_append_printf(tooltip_text, - ngettext("%d unread message from %s\n", "%d unread messages from %s\n", gtkconv->unseen_count), - gtkconv->unseen_count, - gtk_label_get_text(GTK_LABEL(gtkconv->tab_label))); - } + int count = GPOINTER_TO_INT(purple_conversation_get_data(l->data, "unseen-count")); + g_string_append_printf(tooltip_text, + ngettext("%d unread message from %s\n", "%d unread messages from %s\n", count), + count, purple_conversation_get_name(l->data)); l = l->next; } if(tooltip_text->len > 0) { @@ -3768,6 +3941,88 @@ conversation_updated_cb(conv, PURPLE_CONV_UPDATE_UNSEEN, gtkblist); } +static void +conversation_deleted_update_ui_cb(PurpleConversation *conv, struct _pidgin_blist_node *ui) +{ + if (ui->conv.conv != conv) + return; + ui->conv.conv = NULL; + ui->conv.flags = 0; + ui->conv.last_message = 0; +} + +static void +written_msg_update_ui_cb(PurpleAccount *account, const char *who, const char *message, + PurpleConversation *conv, PurpleMessageFlags flag, PurpleBlistNode *node) +{ + PidginBlistNode *ui = node->ui_data; + if (ui->conv.conv != conv || PIDGIN_CONVERSATION(conv) || + !(flag & (PURPLE_MESSAGE_SEND | PURPLE_MESSAGE_RECV))) + return; + ui->conv.flags |= PIDGIN_BLIST_NODE_HAS_PENDING_MESSAGE; + ui->conv.last_message = time(NULL); /* XXX: for lack of better data */ + pidgin_blist_update(purple_get_blist(), node); +} + +static void +displayed_msg_update_ui_cb(PurpleAccount *account, const char *who, const char *message, + PurpleConversation *conv, PurpleMessageFlags flag, PurpleBlistNode *node) +{ + PidginBlistNode *ui = node->ui_data; + if (ui->conv.conv != conv) + return; + ui->conv.flags &= ~PIDGIN_BLIST_NODE_HAS_PENDING_MESSAGE; + pidgin_blist_update(purple_get_blist(), node); +} + +static void +conversation_created_cb(PurpleConversation *conv, PidginBuddyList *gtkblist) +{ + switch (conv->type) { + case PURPLE_CONV_TYPE_IM: + { + GSList *buddies = purple_find_buddies(conv->account, conv->name); + while (buddies) { + PurpleBlistNode *buddy = buddies->data; + struct _pidgin_blist_node *ui = buddy->ui_data; + buddies = g_slist_delete_link(buddies, buddies); + if (!ui) + continue; + ui->conv.conv = conv; + ui->conv.flags = 0; + ui->conv.last_message = 0; + purple_signal_connect(purple_conversations_get_handle(), "deleting-conversation", + ui, PURPLE_CALLBACK(conversation_deleted_update_ui_cb), ui); + purple_signal_connect(purple_conversations_get_handle(), "wrote-im-msg", + ui, PURPLE_CALLBACK(written_msg_update_ui_cb), buddy); + purple_signal_connect(pidgin_conversations_get_handle(), "displayed-im-msg", + ui, PURPLE_CALLBACK(displayed_msg_update_ui_cb), buddy); + } + } + case PURPLE_CONV_TYPE_CHAT: + { + PurpleChat *chat = purple_blist_find_chat(conv->account, conv->name); + struct _pidgin_blist_node *ui; + if (!chat) + break; + ui = chat->node.ui_data; + if (!ui) + break; + ui->conv.conv = conv; + ui->conv.flags = 0; + ui->conv.last_message = 0; + purple_signal_connect(purple_conversations_get_handle(), "deleting-conversation", + ui, PURPLE_CALLBACK(conversation_deleted_update_ui_cb), ui); + purple_signal_connect(purple_conversations_get_handle(), "wrote-chat-msg", + ui, PURPLE_CALLBACK(written_msg_update_ui_cb), chat); + purple_signal_connect(pidgin_conversations_get_handle(), "displayed-chat-msg", + ui, PURPLE_CALLBACK(displayed_msg_update_ui_cb), chat); + } + default: + break; + } +} + /********************************************************************************** * Public API Functions * **********************************************************************************/ @@ -4681,6 +4936,9 @@ purple_signal_connect(purple_conversations_get_handle(), "deleting-conversation", gtkblist, PURPLE_CALLBACK(conversation_deleting_cb), gtkblist); + purple_signal_connect(purple_conversations_get_handle(), "conversation-created", + gtkblist, PURPLE_CALLBACK(conversation_created_cb), + gtkblist); gtk_widget_hide(gtkblist->headline_hbox); gtk_widget_hide(gtkblist->error_buttons); @@ -4787,6 +5045,7 @@ if(gtknode->recent_signonoff_timer > 0) purple_timeout_remove(gtknode->recent_signonoff_timer); + purple_signals_disconnect_by_handle(node->ui_data); g_free(node->ui_data); node->ui_data = NULL; } @@ -4951,7 +5210,7 @@ STATUS_ICON_COLUMN, NULL, NAME_COLUMN, title, NODE_COLUMN, gnode, - BGCOLOR_COLUMN, &bgcolor, + /* BGCOLOR_COLUMN, &bgcolor, */ GROUP_EXPANDER_COLUMN, TRUE, GROUP_EXPANDER_VISIBLE_COLUMN, TRUE, CONTACT_EXPANDER_VISIBLE_COLUMN, FALSE, @@ -5211,14 +5470,17 @@ GdkPixbuf *emblem; char *mark; gboolean showicons = purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_buddy_icons"); - const char *name = purple_chat_get_name(chat); - PurpleConversation *conv = - purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, name, chat->account); - gboolean hidden = (conv && !PIDGIN_CONVERSATION(conv)); - - if(!insert_node(list, node, &iter)) + PidginBlistNode *ui; + PurpleConversation *conv; + gboolean hidden; + + if (!insert_node(list, node, &iter)) return; + ui = node->ui_data; + conv = ui->conv.conv; + hidden = (conv && (ui->conv.flags & PIDGIN_BLIST_NODE_HAS_PENDING_MESSAGE)); + status = pidgin_blist_get_status_icon(node, PIDGIN_STATUS_ICON_SMALL); emblem = pidgin_blist_get_emblem(node); @@ -5640,6 +5902,12 @@ purple_blist_add_chat(chat, group, NULL); } + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->autojoin))) + purple_blist_node_set_bool((PurpleBlistNode*)chat, "gtk-autojoin", TRUE); + + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->persistent))) + purple_blist_node_set_bool((PurpleBlistNode*)chat, "gtk-persistent", TRUE); + gtk_widget_destroy(data->window); g_free(data->default_chat_name); g_list_free(data->entries); @@ -5934,6 +6202,11 @@ gtk_label_set_mnemonic_widget(GTK_LABEL(label), GTK_BIN(data->group_combo)->child); pidgin_set_accessible_label (data->group_combo, label); gtk_box_pack_end(GTK_BOX(rowbox), data->group_combo, TRUE, TRUE, 0); + + data->autojoin = gtk_check_button_new_with_mnemonic(_("Autojoin when account becomes online.")); + data->persistent = gtk_check_button_new_with_mnemonic(_("Hide chat when the window is closed.")); + gtk_box_pack_start(GTK_BOX(vbox), data->autojoin, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), data->persistent, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(data->window), "response", G_CALLBACK(add_chat_resp_cb), data);
--- a/pidgin/gtkblist.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkblist.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtkblist.h GTK+ Buddy List API * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkcellrendererexpander.c Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkcellrendererexpander.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /* * @file gtkcellrendererexpander.c GTK+ Cell Renderer Expander * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this @@ -269,6 +270,9 @@ cell_area->x + cell->xpad + (width / 2), cell_area->y + cell->ypad + (height / 2), cell->is_expanded ? GTK_EXPANDER_EXPANDED : GTK_EXPANDER_COLLAPSED); + if (cell->is_expanded) + gtk_paint_hline (widget->style, window, state, NULL, widget, NULL, 0, + widget->allocation.width, cell_area->y + cell_area->height); } static gboolean pidgin_cell_renderer_expander_activate(GtkCellRenderer *r,
--- a/pidgin/gtkcellrendererprogress.c Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkcellrendererprogress.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /* * @file gtkcellrendererprogress.c GTK+ Cell Renderer Progress * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkcertmgr.c Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkcertmgr.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /* * @file gtkcertmgr.c GTK+ Certificate Manager API * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkconn.c Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkconn.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /* * @file gtkconn.c GTK+ Connection API * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkconn.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkconn.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,7 +1,8 @@ /** * @file gtkconn.h GTK+ Connection API - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkconv.c Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkconv.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtkconv.c GTK+ Conversation API * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this @@ -69,6 +70,8 @@ #include "gtknickcolors.h" +#define CLOSE_CONV_TIMEOUT_SECS (10 * 60) + #define AUTO_RESPONSE "<AUTO-REPLY> : " typedef enum @@ -122,7 +125,6 @@ static GtkWidget *invite_dialog = NULL; static GtkWidget *warn_close_dialog = NULL; -static PidginWindow *hidden_convwin = NULL; static GList *window_list = NULL; /* Lists of status icons at all available sizes for use as window icons */ @@ -160,6 +162,7 @@ static gboolean infopane_press_cb(GtkWidget *widget, GdkEventButton *e, PidginConversation *conv); static gboolean pidgin_userlist_motion_cb (GtkWidget *w, GdkEventMotion *event, PidginConversation *gtkconv); static void pidgin_conv_leave_cb (GtkWidget *w, GdkEventCrossing *e, PidginConversation *gtkconv); +static void hide_conv(PidginConversation *gtkconv, gboolean closetimer); static void pidgin_conv_set_position_size(PidginWindow *win, int x, int y, int width, int height); @@ -207,12 +210,49 @@ **************************************************************************/ static gboolean -close_conv_cb(GtkWidget *w, GdkEventButton *event, PidginConversation *gtkconv) -{ +close_this_sucker(gpointer data) +{ + PidginConversation *gtkconv = data; GList *list = g_list_copy(gtkconv->convs); - g_list_foreach(list, (GFunc)purple_conversation_destroy, NULL); g_list_free(list); + return FALSE; +} + +static gboolean +close_conv_cb(GtkWidget *w, GdkEventButton *dontuse, PidginConversation *gtkconv) +{ + /* We are going to destroy the conversations immediately only if the 'close immediately' + * preference is selected. Otherwise, close the conversation after a reasonable timeout + * (I am going to consider 10 minutes as a 'reasonable timeout' here. + * For chats, close immediately if the chat is not in the buddylist, or if the chat is + * not marked 'Persistent' */ + PurpleConversation *conv = gtkconv->active_conv; + PurpleAccount *account = purple_conversation_get_account(conv); + const char *name = purple_conversation_get_name(conv); + + switch (purple_conversation_get_type(conv)) { + case PURPLE_CONV_TYPE_IM: + { + if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/im/close_immediately")) + close_this_sucker(gtkconv); + else + hide_conv(gtkconv, TRUE); + break; + } + case PURPLE_CONV_TYPE_CHAT: + { + PurpleChat *chat = purple_blist_find_chat(account, name); + if (!chat || + !purple_blist_node_get_bool(&chat->node, "gtk-persistent")) + close_this_sucker(gtkconv); + else + hide_conv(gtkconv, FALSE); + break; + } + default: + ; + } return TRUE; } @@ -1314,18 +1354,33 @@ add_remove_cb(NULL, PIDGIN_CONVERSATION(conv)); } -#if 0 -static void -menu_hide_conv_cb(gpointer data, guint action, GtkWidget *widget) -{ - PidginWindow *win = data; - PidginConversation *gtkconv = pidgin_conv_window_get_active_gtkconv(win); - PurpleConversation *conv = pidgin_conv_window_get_active_conversation(win); +static gboolean +close_already(gpointer data) +{ + purple_conversation_destroy(data); + return FALSE; +} + +static void +hide_conv(PidginConversation *gtkconv, gboolean closetimer) +{ + GList *list; + purple_signal_emit(pidgin_conversations_get_handle(), "conversation-hiding", gtkconv); - purple_conversation_set_ui_ops(conv, NULL); -} -#endif + + for (list = g_list_copy(gtkconv->convs); list; list = g_list_delete_link(list, list)) { + PurpleConversation *conv = list->data; + if (closetimer) { + guint timer = GPOINTER_TO_INT(purple_conversation_get_data(conv, "close-timer")); + if (timer) + purple_timeout_remove(timer); + timer = purple_timeout_add_seconds(CLOSE_CONV_TIMEOUT_SECS, close_already, conv); + purple_conversation_set_data(conv, "close-timer", GINT_TO_POINTER(timer)); + } + purple_conversation_set_ui_ops(conv, NULL); + } +} static void menu_close_conv_cb(gpointer data, guint action, GtkWidget *widget) @@ -2340,63 +2395,69 @@ return get_prpl_icon_list(account); } -GdkPixbuf * -pidgin_conv_get_tab_icon(PurpleConversation *conv, gboolean small_icon) -{ - PurpleAccount *account = NULL; - const char *name = NULL; - GdkPixbuf *status = NULL; - PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); - const char *icon_size = small_icon ? PIDGIN_ICON_SIZE_TANGO_MICROSCOPIC : PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL; - g_return_val_if_fail(conv != NULL, NULL); - - account = purple_conversation_get_account(conv); - name = purple_conversation_get_name(conv); - - g_return_val_if_fail(account != NULL, NULL); - g_return_val_if_fail(name != NULL, NULL); - - /* Use the buddy icon, if possible */ - if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) { - PurpleBuddy *b = purple_find_buddy(account, name); - if (b != NULL) { +static GdkPixbuf * +pidgin_conv_get_icon(PurpleConversation *conv, GtkWidget *parent, const char *icon_size) +{ + PurpleAccount *account = NULL; + const char *name = NULL; + GdkPixbuf *status = NULL; + PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); + g_return_val_if_fail(conv != NULL, NULL); + + account = purple_conversation_get_account(conv); + name = purple_conversation_get_name(conv); + + g_return_val_if_fail(account != NULL, NULL); + g_return_val_if_fail(name != NULL, NULL); + + /* Use the buddy icon, if possible */ + if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) { + PurpleBuddy *b = purple_find_buddy(account, name); + if (b != NULL) { PurplePresence *p = purple_buddy_get_presence(b); - /* I hate this hack. It fixes a bug where the pending message icon - * displays in the conv tab even though it shouldn't. - * A better solution would be great. */ - if (ops && ops->update) - ops->update(NULL, (PurpleBlistNode*)b); + /* I hate this hack. It fixes a bug where the pending message icon + * displays in the conv tab even though it shouldn't. + * A better solution would be great. */ + if (ops && ops->update) + ops->update(NULL, (PurpleBlistNode*)b); /* XXX Seanegan: We really need a util function to return a pixbuf for a Presence to avoid all this switching */ if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_AWAY)) - status = pidgin_create_status_icon(PURPLE_STATUS_AWAY, PIDGIN_CONVERSATION(conv)->icon, icon_size); + status = pidgin_create_status_icon(PURPLE_STATUS_AWAY, parent, icon_size); else if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_EXTENDED_AWAY)) - status = pidgin_create_status_icon(PURPLE_STATUS_EXTENDED_AWAY, PIDGIN_CONVERSATION(conv)->icon, icon_size); - else if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_OFFLINE)) - status = pidgin_create_status_icon(PURPLE_STATUS_OFFLINE, PIDGIN_CONVERSATION(conv)->icon, icon_size); - else if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_AVAILABLE)) - status = pidgin_create_status_icon(PURPLE_STATUS_AVAILABLE, PIDGIN_CONVERSATION(conv)->icon, icon_size); - else if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_INVISIBLE)) - status = pidgin_create_status_icon(PURPLE_STATUS_INVISIBLE, PIDGIN_CONVERSATION(conv)->icon, icon_size); - else if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_UNAVAILABLE)) - status = pidgin_create_status_icon(PURPLE_STATUS_UNAVAILABLE, PIDGIN_CONVERSATION(conv)->icon, icon_size); - } - } - - /* If they don't have a buddy icon, then use the PRPL icon */ - if (status == NULL) { + status = pidgin_create_status_icon(PURPLE_STATUS_EXTENDED_AWAY, parent, icon_size); + else if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_OFFLINE)) + status = pidgin_create_status_icon(PURPLE_STATUS_OFFLINE, parent, icon_size); + else if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_AVAILABLE)) + status = pidgin_create_status_icon(PURPLE_STATUS_AVAILABLE, parent, icon_size); + else if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_INVISIBLE)) + status = pidgin_create_status_icon(PURPLE_STATUS_INVISIBLE, parent, icon_size); + else if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_UNAVAILABLE)) + status = pidgin_create_status_icon(PURPLE_STATUS_UNAVAILABLE, parent, icon_size); + } + } + + /* If they don't have a buddy icon, then use the PRPL icon */ + if (status == NULL) { GtkIconSize size = gtk_icon_size_from_name(icon_size); if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) { - status = gtk_widget_render_icon (PIDGIN_CONVERSATION(conv)->icon, PIDGIN_STOCK_STATUS_PERSON, - size, "GtkWidget"); + status = gtk_widget_render_icon (parent, PIDGIN_STOCK_STATUS_PERSON, + size, "GtkWidget"); } else { - status = gtk_widget_render_icon (PIDGIN_CONVERSATION(conv)->icon, PIDGIN_STOCK_STATUS_CHAT, - size, "GtkWidget"); + status = gtk_widget_render_icon (parent, PIDGIN_STOCK_STATUS_CHAT, + size, "GtkWidget"); } } return status; } +GdkPixbuf * +pidgin_conv_get_tab_icon(PurpleConversation *conv, gboolean small_icon) +{ + const char *icon_size = small_icon ? PIDGIN_ICON_SIZE_TANGO_MICROSCOPIC : PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL; + return pidgin_conv_get_icon(conv, PIDGIN_CONVERSATION(conv)->icon, icon_size); +} + static void update_tab_icon(PurpleConversation *conv) @@ -2748,9 +2809,9 @@ PidginConversation *gtkconv = PIDGIN_CONVERSATION(conv); GdkModifierType state; - if(gtkconv->win==hidden_convwin) { - pidgin_conv_window_remove_gtkconv(hidden_convwin, gtkconv); - pidgin_conv_placement_place(gtkconv); + if (gtkconv == NULL) { + pidgin_conv_attach_to_conversation(conv); + gtkconv = PIDGIN_CONVERSATION(conv); } pidgin_conv_switch_active_conversation(conv); @@ -2783,15 +2844,19 @@ PurpleConversation *conv = (PurpleConversation*)l->data; PidginConversation *gtkconv = PIDGIN_CONVERSATION(conv); - if(gtkconv == NULL || gtkconv->active_conv != conv) + if (gtkconv != NULL && gtkconv->active_conv != conv) continue; - - if (gtkconv->unseen_state >= min_state - && (!hidden_only || - (hidden_only && gtkconv->win == hidden_convwin))) { - + if (gtkconv == NULL) { + if (!hidden_only || + !purple_conversation_get_data(conv, "unseen-count")) + continue; r = g_list_prepend(r, conv); c++; + } else { + if (gtkconv->unseen_state >= min_state && !hidden_only) { + r = g_list_prepend(r, conv); + c++; + } } } @@ -2831,11 +2896,11 @@ PidginConversation *gtkconv = PIDGIN_CONVERSATION(conv); GtkWidget *icon = gtk_image_new(); - GdkPixbuf *pbuf = pidgin_conv_get_tab_icon(conv, TRUE); + GdkPixbuf *pbuf = pidgin_conv_get_icon(conv, icon, PIDGIN_ICON_SIZE_TANGO_MICROSCOPIC); GtkWidget *item; gchar *text = g_strdup_printf("%s (%d)", - gtk_label_get_text(GTK_LABEL(gtkconv->tab_label)), - gtkconv->unseen_count); + gtkconv ? gtk_label_get_text(GTK_LABEL(gtkconv->tab_label)) : purple_conversation_get_name(conv), + gtkconv ? gtkconv->unseen_count : GPOINTER_TO_INT(purple_conversation_get_data(conv, "unseen-count"))); gtk_image_set_from_pixbuf(GTK_IMAGE(icon), pbuf); g_object_unref(pbuf); @@ -3093,7 +3158,7 @@ PurpleConversation *conv; GtkWidget *item; - if (win->window == NULL || win == hidden_convwin) + if (win->window == NULL) return; gtkconv = pidgin_conv_window_get_active_gtkconv(win); @@ -4942,6 +5007,9 @@ GtkWidget *tab_cont; PurpleBlistNode *convnode; + if (hidden) + return; + if (conv_type == PURPLE_CONV_TYPE_IM && (gtkconv = pidgin_conv_find_gtkconv(conv))) { conv->ui_data = gtkconv; if (!g_list_find(gtkconv->convs, conv)) @@ -5041,10 +5109,7 @@ G_CALLBACK(gtk_widget_grab_focus), gtkconv->entry); - if (hidden) - pidgin_conv_window_add_gtkconv(hidden_convwin, gtkconv); - else - pidgin_conv_placement_place(gtkconv); + pidgin_conv_placement_place(gtkconv); if (nick_colors == NULL) { nbr_nick_colors = NUM_NICK_COLORS; @@ -5052,11 +5117,13 @@ } } +#if 0 static void pidgin_conv_new_hidden(PurpleConversation *conv) { private_gtkconv_new(conv, TRUE); } +#endif void pidgin_conv_new(PurpleConversation *conv) @@ -5069,26 +5136,22 @@ PurpleConversation *conv, PurpleMessageFlags flags) { PurpleConversationUiOps *ui_ops = pidgin_conversations_get_conv_ui_ops(); - if (conv != NULL) - return; /* create hidden conv if hide_new pref is always */ - if (strcmp(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/conversations/im/hide_new"), "always") == 0) - { - ui_ops->create_conversation = pidgin_conv_new_hidden; - purple_conversation_new(PURPLE_CONV_TYPE_IM, account, sender); - ui_ops->create_conversation = pidgin_conv_new; - return; - } - - /* create hidden conv if hide_new pref is away and account is away */ - if (strcmp(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/conversations/im/hide_new"), "away") == 0 && - !purple_status_is_available(purple_account_get_active_status(account))) - { - ui_ops->create_conversation = pidgin_conv_new_hidden; - purple_conversation_new(PURPLE_CONV_TYPE_IM, account, sender); - ui_ops->create_conversation = pidgin_conv_new; - return; + /* or if hide_new pref is away and account is away */ + if ((strcmp(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/conversations/im/hide_new"), "always") == 0) || + (strcmp(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/conversations/im/hide_new"), "away") == 0 && + !purple_status_is_available(purple_account_get_active_status(account)))) { + if (!conv) { + ui_ops->create_conversation = NULL; + conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, sender); + purple_conversation_set_ui_ops(conv, NULL); + ui_ops->create_conversation = pidgin_conv_new; + } + } else { + /* new message for an IM */ + if (conv && conv->type == PURPLE_CONV_TYPE_IM) + pidgin_conv_attach_to_conversation(conv); } } @@ -5097,6 +5160,9 @@ { PidginConversation *gtkconv = PIDGIN_CONVERSATION(conv); + if (!gtkconv) + return; + gtkconv->convs = g_list_remove(gtkconv->convs, conv); /* Don't destroy ourselves until all our convos are gone */ if (gtkconv->convs) { @@ -6349,8 +6415,13 @@ if ((purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) && (gtkconv->u.im->anim)) { + PurpleBuddy *buddy = purple_find_buddy(conv->account, conv->name); window_icon = gdk_pixbuf_animation_get_static_image(gtkconv->u.im->anim); + + if (buddy && !PURPLE_BUDDY_IS_ONLINE(buddy)) + gdk_pixbuf_saturate_and_pixelate(window_icon, window_icon, 0.0, FALSE); + g_object_ref(window_icon); l = g_list_append(l, window_icon); } else { @@ -6569,6 +6640,19 @@ pidgin_conv_update_fields(conv, flags); } +static void +wrote_msg_update_unseen_cb(PurpleAccount *account, const char *who, const char *message, + PurpleConversation *conv, PurpleMessageFlags flag, gpointer null) +{ + if (conv == NULL || PIDGIN_IS_PIDGIN_CONVERSATION(conv)) + return; + if (flag & (PURPLE_MESSAGE_SEND | PURPLE_MESSAGE_RECV)) { + purple_conversation_set_data(conv, "unseen-count", + GINT_TO_POINTER(GPOINTER_TO_INT(purple_conversation_get_data(conv, "unseen-count")) + 1)); + purple_conversation_update(conv, PURPLE_CONV_UPDATE_UNSEEN); + } +} + static PurpleConversationUiOps conversation_ui_ops = { pidgin_conv_new, @@ -7066,6 +7150,7 @@ account_status_changed_cb(PurpleAccount *account, PurpleStatus *oldstatus, PurpleStatus *newstatus) { +#if 0 GList *l; PurpleConversation *conv = NULL; PidginConversation *gtkconv; @@ -7075,27 +7160,7 @@ if(purple_status_is_available(oldstatus) || !purple_status_is_available(newstatus)) return; - - while ((l = hidden_convwin->gtkconvs) != NULL) - { - gtkconv = l->data; - - conv = gtkconv->active_conv; - - while(l && !purple_status_is_available( - purple_account_get_active_status( - purple_conversation_get_account(conv)))) - l = l->next; - if (!l) - break; - - pidgin_conv_window_remove_gtkconv(hidden_convwin, gtkconv); - pidgin_conv_placement_place(gtkconv); - - /* TODO: do we need to do anything for any other conversations that are in the same gtkconv here? - * I'm a little concerned that not doing so will cause the "pending" indicator in the gtkblist not to be cleared. -DAA*/ - purple_conversation_update(conv, PURPLE_CONV_UPDATE_UNSEEN); - } +#endif } static void @@ -7103,32 +7168,25 @@ gconstpointer value, gpointer data) { GList *l; - PurpleConversation *conv = NULL; - PidginConversation *gtkconv; gboolean when_away = FALSE; - if(!hidden_convwin) - return; - if(strcmp(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/conversations/im/hide_new"), "always")==0) return; if(strcmp(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/conversations/im/hide_new"), "away")==0) when_away = TRUE; - while ((l = hidden_convwin->gtkconvs) != NULL) + for (l = purple_get_conversations(); l; l = l->next) { - gtkconv = l->data; - - conv = gtkconv->active_conv; - + PurpleConversation *conv = l->data; + PidginConversation *gtkconv = PIDGIN_CONVERSATION(conv); + if (gtkconv) + continue; if(when_away && !purple_status_is_available( purple_account_get_active_status( purple_conversation_get_account(conv)))) continue; - - pidgin_conv_window_remove_gtkconv(hidden_convwin, gtkconv); - pidgin_conv_placement_place(gtkconv); + pidgin_conv_attach_to_conversation(conv); } } @@ -7311,9 +7369,15 @@ PidginConversation *gtkconv = data; int count = 0; int timer = gtkconv->attach.timer; + time_t when = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(gtkconv->entry), "attach-start-time")); + gtkconv->attach.timer = 0; while (gtkconv->attach.current && count < 100) { /* XXX: 100 is a random value here */ PurpleConvMessage *msg = gtkconv->attach.current->data; + if (when && when < msg->when) { + gtk_imhtml_append_text(GTK_IMHTML(gtkconv->imhtml), "<BR><HR>", 0); + g_object_set_data(G_OBJECT(gtkconv->entry), "attach-start-time", NULL); + } pidgin_conv_write_conv(gtkconv->active_conv, msg->who, msg->who, msg->what, msg->flags, msg->when); gtkconv->attach.current = gtkconv->attach.current->prev; count++; @@ -7333,18 +7397,21 @@ { GList *list; PidginConversation *gtkconv; + int timer; if (PIDGIN_IS_PIDGIN_CONVERSATION(conv)) return FALSE; + purple_conversation_set_data(conv, "unseen-count", NULL); purple_conversation_set_ui_ops(conv, pidgin_conversations_get_conv_ui_ops()); private_gtkconv_new(conv, FALSE); gtkconv = PIDGIN_CONVERSATION(conv); list = purple_conversation_get_message_history(conv); if (list) { - list = g_list_last(list); - gtkconv->attach.current = list; + g_object_set_data(G_OBJECT(gtkconv->entry), "attach-start-time", + GINT_TO_POINTER(((PurpleConvMessage*)(list->data))->when)); + gtkconv->attach.current = g_list_last(list); gtkconv->attach.timer = g_idle_add(add_message_history_to_gtkconv, gtkconv); } else { purple_signal_emit(pidgin_conversations_get_handle(), @@ -7356,6 +7423,10 @@ pidgin_conv_chat_add_users(conv, PURPLE_CONV_CHAT(conv)->in_room, TRUE); } + timer = GPOINTER_TO_INT(purple_conversation_get_data(conv, "close-timer")); + if (timer) + purple_timeout_remove(timer); + return TRUE; } @@ -7421,6 +7492,7 @@ purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/im/show_buddy_icons", TRUE); purple_prefs_add_string(PIDGIN_PREFS_ROOT "/conversations/im/hide_new", "never"); + purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/im/close_immediately", FALSE); #ifdef _WIN32 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/win32/minimize_new_convs", FALSE); @@ -7584,9 +7656,6 @@ purple_conversations_set_ui_ops(&conversation_ui_ops); - hidden_convwin = pidgin_conv_window_new(); - window_list = g_list_remove(window_list, hidden_convwin); - purple_signal_connect(purple_accounts_get_handle(), "account-status-changed", handle, PURPLE_CALLBACK(account_status_changed_cb), NULL); @@ -7622,6 +7691,10 @@ purple_signal_connect_priority(purple_conversations_get_handle(), "conversation-updated", handle, PURPLE_CALLBACK(pidgin_conv_updated), NULL, PURPLE_SIGNAL_PRIORITY_LOWEST); + purple_signal_connect(purple_conversations_get_handle(), "wrote-im-msg", handle, + PURPLE_CALLBACK(wrote_msg_update_unseen_cb), NULL); + purple_signal_connect(purple_conversations_get_handle(), "wrote-chat-msg", handle, + PURPLE_CALLBACK(wrote_msg_update_unseen_cb), NULL); } void @@ -7630,8 +7703,6 @@ purple_prefs_disconnect_by_handle(pidgin_conversations_get_handle()); purple_signals_disconnect_by_handle(pidgin_conversations_get_handle()); purple_signals_unregister_by_instance(pidgin_conversations_get_handle()); - pidgin_conv_window_destroy(hidden_convwin); - hidden_convwin=NULL; } @@ -8763,15 +8834,10 @@ if (win->gtkconvs) { while (win->gtkconvs) { - GList *nextgtk = win->gtkconvs->next; - PidginConversation *gtkconv = win->gtkconvs->data; - GList *nextcore = gtkconv->convs->next; - PurpleConversation *conv = gtkconv->convs->data; - purple_conversation_destroy(conv); - if (!nextgtk && !nextcore) - /* we'll end up invoking ourselves when we destroy our last child */ - /* so don't destroy ourselves right now */ - return; + gboolean last = (win->gtkconvs->next == NULL); + close_conv_cb(NULL, NULL, win->gtkconvs->data); + if (last) + break; } return; } @@ -9048,7 +9114,7 @@ if (win->gtkconvs && win->gtkconvs->next == NULL) pidgin_conv_tab_pack(win, win->gtkconvs->data); - if (!win->gtkconvs && win != hidden_convwin) + if (!win->gtkconvs) pidgin_conv_window_destroy(win); } @@ -9587,9 +9653,7 @@ gboolean pidgin_conv_is_hidden(PidginConversation *gtkconv) { - g_return_val_if_fail(gtkconv != NULL, FALSE); - - return (gtkconv->win == hidden_convwin); + return (gtkconv == NULL); } @@ -9690,3 +9754,4 @@ return colors; } +
--- a/pidgin/gtkconv.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkconv.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtkconv.h GTK+ Conversation API * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkconvwin.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkconvwin.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtkconvwin.h GTK+ Conversation Window API * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkdebug.c Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkdebug.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtkdebug.c GTK+ Debug API * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkdebug.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkdebug.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtkdebug.h GTK+ Debug API * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkdialogs.c Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkdialogs.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /* * @file gtkdialogs.c GTK+ Dialogs * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkdialogs.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkdialogs.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,7 +1,8 @@ /** * @defgroup pidgin Pidgin (GTK+ User Interface) - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkdnd-hints.c Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkdnd-hints.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /* * @file gtkdnd-hints.c GTK+ Drag-and-Drop arrow hints * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkdnd-hints.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkdnd-hints.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtkdnd-hints.h GTK+ Drag-and-Drop arrow hints * @ingroup pidgin - * - * Pidgin is the legal property of its developers, whose names are too numerous + */ + +/* Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this * source distribution. *
--- a/pidgin/gtkeventloop.c Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkeventloop.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtk_eventloop.c Purple Event Loop API (gtk implementation) * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkeventloop.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkeventloop.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtkeventloop.h Pidgin GTK+ Event Loop Implementation * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkft.c Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkft.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtkft.c GTK+ File Transfer UI * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkft.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkft.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtkft.h GTK+ File Transfer UI * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkgaim-compat.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkgaim-compat.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,7 +1,8 @@ /** * @file gtkgaim-compat.h Gtk Gaim Compat macros - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkidle.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkidle.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtkidle.h GTK+ Idle API * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkimhtml.c Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkimhtml.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /* * @file gtkimhtml.c GTK+ IMHtml * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkimhtml.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkimhtml.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtkimhtml.h GTK+ IM/HTML rendering component * @ingroup pidgin - * - * Pidgin is the legal property of its developers, whose names are too numerous + */ + +/* Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this * source distribution. *
--- a/pidgin/gtkimhtmltoolbar.c Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkimhtmltoolbar.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /* * @file gtkimhtmltoolbar.c GTK+ IMHtml Toolbar * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this @@ -739,11 +740,11 @@ while (it != NULL) { it_tmp = it; - gtk_box_pack_start(GTK_BOX(line), it->button, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(line), it->button, FALSE, FALSE, 0); gtk_widget_show(it->button); line_width += it->width; if (line_width >= max_line_width) { - gtk_box_pack_start(GTK_BOX(smiley_table), line, FALSE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(smiley_table), line, FALSE, FALSE, 0); line = gtk_hbox_new(FALSE, 0); line_width = 0; col = 0; @@ -1162,6 +1163,7 @@ GtkWidget *label; GtkWidget *insert_button; GtkWidget *font_button; + GtkWidget *smiley_button; GtkWidget *font_menu; GtkWidget *insert_menu; GtkWidget *menuitem; @@ -1263,12 +1265,6 @@ insert_menu = gtk_menu_new(); g_object_set_data(G_OBJECT(toolbar), "insert_menu", insert_menu); - menuitem = gtk_menu_item_new_with_mnemonic(_("_Smiley")); - g_signal_connect_swapped(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_button_clicked), toolbar->smiley); - gtk_menu_shell_append(GTK_MENU_SHELL(insert_menu), menuitem); - g_signal_connect(G_OBJECT(toolbar->smiley), "notify::sensitive", - G_CALLBACK(button_sensitiveness_changed), menuitem); - menuitem = gtk_menu_item_new_with_mnemonic(_("_Image")); g_signal_connect_swapped(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_button_clicked), toolbar->image); gtk_menu_shell_append(GTK_MENU_SHELL(insert_menu), menuitem); @@ -1290,6 +1286,24 @@ g_signal_connect(G_OBJECT(insert_button), "activate", G_CALLBACK(pidgin_menu_clicked), insert_menu); g_signal_connect(G_OBJECT(insert_menu), "deactivate", G_CALLBACK(pidgin_menu_deactivate), insert_button); toolbar->sml = NULL; + + /* Sep */ + sep = gtk_vseparator_new(); + gtk_box_pack_start(GTK_BOX(box), sep, FALSE, FALSE, 0); + gtk_widget_show_all(sep); + + /* Smiley */ + smiley_button = gtk_button_new(); + gtk_button_set_relief(GTK_BUTTON(smiley_button), GTK_RELIEF_NONE); + bbox = gtk_hbox_new(FALSE, 3); + gtk_container_add(GTK_CONTAINER(smiley_button), bbox); + image = gtk_image_new_from_stock(PIDGIN_STOCK_TOOLBAR_SMILEY, gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL)); + gtk_box_pack_start(GTK_BOX(bbox), image, FALSE, FALSE, 0); + label = gtk_label_new_with_mnemonic(_("_Smiley")); + gtk_box_pack_start(GTK_BOX(bbox), label, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(box), smiley_button, FALSE, FALSE, 0); + g_signal_connect_swapped(G_OBJECT(smiley_button), "clicked", G_CALLBACK(gtk_button_clicked), toolbar->smiley); + gtk_widget_show_all(smiley_button); gtk_box_pack_start(GTK_BOX(hbox), box, FALSE, FALSE, 0); g_object_set_data(G_OBJECT(hbox), "lean-view", box);
--- a/pidgin/gtklog.c Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtklog.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtklog.c GTK+ Log viewer * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtklog.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtklog.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtklog.h GTK+ Log viewer * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkmenutray.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkmenutray.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtkmenutray.h GTK+ Tray menu item * @ingroup pidgin - * - * Pidgin is the legal property of its developers, whose names are too numerous + */ + +/* Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this * source distribution. *
--- a/pidgin/gtknickcolors.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtknickcolors.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtknickcolors.h GTK+ Conversation API * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this * source distribution.
--- a/pidgin/gtknotify.c Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtknotify.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtknotify.c GTK+ Notification API * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtknotify.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtknotify.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtknotify.h GTK+ Notification API * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkplugin.c Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkplugin.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtkplugin.c GTK+ Plugins support * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkplugin.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkplugin.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtkplugin.h GTK+ Plugin API * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkpluginpref.c Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkpluginpref.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtkpluginpref.c GTK+ Plugin preferences * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkpluginpref.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkpluginpref.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtkpluginpref.h GTK+ Plugin Preferences * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkpounce.c Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkpounce.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtkpounce.c GTK+ Buddy Pounce API * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkpounce.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkpounce.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtkpounce.h GTK+ Buddy Pounce API * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkprefs.c Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkprefs.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtkprefs.c GTK+ Preferences * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this @@ -993,6 +994,8 @@ pidgin_prefs_checkbox(_("Show _formatting on incoming messages"), PIDGIN_PREFS_ROOT "/conversations/show_incoming_formatting", vbox); + pidgin_prefs_checkbox(_("Close IMs immediately when the tab is closed"), + PIDGIN_PREFS_ROOT "/conversations/im/close_immediately", vbox); iconpref1 = pidgin_prefs_checkbox(_("Show _detailed information"), PIDGIN_PREFS_ROOT "/conversations/im/show_buddy_icons", vbox); @@ -1093,7 +1096,7 @@ const char *proxy = value; if (strcmp(proxy, "none") && strcmp(proxy, "envvar")) - gtk_widget_show_all(frame); + gtk_widget_show_all(frame); else gtk_widget_hide(frame); }
--- a/pidgin/gtkprefs.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkprefs.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtkprefs.h GTK+ Preferences * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkprivacy.c Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkprivacy.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtkprivacy.c GTK+ Privacy UI * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkprivacy.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkprivacy.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtkprivacy.h GTK+ Privacy UI * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkrequest.c Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkrequest.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtkrequest.c GTK+ Request API * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this @@ -998,7 +999,6 @@ /* Create the tree view */ treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); - gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(treeview), TRUE); gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), FALSE); sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
--- a/pidgin/gtkrequest.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkrequest.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtkrequest.h GTK+ Request API * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkroomlist.c Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkroomlist.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtkroomlist.c GTK+ Room List UI * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkroomlist.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkroomlist.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtkroomlist.h GTK+ Room List UI * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtksavedstatuses.c Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtksavedstatuses.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtksavedstatus.c GTK+ Saved Status Editor UI * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtksavedstatuses.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtksavedstatuses.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtksavedstatuses.h GTK+ Saved Status Editor UI * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkscrollbook.c Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkscrollbook.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /* * @file gtkscrollbook.c GTK+ Scrolling notebook widget * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkscrollbook.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkscrollbook.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /* * @file gtkscrollbook GTK+ Scrolling notebook Widget * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtksession.c Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtksession.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /* * @file gtksession.c X Windows session management API * @ingroup pidgin - * - * Pidgin is the legal property of its developers, whose names are too numerous + */ + +/* Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this * source distribution. *
--- a/pidgin/gtksession.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtksession.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtksession.h X Windows session management API * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtksound.c Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtksound.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /* * @file gtksound.c GTK+ Sound * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtksound.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtksound.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtksound.h GTK+ Sound API * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkstatusbox.c Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkstatusbox.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /* * @file gtkstatusbox.c GTK+ Status Selection Widget * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkstatusbox.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkstatusbox.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /* * @file gtkstatusbox.c GTK+ Status Selection Widget * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkthemes.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkthemes.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtkthemes.h GTK+ Smiley Theme API * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkutils.c Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkutils.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtkutils.c GTK+ utility functions * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkutils.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkutils.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file gtkutils.h GTK+ utility functions * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/gtkwhiteboard.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/gtkwhiteboard.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,7 +1,8 @@ /** * @file gtkwhiteboard.h The PidginWhiteboard frontend object - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/pidgin.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/pidgin.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file pidgin.h UI definitions and includes * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/pidginstock.c Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/pidginstock.c Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file pidginstock.c GTK+ Stock resources * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/pidginstock.h Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/pidginstock.h Sun Sep 16 05:31:33 2007 +0000 @@ -1,8 +1,9 @@ /** * @file pidginstock.h GTK+ Stock resources * @ingroup pidgin - * - * pidgin + */ + +/* pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this
--- a/pidgin/pixmaps/emblems/16/Makefile.am Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/pixmaps/emblems/16/Makefile.am Sun Sep 16 05:31:33 2007 +0000 @@ -12,6 +12,7 @@ hiptop.png \ male.png \ mobile.png \ + music.png \ not-authorized.png \ operator.png \ qq-member.png \
--- a/pidgin/pixmaps/emblems/16/scalable/Makefile.am Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/pixmaps/emblems/16/scalable/Makefile.am Sun Sep 16 05:31:33 2007 +0000 @@ -7,6 +7,7 @@ game.svg \ male.svg \ mobile.svg \ + music.svg \ not-authorized.svg \ qq-member.svg \ secure.svg \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/pixmaps/emblems/16/scalable/music.svg Sun Sep 16 05:31:33 2007 +0000 @@ -0,0 +1,187 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://web.resource.org/cc/" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="16" + id="svg2" + sodipodi:version="0.32" + inkscape:version="0.45" + sodipodi:modified="true" + version="1.0"> + <defs + id="defs4"> + <linearGradient + inkscape:collect="always" + id="linearGradient3185"> + <stop + style="stop-color:#4e9a06;stop-opacity:1;" + offset="0" + id="stop3187" /> + <stop + style="stop-color:#4e9a06;stop-opacity:0" + offset="1" + id="stop3189" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient3177"> + <stop + style="stop-color:#4e9a06;stop-opacity:1;" + offset="0" + id="stop3179" /> + <stop + style="stop-color:#4e9a06;stop-opacity:0;" + offset="1" + id="stop3181" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient3153"> + <stop + style="stop-color:#eeeeec;stop-opacity:1;" + offset="0" + id="stop3155" /> + <stop + style="stop-color:#eeeeec;stop-opacity:0;" + offset="1" + id="stop3157" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3153" + id="linearGradient3159" + x1="2.5409546" + y1="10.048674" + x2="10.378205" + y2="15.928688" + gradientUnits="userSpaceOnUse" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3177" + id="radialGradient3183" + cx="5.2116022" + cy="8.4051199" + fx="5.2116022" + fy="8.4051199" + r="2.9404981" + gradientTransform="matrix(2.6050387,0,0,2.2888674,-8.415579,-10.767812)" + gradientUnits="userSpaceOnUse" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3185" + id="radialGradient3191" + cx="5.1978397" + cy="8.4135866" + fx="5.1978397" + fy="8.4135866" + r="3.1428281" + gradientTransform="matrix(2.8202152,0,0,2.4999643,-9.461187,-12.455954)" + gradientUnits="userSpaceOnUse" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + gridtolerance="10000" + guidetolerance="10" + objecttolerance="10" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="22.4" + inkscape:cx="19.784002" + inkscape:cy="11.848" + inkscape:document-units="px" + inkscape:current-layer="layer1" + width="16px" + height="16px" + showgrid="true" + inkscape:window-width="1440" + inkscape:window-height="847" + inkscape:window-x="0" + inkscape:window-y="22" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1"> + <path + sodipodi:type="arc" + style="opacity:1;fill:#555753;fill-opacity:1;stroke:#222728;stroke-width:1.14297926;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path2160" + sodipodi:cx="6.4712896" + sodipodi:cy="14.484771" + sodipodi:rx="3.5986683" + sodipodi:ry="2.1781414" + d="M 10.069958 14.484771 A 3.5986683 2.1781414 0 1 1 2.8726213,14.484771 A 3.5986683 2.1781414 0 1 1 10.069958 14.484771 z" + transform="matrix(0.8336417,0,0,0.918214,4.1052631,-0.8001194)" /> + <rect + style="opacity:1;fill:#222728;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect3143" + width="1" + height="12" + x="12" + y="1" + rx="0.18940361" + ry="0.20662212" /> + <path + style="fill:#222728;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M 12.006464,3.0203051 L 11.981638,1 C 13.945163,1 17.837365,1.1548232 14.996311,7.9684328 C 15.596089,2.2547574 13.743811,3.0203051 12.006464,3.0203051 z " + id="rect3146" + sodipodi:nodetypes="cccc" /> + <path + sodipodi:type="arc" + style="opacity:1;fill:#555753;fill-opacity:1;stroke:url(#linearGradient3159);stroke-width:1.97969818;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path3151" + sodipodi:cx="6.4712896" + sodipodi:cy="14.484771" + sodipodi:rx="3.5986683" + sodipodi:ry="2.1781414" + d="M 10.069958 14.484771 A 3.5986683 2.1781414 0 1 1 2.8726213,14.484771 A 3.5986683 2.1781414 0 1 1 10.069958 14.484771 z" + transform="matrix(0.5557611,0,0,0.4591071,5.903509,5.8499391)" /> + <path + sodipodi:type="arc" + style="opacity:1;fill:none;fill-opacity:1;stroke:url(#radialGradient3191);stroke-width:0.98568761;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path3173" + sodipodi:cx="8.0970039" + sodipodi:cy="11.122857" + sodipodi:rx="4.3089318" + sodipodi:ry="3.5513175" + d="M 3.9729753,12.152015 A 4.3089318,3.5513175 0 0 1 9.0871283,7.6665672" + transform="matrix(1.0443424,0,0,0.9855497,-0.4560443,3.7870959e-2)" + sodipodi:start="2.8475788" + sodipodi:end="4.9442449" + sodipodi:open="true" /> + <path + sodipodi:type="arc" + style="opacity:1;fill:none;fill-opacity:1;stroke:url(#radialGradient3183);stroke-width:0.58102763;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path3175" + sodipodi:cx="8.0970039" + sodipodi:cy="11.122857" + sodipodi:rx="4.3089318" + sodipodi:ry="3.5513175" + d="M 3.9729753,12.152015 A 4.3089318,3.5513175 0 0 1 9.0871283,7.6665672" + transform="matrix(1.6981233,0,0,1.7443645,-5.9310642,-8.697544)" + sodipodi:start="2.8475788" + sodipodi:end="4.9442449" + sodipodi:open="true" /> + </g> +</svg>
--- a/pidgin/pixmaps/emotes/default/24/default.theme.in Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/pixmaps/emotes/default/24/default.theme.in Sun Sep 16 05:31:33 2007 +0000 @@ -262,7 +262,6 @@ shout.png >:o >:O beer.png *DRINK* smile-big.png :-D :D -moneymouth.png :-$ glasses-cool.png 8-) in-love.png *IN\ LOVE* ! skywalker.png C:-) c:-) C:) c:)
--- a/pidgin/plugins/pidginrc.c Sun Sep 16 05:30:13 2007 +0000 +++ b/pidgin/plugins/pidginrc.c Sun Sep 16 05:31:33 2007 +0000 @@ -57,22 +57,16 @@ static const gchar *font_prefs[] = { "/plugins/gtk/purplerc/font/*pidgin_conv_entry", - "/plugins/gtk/purplerc/font/*pidgin_conv_imhtml", - "/plugins/gtk/purplerc/font/*pidgin_log_imhtml", "/plugins/gtk/purplerc/font/*pidgin_request_imhtml", "/plugins/gtk/purplerc/font/*pidgin_notify_imhtml", }; static const gchar *font_prefs_set[] = { "/plugins/gtk/purplerc/set/font/*pidgin_conv_entry", - "/plugins/gtk/purplerc/set/font/*pidgin_conv_imhtml", - "/plugins/gtk/purplerc/set/font/*pidgin_log_imhtml", "/plugins/gtk/purplerc/set/font/*pidgin_request_imhtml", "/plugins/gtk/purplerc/set/font/*pidgin_notify_imhtml", }; static const gchar *font_names[] = { N_("Conversation Entry"), - N_("Conversation History"), - N_("Log Viewer"), N_("Request Dialog"), N_("Notify Dialog") };