Mercurial > pidgin.yaz
changeset 16516:5ad28c23e899
merge of '51225ceda9e11936f9f4096708fcb8a6db7e957f'
and 'a1c1d24c924c44cd83b455ba21e24ed9c24b4fae'
author | Etan Reisner <pidgin@unreliablesource.net> |
---|---|
date | Fri, 27 Apr 2007 05:20:10 +0000 |
parents | ca09f5b57672 (current diff) 089531c08d75 (diff) |
children | 992da01baad1 |
files | pidgin/pixmaps/status/16/available_i.png pidgin/pixmaps/status/16/away_i.png pidgin/pixmaps/status/16/busy_i.png pidgin/pixmaps/status/16/extended-away_i.png pidgin/pixmaps/status/16/rtl/chat.png pidgin/pixmaps/status/16/rtl/extended-away_i.png pidgin/pixmaps/status/22/rtl/chat.png pidgin/pixmaps/status/32/rtl/chat.png pidgin/pixmaps/status/48/rtl/chat.png pidgin/pixmaps/toolbar/16/accounts.png pidgin/pixmaps/toolbar/16/scalable/accounts.svg pidgin/pixmaps/toolbar/16/scalable/connect.svg pidgin/pixmaps/toolbar/16/scalable/disconnect.svg pidgin/pixmaps/toolbar/16/scalable/insert-image.svg pidgin/pixmaps/toolbar/16/scalable/message-new.svg pidgin/pixmaps/toolbar/16/scalable/plugins.svg pidgin/pixmaps/toolbar/16/scalable/typing.svg pidgin/pixmaps/toolbar/16/scalable/user-info.svg pidgin/pixmaps/toolbar/16/scalable/window-icon.svg pidgin/pixmaps/toolbar/16/typing.png pidgin/pixmaps/toolbar/16/user-info.png pidgin/pixmaps/toolbar/16/window-icon.png pidgin/plugins/perl/common/GtkUI.pm pidgin/plugins/perl/common/GtkUI.xs |
diffstat | 205 files changed, 5320 insertions(+), 5050 deletions(-) [+] |
line wrap: on
line diff
--- a/COPYRIGHT Fri Apr 27 05:18:14 2007 +0000 +++ b/COPYRIGHT Fri Apr 27 05:20:10 2007 +0000 @@ -39,6 +39,7 @@ Herman Bloggs David Blue Jason Boerner +Hylke Bons Graham Booker Paolo Borelli Julien Bossart @@ -74,6 +75,7 @@ Todd Cohen Jono Cole Lorenzo Colitti +Jeff Connelly Nathan Conrad Felipe Contreras Alex Converse @@ -226,6 +228,7 @@ Paul Miller Arkadiusz Miskiewicz Andrew Molloy +Michael Monreal Benjamin Moody Tim Mooney Sergio Moretto @@ -233,6 +236,7 @@ Richard Nelson Dennis Nezic Matthew A. Nicholson +Andreas Nilsson Henning Norén Szilard Novaki Novell
--- a/ChangeLog Fri Apr 27 05:18:14 2007 +0000 +++ b/ChangeLog Fri Apr 27 05:20:10 2007 +0000 @@ -172,6 +172,7 @@ * Added /nickserv, /memoserv, /chanserv and /operserv commands (Joao Luís Marques Pinto) * Added CTCP VERSION via /version (Andrej Krivulčík) + * Added /whowas command (achris) Jabber Features: * Support for SRV lookups
--- a/ChangeLog.API Fri Apr 27 05:18:14 2007 +0000 +++ b/ChangeLog.API Fri Apr 27 05:20:10 2007 +0000 @@ -164,6 +164,14 @@ * gaim_gtk_buddy_icon_get_scale_size() was changed to accept an additional parameter which is used to determine what kind of scaling should be done, if any. + * purple_request_input(), purple_request_choice(), + purple_request_choice_varg(), purple_request_action(), + purple_request_action_varg(), purple_request_fields(), + purple_request_yes_no(), purple_request_ok_cancel(), + purple_request_accept_cancel(), purple_request_file(), and + purple_request_folder() was changed to accept account, who, and + conversation parameters for associating the request with an account, a + buddy, or a conversation. Removed: * gaim_gtk_sound_{get,set}_mute() (replaced by the /gaim/gtk/sound/mute
--- a/config.h.mingw Fri Apr 27 05:18:14 2007 +0000 +++ b/config.h.mingw Fri Apr 27 05:20:10 2007 +0000 @@ -325,7 +325,7 @@ /* #define HAVE_SIGNAL_H 1 */ /* Define if we have silcmime.h */ -/* #undef HAVE_SILCMIME_H */ +#define HAVE_SILCMIME_H 1 /* Define to 1 if you have the <smime.h> header file. */ /* #undef HAVE_SMIME_H */
--- a/doc/funniest_home_convos.txt Fri Apr 27 05:18:14 2007 +0000 +++ b/doc/funniest_home_convos.txt Fri Apr 27 05:20:10 2007 +0000 @@ -451,3 +451,12 @@ (07:54:03 PM) clueless21: what's an im client? (07:54:25 PM) Nathan Walp: it lets you chat with other people, like we are chatting now (07:54:45 PM) clueless21: oooooooooo... thanks + +23:58 -!- seanegan is now known as beta7 +23:58 <beta7> Hey, guys, remember me? +23:59 <beta7> We were all supposed to be working on getting me out. +23:59 <beta7> you guys remember that? +23:59 -!- mode/#pidgin [+o elb] by ChanServ +23:59 -!- beta7 was kicked from #pidgin by elb [getting feisty, are we?] +23:59 -!- mode/#pidgin [-o elb] by ChanServ +23:59 <marv> elb: good job getting beta7 out
--- a/doc/pidgin-arch.fig Fri Apr 27 05:18:14 2007 +0000 +++ b/doc/pidgin-arch.fig Fri Apr 27 05:20:10 2007 +0000 @@ -119,7 +119,7 @@ 5550 2400 5550 1800 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 - 4200 1800 5100 2925 + 5100 2925 4200 1800 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 1050 2100 1050 2700 @@ -130,12 +130,12 @@ 6900 3600 2400 3600 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 - 7200 1575 6300 1050 + 6300 1050 7200 1575 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 - 7200 1725 6300 3000 + 6300 3000 7200 1725 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 1 1 1.00 60.00 120.00 - 7200 3750 6300 3150 + 6300 3150 7200 3750 4 1 0 50 -1 0 12 0.0000 4 135 1110 1125 1275 User Interface\001 4 0 0 50 -1 0 12 0.0000 4 135 390 3225 3375 Core\001
--- a/finch/Makefile.am Fri Apr 27 05:18:14 2007 +0000 +++ b/finch/Makefile.am Fri Apr 27 05:20:10 2007 +0000 @@ -1,5 +1,3 @@ -if ENABLE_GNT - EXTRA_DIST = \ getopt.c \ getopt.h \ @@ -7,8 +5,12 @@ SUBDIRS = libgnt plugins +if ENABLE_GNT + bin_PROGRAMS = finch +endif + finch_SOURCES = \ gntaccount.c \ gntblist.c \ @@ -74,4 +76,3 @@ $(DBUS_CFLAGS) \ $(LIBXML_CFLAGS) \ $(GNT_CFLAGS) -endif
--- a/finch/finch.c Fri Apr 27 05:18:14 2007 +0000 +++ b/finch/finch.c Fri Apr 27 05:20:10 2007 +0000 @@ -272,9 +272,32 @@ * Fire up this baby. */ - /* Because we don't want debug-messages to show up and corrup the display */ + /* We don't want debug-messages to show up and corrupt the display */ purple_debug_set_enabled(debug_enabled); + /* If we're using a custom configuration directory, we + * do NOT want to migrate, or weird things will happen. */ + if (opt_config_dir_arg == NULL) + { + if (!purple_core_migrate()) + { + char *old = g_strconcat(purple_home_dir(), + G_DIR_SEPARATOR_S ".gaim", NULL); + char *text = g_strdup_printf(_( + "%s encountered errors migrating your settings " + "from %s to %s. Please investigate and complete the " + "migration by hand."), _("Finch"), + old, purple_user_dir()); + + g_free(old); + + purple_print_utf8_to_console(stderr, text); + g_free(text); + + return 0; + } + } + purple_core_set_ui_ops(gnt_core_get_ui_ops()); purple_eventloop_set_ui_ops(gnt_eventloop_get_ui_ops()); purple_idle_set_ui_ops(finch_idle_get_ui_ops()); @@ -300,9 +323,11 @@ /* TODO: Move prefs loading into purple_prefs_init() */ purple_prefs_load(); purple_prefs_update_old(); + purple_prefs_rename("/gaim/gnt", "/finch"); + purple_prefs_rename("/purple/gnt", "/finch"); /* load plugins we had when we quit */ - purple_plugins_load_saved("/purple/gnt/plugins/loaded"); + purple_plugins_load_saved("/finch/plugins/loaded"); /* TODO: Move pounces loading into purple_pounces_init() */ purple_pounces_load(); @@ -326,7 +351,7 @@ else { /* Everything is good to go--sign on already */ - if (!purple_prefs_get_bool("/core/savedstatus/startup_current_status")) + if (!purple_prefs_get_bool("/purple/savedstatus/startup_current_status")) purple_savedstatus_activate(purple_savedstatus_get_startup()); purple_accounts_restore_current_statuses(); }
--- a/finch/gntaccount.c Fri Apr 27 05:18:14 2007 +0000 +++ b/finch/gntaccount.c Fri Apr 27 05:20:10 2007 +0000 @@ -611,8 +611,10 @@ prompt = g_strdup_printf(_("Are you sure you want to delete %s?"), purple_account_get_username(account)); - purple_request_action(account, _("Delete Account"), prompt, NULL, 0, account, 2, - _("Delete"), really_delete_account, _("Cancel"), NULL); + purple_request_action(account, _("Delete Account"), prompt, NULL, 0, + account, NULL, NULL, account, 2, + _("Delete"), really_delete_account, + _("Cancel"), NULL); g_free(prompt); } @@ -829,7 +831,9 @@ buffer = make_info(account, gc, remote_user, id, alias, msg); purple_request_action(NULL, NULL, _("Add buddy to your list?"), - buffer, PURPLE_DEFAULT_ACTION_NONE, data, 2, + buffer, PURPLE_DEFAULT_ACTION_NONE, + account, remote_user, NULL, + data, 2, _("Add"), G_CALLBACK(add_user_cb), _("Cancel"), G_CALLBACK(free_add_user_data)); g_free(buffer); @@ -901,12 +905,16 @@ aa->alias = g_strdup(alias); aa->account = account; uihandle = purple_request_action(NULL, _("Authorize buddy?"), buffer, NULL, - PURPLE_DEFAULT_ACTION_NONE, aa, 2, + PURPLE_DEFAULT_ACTION_NONE, + account, remote_user, NULL, + aa, 2, _("Authorize"), authorize_and_add_cb, _("Deny"), deny_no_add_cb); } else { uihandle = purple_request_action(NULL, _("Authorize buddy?"), buffer, NULL, - PURPLE_DEFAULT_ACTION_NONE, user_data, 2, + PURPLE_DEFAULT_ACTION_NONE, + account, remote_user, NULL, + user_data, 2, _("Authorize"), auth_cb, _("Deny"), deny_cb); }
--- a/finch/gntblist.c Fri Apr 27 05:18:14 2007 +0000 +++ b/finch/gntblist.c Fri Apr 27 05:20:10 2007 +0000 @@ -53,7 +53,7 @@ #include "gntstatus.h" #include <string.h> -#define PREF_ROOT "/purple/gnt/blist" +#define PREF_ROOT "/finch/blist" #define TYPING_TIMEOUT 4000 typedef struct @@ -114,6 +114,7 @@ static void account_signed_on_cb(void); /* Sort functions */ +static int blist_node_compare_position(PurpleBlistNode *n1, PurpleBlistNode *n2); static int blist_node_compare_text(PurpleBlistNode *n1, PurpleBlistNode *n2); static int blist_node_compare_status(PurpleBlistNode *n1, PurpleBlistNode *n2); static int blist_node_compare_log(PurpleBlistNode *n1, PurpleBlistNode *n2); @@ -313,7 +314,11 @@ purple_request_field_group_add_field(group, field); purple_request_fields(NULL, _("Add Buddy"), NULL, _("Please enter buddy information."), - fields, _("Add"), G_CALLBACK(add_buddy_cb), _("Cancel"), NULL, NULL); + fields, + _("Add"), G_CALLBACK(add_buddy_cb), + _("Cancel"), NULL, + account, NULL, NULL, + NULL); } static void @@ -380,7 +385,9 @@ purple_request_fields(NULL, _("Add Chat"), NULL, _("You can edit more information from the context menu later."), - fields, _("Add"), G_CALLBACK(add_chat_cb), _("Cancel"), NULL, NULL); + fields, _("Add"), G_CALLBACK(add_chat_cb), _("Cancel"), NULL, + NULL, NULL, NULL, + NULL); } static void @@ -413,7 +420,9 @@ { purple_request_input(NULL, _("Add Group"), NULL, _("Enter the name of the group"), NULL, FALSE, FALSE, NULL, - _("Add"), G_CALLBACK(add_group_cb), _("Cancel"), NULL, NULL); + _("Add"), G_CALLBACK(add_group_cb), _("Cancel"), NULL, + NULL, NULL, NULL, + NULL); } static PurpleBlistUiOps blist_ui_ops = @@ -739,7 +748,9 @@ g_list_free(parts); purple_request_fields(NULL, _("Edit Chat"), NULL, _("Please Update the necessary fields."), - fields, _("Edit"), G_CALLBACK(chat_components_edit_ok), _("Cancel"), NULL, chat); + fields, _("Edit"), G_CALLBACK(chat_components_edit_ok), _("Cancel"), NULL, + NULL, NULL, NULL, + chat); } static void @@ -927,7 +938,9 @@ text = PURPLE_BLIST_NODE_IS_GROUP(node) ? _("Rename") : _("Alias"); purple_request_input(node, text, prompt, _("Enter empty string to reset the name."), name, FALSE, FALSE, NULL, text, G_CALLBACK(rename_blist_node), - _("Cancel"), NULL, node); + _("Cancel"), NULL, + NULL, NULL, NULL, + node); g_free(prompt); } @@ -990,6 +1003,7 @@ static void finch_blist_remove_node_cb(PurpleBlistNode *node, PurpleBlistNode *selected) { + PurpleAccount *account = NULL; char *primary; const char *name, *sec = NULL; @@ -999,12 +1013,12 @@ name = purple_contact_get_alias(c); if (c->totalsize > 1) sec = _("Removing this contact will also remove all the buddies in the contact"); - } else if (PURPLE_BLIST_NODE_IS_BUDDY(node)) + } else if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { name = purple_buddy_get_name((PurpleBuddy*)node); - else if (PURPLE_BLIST_NODE_IS_CHAT(node)) + account = purple_buddy_get_account((PurpleBuddy*)node); + } else if (PURPLE_BLIST_NODE_IS_CHAT(node)) { name = purple_chat_get_name((PurpleChat*)node); - else if (PURPLE_BLIST_NODE_IS_GROUP(node)) - { + } else if (PURPLE_BLIST_NODE_IS_GROUP(node)) { name = ((PurpleGroup*)node)->name; sec = _("Removing this group will also remove all the buddies in the group"); } @@ -1016,7 +1030,9 @@ /* XXX: anything to do with the returned ui-handle? */ purple_request_action(node, _("Confirm Remove"), primary, sec, - 1, node, 2, + 1, + account, name, NULL, + node, 2, _("Remove"), finch_blist_remove_node, _("Cancel"), NULL); g_free(primary); @@ -1197,7 +1213,7 @@ prpl_info->tooltip_text(buddy, user_info, TRUE); } - if (purple_prefs_get_bool("/purple/gnt/blist/idletime")) { + if (purple_prefs_get_bool("/finch/blist/idletime")) { PurplePresence *pre = purple_buddy_get_presence(buddy); if (purple_presence_is_idle(pre)) { time_t idle = purple_presence_get_idle_time(pre); @@ -1763,6 +1779,15 @@ } static int +blist_node_compare_position(PurpleBlistNode *n1, PurpleBlistNode *n2) +{ + while ((n1 = n1->prev) != NULL) + if (n1 == n2) + return 1; + return -1; +} + +static int blist_node_compare_text(PurpleBlistNode *n1, PurpleBlistNode *n2) { const char *s1, *s2; @@ -1773,10 +1798,6 @@ switch (n1->type) { - case PURPLE_BLIST_GROUP_NODE: - s1 = ((PurpleGroup*)n1)->name; - s2 = ((PurpleGroup*)n2)->name; - break; case PURPLE_BLIST_CHAT_NODE: s1 = purple_chat_get_name((PurpleChat*)n1); s2 = purple_chat_get_name((PurpleChat*)n2); @@ -1790,7 +1811,7 @@ s2 = purple_contact_get_alias((PurpleContact*)n2); break; default: - return -1; + return blist_node_compare_position(n1, n2); } us1 = g_utf8_strup(s1, -1); @@ -1821,6 +1842,7 @@ return ret; break; default: + return blist_node_compare_position(n1, n2); break; } @@ -1867,6 +1889,7 @@ return ret; break; default: + return blist_node_compare_position(n1, n2); break; } ret = blist_node_compare_text(n1, n2); @@ -2052,6 +2075,7 @@ fields, _("OK"), G_CALLBACK(send_im_select_cb), _("Cancel"), NULL, + NULL, NULL, NULL, NULL); }
--- a/finch/gntconn.c Fri Apr 27 05:18:14 2007 +0000 +++ b/finch/gntconn.c Fri Apr 27 05:20:10 2007 +0000 @@ -43,6 +43,7 @@ act, text); purple_request_action(account, _("Connection Error"), primary, secondary, 1, + account, NULL, NULL, account, 2, _("OK"), NULL, _("Connect"),
--- a/finch/gntconv.c Fri Apr 27 05:18:14 2007 +0000 +++ b/finch/gntconv.c Fri Apr 27 05:20:10 2007 +0000 @@ -43,7 +43,7 @@ #include "gntentry.h" #include "gnttextview.h" -#define PREF_ROOT "/purple/gnt/conversations" +#define PREF_ROOT "/finch/conversations" #include "config.h" @@ -52,7 +52,7 @@ { const char *text = gnt_entry_get_text(GNT_ENTRY(ggconv->entry)); gboolean empty = (!text || !*text); - if (purple_prefs_get_bool("/purple/gnt/conversations/notify_typing")) { + if (purple_prefs_get_bool("/finch/conversations/notify_typing")) { PurpleConversation *conv = ggconv->active_conv; PurpleConvIm *im = PURPLE_CONV_IM(conv); if (!empty) { @@ -381,7 +381,7 @@ /* Unnecessary to print the timestamp for delayed message */ if (!(flags & PURPLE_MESSAGE_DELAYED) && - purple_prefs_get_bool("/purple/gnt/conversations/timestamps")) + purple_prefs_get_bool("/finch/conversations/timestamps")) gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(ggconv->tv), purple_utf8_strftime("(%H:%M:%S) ", localtime(&mtime)), GNT_TEXT_FLAG_DIM);
--- a/finch/gntdebug.c Fri Apr 27 05:18:14 2007 +0000 +++ b/finch/gntdebug.c Fri Apr 27 05:20:10 2007 +0000 @@ -36,7 +36,7 @@ #include <stdio.h> #include <string.h> -#define PREF_ROOT "/purple/gnt/debug" +#define PREF_ROOT "/finch/debug" static struct { @@ -135,7 +135,7 @@ toggle_timestamps(GntWidget *w, gpointer n) { debug.timestamps = !debug.timestamps; - purple_prefs_set_bool("/core/debug/timestamps", debug.timestamps); + purple_prefs_set_bool("/purple/debug/timestamps", debug.timestamps); } /* Xerox */ @@ -196,7 +196,7 @@ void finch_debug_window_show() { debug.paused = FALSE; - debug.timestamps = purple_prefs_get_bool("/core/debug/timestamps"); + debug.timestamps = purple_prefs_get_bool("/purple/debug/timestamps"); if (debug.window == NULL) { GntWidget *wid, *box;
--- a/finch/gntft.c Fri Apr 27 05:18:14 2007 +0000 +++ b/finch/gntft.c Fri Apr 27 05:20:10 2007 +0000 @@ -131,7 +131,7 @@ toggle_keep_open_cb(GntWidget *w) { xfer_dialog->keep_open = !xfer_dialog->keep_open; - purple_prefs_set_bool("/purple/gnt/filetransfer/keep_open", + purple_prefs_set_bool("/finch/filetransfer/keep_open", xfer_dialog->keep_open); } @@ -139,7 +139,7 @@ toggle_clear_finished_cb(GntWidget *w) { xfer_dialog->auto_clear = !xfer_dialog->auto_clear; - purple_prefs_set_bool("/purple/gnt/filetransfer/clear_finished", + purple_prefs_set_bool("/finch/filetransfer/clear_finished", xfer_dialog->auto_clear); } @@ -183,9 +183,9 @@ xfer_dialog = g_new0(PurpleGntXferDialog, 1); xfer_dialog->keep_open = - purple_prefs_get_bool("/purple/gnt/filetransfer/keep_open"); + purple_prefs_get_bool("/finch/filetransfer/keep_open"); xfer_dialog->auto_clear = - purple_prefs_get_bool("/purple/gnt/filetransfer/clear_finished"); + purple_prefs_get_bool("/finch/filetransfer/clear_finished"); /* Create the window. */ xfer_dialog->window = window = gnt_vbox_new(FALSE); @@ -507,9 +507,9 @@ void finch_xfers_init(void) { - purple_prefs_add_none("/purple/gnt/filetransfer"); - purple_prefs_add_bool("/purple/gnt/filetransfer/clear_finished", TRUE); - purple_prefs_add_bool("/purple/gnt/filetransfer/keep_open", FALSE); + purple_prefs_add_none("/finch/filetransfer"); + purple_prefs_add_bool("/finch/filetransfer/clear_finished", TRUE); + purple_prefs_add_bool("/finch/filetransfer/keep_open", FALSE); } void
--- a/finch/gntplugin.c Fri Apr 27 05:18:14 2007 +0000 +++ b/finch/gntplugin.c Fri Apr 27 05:20:10 2007 +0000 @@ -97,7 +97,7 @@ void finch_plugins_save_loaded(void) { - purple_plugins_save_loaded("/purple/gnt/plugins/loaded"); + purple_plugins_save_loaded("/finch/plugins/loaded"); } static void @@ -333,6 +333,8 @@ } purple_request_fields(NULL, _("Preferences"), NULL, NULL, fields, - _("Save"), G_CALLBACK(finch_request_save_in_prefs), _("Cancel"), NULL, NULL); + _("Save"), G_CALLBACK(finch_request_save_in_prefs), _("Cancel"), NULL, + NULL, NULL, NULL, + NULL); }
--- a/finch/gntpounce.c Fri Apr 27 05:18:14 2007 +0000 +++ b/finch/gntpounce.c Fri Apr 27 05:20:10 2007 +0000 @@ -255,15 +255,15 @@ "reason", reason); /* Set the defaults for next time. */ - purple_prefs_set_bool("/purple/gnt/pounces/default_actions/open-window", + purple_prefs_set_bool("/finch/pounces/default_actions/open-window", gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->open_win))); - purple_prefs_set_bool("/purple/gnt/pounces/default_actions/popup-notify", + purple_prefs_set_bool("/finch/pounces/default_actions/popup-notify", gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->popup))); - purple_prefs_set_bool("/purple/gnt/pounces/default_actions/send-message", + purple_prefs_set_bool("/finch/pounces/default_actions/send-message", gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->send_msg))); - purple_prefs_set_bool("/purple/gnt/pounces/default_actions/execute-command", + purple_prefs_set_bool("/finch/pounces/default_actions/execute-command", gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->exec_cmd))); - purple_prefs_set_bool("/purple/gnt/pounces/default_actions/play-beep", + purple_prefs_set_bool("/finch/pounces/default_actions/play-beep", gnt_check_box_get_checked(GNT_CHECK_BOX(dialog->play_sound))); purple_pounce_set_save(dialog->pounce, @@ -580,15 +580,15 @@ } gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->open_win), - purple_prefs_get_bool("/purple/gnt/pounces/default_actions/open-window")); + purple_prefs_get_bool("/finch/pounces/default_actions/open-window")); gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->popup), - purple_prefs_get_bool("/purple/gnt/pounces/default_actions/popup-notify")); + purple_prefs_get_bool("/finch/pounces/default_actions/popup-notify")); gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->send_msg), - purple_prefs_get_bool("/purple/gnt/pounces/default_actions/send-message")); + purple_prefs_get_bool("/finch/pounces/default_actions/send-message")); gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->exec_cmd), - purple_prefs_get_bool("/purple/gnt/pounces/default_actions/execute-command")); + purple_prefs_get_bool("/finch/pounces/default_actions/execute-command")); gnt_check_box_set_checked(GNT_CHECK_BOX(dialog->play_sound), - purple_prefs_get_bool("/purple/gnt/pounces/default_actions/play-beep")); + purple_prefs_get_bool("/finch/pounces/default_actions/play-beep")); } gnt_widget_show(window); @@ -647,7 +647,9 @@ pouncer = purple_account_get_username(account); pouncee = purple_pounce_get_pouncee(pounce); buf = g_strdup_printf(_("Are you sure you want to delete the pounce on %s for %s?"), pouncee, pouncer); - purple_request_action(pounce, NULL, buf, NULL, 0, pounce, 2, + purple_request_action(pounce, NULL, buf, NULL, 0, + account, pouncee, NULL, + pounce, 2, _("Delete"), pounces_manager_delete_confirm_cb, _("Cancel"), NULL); g_free(buf); @@ -924,19 +926,19 @@ purple_pounces_register_handler(FINCH_UI, pounce_cb, new_pounce, free_pounce); - purple_prefs_add_none("/purple/gnt/pounces"); - purple_prefs_add_none("/purple/gnt/pounces/default_actions"); - purple_prefs_add_bool("/purple/gnt/pounces/default_actions/open-window", + purple_prefs_add_none("/finch/pounces"); + purple_prefs_add_none("/finch/pounces/default_actions"); + purple_prefs_add_bool("/finch/pounces/default_actions/open-window", FALSE); - purple_prefs_add_bool("/purple/gnt/pounces/default_actions/popup-notify", + purple_prefs_add_bool("/finch/pounces/default_actions/popup-notify", TRUE); - purple_prefs_add_bool("/purple/gnt/pounces/default_actions/send-message", + purple_prefs_add_bool("/finch/pounces/default_actions/send-message", FALSE); - purple_prefs_add_bool("/purple/gnt/pounces/default_actions/execute-command", + purple_prefs_add_bool("/finch/pounces/default_actions/execute-command", FALSE); - purple_prefs_add_bool("/purple/gnt/pounces/default_actions/play-beep", + purple_prefs_add_bool("/finch/pounces/default_actions/play-beep", FALSE); - purple_prefs_add_none("/purple/gnt/pounces/dialog"); + purple_prefs_add_none("/finch/pounces/dialog"); purple_signal_connect(purple_connections_get_handle(), "signed-on", finch_pounces_get_handle(),
--- a/finch/gntprefs.c Fri Apr 27 05:18:14 2007 +0000 +++ b/finch/gntprefs.c Fri Apr 27 05:20:10 2007 +0000 @@ -35,15 +35,16 @@ void finch_prefs_init() { - purple_prefs_add_none("/purple"); - purple_prefs_add_none("/purple/gnt"); + purple_prefs_add_none("/finch"); + + purple_prefs_add_none("/finch/plugins"); + purple_prefs_add_path_list("/finch/plugins/loaded", NULL); - purple_prefs_add_none("/purple/gnt/plugins"); - purple_prefs_add_path_list("/purple/gnt/plugins/loaded", NULL); - - purple_prefs_add_none("/purple/gnt/conversations"); - purple_prefs_add_bool("/purple/gnt/conversations/timestamps", TRUE); - purple_prefs_add_bool("/purple/gnt/conversations/notify_typing", FALSE); /* XXX: Not functional yet */ + purple_prefs_add_none("/finch/conversations"); + purple_prefs_add_bool("/finch/conversations/timestamps", TRUE); + purple_prefs_add_bool("/finch/conversations/notify_typing", FALSE); /* XXX: Not functional yet */ + purple_prefs_rename("/gaim/gnt", "/finch"); + purple_prefs_rename("/purple/gnt", "/finch"); } typedef struct @@ -156,34 +157,34 @@ static Prefs blist[] = { - {PURPLE_PREF_BOOLEAN, "/purple/gnt/blist/idletime", N_("Show Idle Time"), NULL}, - {PURPLE_PREF_BOOLEAN, "/purple/gnt/blist/showoffline", N_("Show Offline Buddies"), NULL}, + {PURPLE_PREF_BOOLEAN, "/finch/blist/idletime", N_("Show Idle Time"), NULL}, + {PURPLE_PREF_BOOLEAN, "/finch/blist/showoffline", N_("Show Offline Buddies"), NULL}, {PURPLE_PREF_NONE, NULL, NULL, NULL} }; static Prefs convs[] = { - {PURPLE_PREF_BOOLEAN, "/purple/gnt/conversations/timestamps", N_("Show Timestamps"), NULL}, - {PURPLE_PREF_BOOLEAN, "/purple/gnt/conversations/notify_typing", N_("Notify buddies when you are typing"), NULL}, + {PURPLE_PREF_BOOLEAN, "/finch/conversations/timestamps", N_("Show Timestamps"), NULL}, + {PURPLE_PREF_BOOLEAN, "/finch/conversations/notify_typing", N_("Notify buddies when you are typing"), NULL}, {PURPLE_PREF_NONE, NULL, NULL, NULL} }; static Prefs logging[] = { - {PURPLE_PREF_STRING, "/core/logging/format", N_("Log format"), get_log_options}, - {PURPLE_PREF_BOOLEAN, "/core/logging/log_ims", N_("Log IMs"), NULL}, - {PURPLE_PREF_BOOLEAN, "/core/logging/log_chats", N_("Log chats"), NULL}, - {PURPLE_PREF_BOOLEAN, "/core/logging/log_system", N_("Log status change events"), NULL}, + {PURPLE_PREF_STRING, "/purple/logging/format", N_("Log format"), get_log_options}, + {PURPLE_PREF_BOOLEAN, "/purple/logging/log_ims", N_("Log IMs"), NULL}, + {PURPLE_PREF_BOOLEAN, "/purple/logging/log_chats", N_("Log chats"), NULL}, + {PURPLE_PREF_BOOLEAN, "/purple/logging/log_system", N_("Log status change events"), NULL}, {PURPLE_PREF_NONE, NULL, NULL, NULL}, }; /* XXX: Translate after the freeze */ static Prefs idle[] = { - {PURPLE_PREF_STRING, "/core/away/idle_reporting", "Report Idle time", get_idle_options}, - {PURPLE_PREF_BOOLEAN, "/core/away/away_when_idle", "Change status when idle", NULL}, - {PURPLE_PREF_INT, "/core/away/mins_before_away", "Minutes before changing status", NULL}, - {PURPLE_PREF_INT, "/core/savedstatus/idleaway", "Change status to", get_status_titles}, + {PURPLE_PREF_STRING, "/purple/away/idle_reporting", "Report Idle time", get_idle_options}, + {PURPLE_PREF_BOOLEAN, "/purple/away/away_when_idle", "Change status when idle", NULL}, + {PURPLE_PREF_INT, "/purple/away/mins_before_away", "Minutes before changing status", NULL}, + {PURPLE_PREF_INT, "/purple/savedstatus/idleaway", "Change status to", get_status_titles}, {PURPLE_PREF_NONE, NULL, NULL, NULL}, }; @@ -231,6 +232,8 @@ add_pref_group(fields, _("Idle"), idle); purple_request_fields(NULL, _("Preferences"), NULL, NULL, fields, - _("Save"), G_CALLBACK(save_cb), _("Cancel"), free_strings, NULL); + _("Save"), G_CALLBACK(save_cb), _("Cancel"), free_strings, + NULL, NULL, NULL, + NULL); }
--- a/finch/gntrequest.c Fri Apr 27 05:18:14 2007 +0000 +++ b/finch/gntrequest.c Fri Apr 27 05:20:10 2007 +0000 @@ -115,6 +115,7 @@ gboolean multiline, gboolean masked, gchar *hint, const char *ok_text, GCallback ok_cb, const char *cancel_text, GCallback cancel_cb, + PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data) { GntWidget *window, *box, *entry; @@ -170,6 +171,7 @@ const char *secondary, unsigned int default_value, const char *ok_text, GCallback ok_cb, const char *cancel_text, GCallback cancel_cb, + PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data, va_list choices) { GntWidget *window, *combo, *box; @@ -212,6 +214,7 @@ static void* finch_request_action(const char *title, const char *primary, const char *secondary, unsigned int default_value, + PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data, size_t actioncount, va_list actions) { @@ -339,6 +342,7 @@ const char *secondary, PurpleRequestFields *allfields, const char *ok, GCallback ok_cb, const char *cancel, GCallback cancel_cb, + PurpleAccount *account, const char *who, PurpleConversation *conv, void *userdata) { GntWidget *window, *box; @@ -576,6 +580,7 @@ finch_request_file(const char *title, const char *filename, gboolean savedialog, GCallback ok_cb, GCallback cancel_cb, + PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data) { GntWidget *window = gnt_file_sel_new();
--- a/finch/gntstatus.c Fri Apr 27 05:18:14 2007 +0000 +++ b/finch/gntstatus.c Fri Apr 27 05:20:10 2007 +0000 @@ -135,8 +135,11 @@ ask = g_strdup_printf(_("Are you sure you want to delete \"%s\""), purple_savedstatus_get_title(saved)); - purple_request_action(saved, _("Delete Status"), ask, NULL, 0, saved, 2, - _("Delete"), really_delete_status, _("Cancel"), NULL); + purple_request_action(saved, _("Delete Status"), ask, NULL, 0, + NULL, NULL, NULL, + saved, 2, + _("Delete"), really_delete_status, + _("Cancel"), NULL); g_free(ask); }
--- a/finch/plugins/gnthistory.c Fri Apr 27 05:18:14 2007 +0000 +++ b/finch/plugins/gnthistory.c Fri Apr 27 05:20:10 2007 +0000 @@ -57,7 +57,7 @@ /* If we're not logging, don't show anything. * Otherwise, we might show a very old log. */ - if (!purple_prefs_get_bool("/core/logging/log_ims")) + if (!purple_prefs_get_bool("/purple/logging/log_ims")) return; /* Find buddies for this conversation. */ @@ -101,7 +101,7 @@ { /* If we're not logging, don't show anything. * Otherwise, we might show a very old log. */ - if (!purple_prefs_get_bool("/core/logging/log_chats")) + if (!purple_prefs_get_bool("/purple/logging/log_chats")) return; logs = purple_log_get_logs(PURPLE_LOG_CHAT, name, account); @@ -132,8 +132,8 @@ static void history_prefs_check(PurplePlugin *plugin) { - if (!purple_prefs_get_bool("/core/logging/log_ims") && - !purple_prefs_get_bool("/core/logging/log_chats")) + if (!purple_prefs_get_bool("/purple/logging/log_ims") && + !purple_prefs_get_bool("/purple/logging/log_chats")) { purple_notify_warning(plugin, NULL, _("History Plugin Requires Logging"), _("Logging can be enabled from Tools -> Preferences -> Logging.\n\n" @@ -155,9 +155,9 @@ "conversation-created", plugin, PURPLE_CALLBACK(historize), NULL); - purple_prefs_connect_callback(plugin, "/core/logging/log_ims", + purple_prefs_connect_callback(plugin, "/purple/logging/log_ims", history_prefs_cb, plugin); - purple_prefs_connect_callback(plugin, "/core/logging/log_chats", + purple_prefs_connect_callback(plugin, "/purple/logging/log_chats", history_prefs_cb, plugin); history_prefs_check(plugin);
--- a/libpurple/account.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/account.c Fri Apr 27 05:20:10 2007 +0000 @@ -347,12 +347,6 @@ xmlnode_insert_data(child, tmp, -1); } - if ((tmp = purple_account_get_buddy_icon(account)) != NULL) - { - child = xmlnode_new_child(node, "buddyicon"); - xmlnode_insert_data(child, tmp, -1); - } - if (g_hash_table_size(account->settings) > 0) { child = xmlnode_new_child(node, "settings"); @@ -742,11 +736,21 @@ g_free(data); } - /* Read the buddyicon */ + /* Read an old buddyicon */ child = xmlnode_get_child(node, "buddyicon"); if ((child != NULL) && ((data = xmlnode_get_data(child)) != NULL)) { - purple_account_set_buddy_icon(ret, data); + const char *dirname = purple_buddy_icons_get_cache_dir(); + char *filename = g_build_filename(dirname, data, NULL); + gchar *contents; + gsize len; + + if (g_file_get_contents(filename, &contents, &len, NULL)) + { + purple_buddy_icons_set_account_icon(ret, (guchar *)contents, len); + } + + g_free(filename); g_free(data); } @@ -788,6 +792,8 @@ } xmlnode_free(node); + + purple_buddy_icons_account_loaded_cb(); } @@ -880,7 +886,6 @@ g_free(account->alias); g_free(account->password); g_free(account->user_info); - g_free(account->buddy_icon); g_free(account->buddy_icon_path); g_free(account->protocol_id); @@ -968,6 +973,7 @@ fields, _("OK"), ok_cb, _("Cancel"), cancel_cb, + account, NULL, NULL, user_data); g_free(primary); } @@ -1217,6 +1223,7 @@ fields, _("OK"), G_CALLBACK(change_password_cb), _("Cancel"), NULL, + account, NULL, NULL, account); } @@ -1250,7 +1257,9 @@ TRUE, FALSE, ((gc != NULL) && (gc->flags & PURPLE_CONNECTION_HTML) ? "html" : NULL), _("Save"), G_CALLBACK(set_user_info_cb), - _("Cancel"), NULL, account); + _("Cancel"), NULL, + account, NULL, NULL, + account); } void @@ -1316,56 +1325,6 @@ schedule_accounts_save(); } -void -purple_account_set_buddy_icon(PurpleAccount *account, const char *icon) -{ - g_return_if_fail(account != NULL); - - /* Delete an existing icon from the cache. */ - if (account->buddy_icon != NULL && (icon == NULL || strcmp(account->buddy_icon, icon))) - { - const char *dirname = purple_buddy_icons_get_cache_dir(); - - if (g_file_test(account->buddy_icon, G_FILE_TEST_IS_REGULAR)) - { - /* The file exists. This is a full path. */ - - /* XXX: This is a hack so we only delete the file if it's - * in the cache dir. Otherwise, people who upgrade (who - * may have buddy icon filenames set outside of the cache - * dir) could lose files. */ - if (!strncmp(dirname, account->buddy_icon, strlen(dirname))) - g_unlink(account->buddy_icon); - } - else - { - char *filename = g_build_filename(dirname, account->buddy_icon, NULL); - g_unlink(filename); - g_free(filename); - } - } - - g_free(account->buddy_icon); - account->buddy_icon = g_strdup(icon); - if (purple_account_is_connected(account)) - { - PurpleConnection *gc; - PurplePluginProtocolInfo *prpl_info; - - gc = purple_account_get_connection(account); - prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl); - - if (prpl_info && prpl_info->set_buddy_icon) - { - char *cached_path = purple_buddy_icons_get_full_path(icon); - prpl_info->set_buddy_icon(gc, cached_path); - g_free(cached_path); - } - } - - schedule_accounts_save(); -} - void purple_account_set_buddy_icon_path(PurpleAccount *account, const char *path) { g_return_if_fail(account != NULL); @@ -1741,14 +1700,6 @@ } const char * -purple_account_get_buddy_icon(const PurpleAccount *account) -{ - g_return_val_if_fail(account != NULL, NULL); - - return account->buddy_icon; -} - -const char * purple_account_get_buddy_icon_path(const PurpleAccount *account) { g_return_val_if_fail(account != NULL, NULL); @@ -2275,7 +2226,7 @@ purple_pounce_destroy_all_by_account(account); /* This will cause the deletion of an old buddy icon. */ - purple_account_set_buddy_icon(account, NULL); + purple_buddy_icons_set_account_icon(account, NULL, 0); purple_account_destroy(account); }
--- a/libpurple/account.h Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/account.h Fri Apr 27 05:20:10 2007 +0000 @@ -75,7 +75,6 @@ char *password; /**< The account password. */ char *user_info; /**< User information. */ - char *buddy_icon; /**< The buddy icon's cached path. */ char *buddy_icon_path; /**< The buddy icon's non-cached path. */ gboolean remember_pass; /**< Remember the password. */ @@ -284,14 +283,6 @@ void purple_account_set_user_info(PurpleAccount *account, const char *user_info); /** - * Sets the account's buddy icon. - * - * @param account The account. - * @param icon The buddy icon file. - */ -void purple_account_set_buddy_icon(PurpleAccount *account, const char *icon); - -/** * Sets the account's buddy icon path. * * @param account The account. @@ -525,15 +516,6 @@ const char *purple_account_get_user_info(const PurpleAccount *account); /** - * Returns the account's buddy icon filename. - * - * @param account The account. - * - * @return The buddy icon filename. - */ -const char *purple_account_get_buddy_icon(const PurpleAccount *account); - -/** * Gets the account's buddy icon path. * * @param account The account.
--- a/libpurple/blist.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/blist.c Fri Apr 27 05:20:10 2007 +0000 @@ -605,6 +605,9 @@ } xmlnode_free(purple); + + /* This tells the buddy icon code to do its thing. */ + purple_buddy_icons_blist_loaded_cb(); } @@ -644,7 +647,7 @@ purple_buddy_get_presence(buddy)); if (cmp > 0 || (cmp == 0 && - purple_prefs_get_bool("/core/contact/last_match"))) + purple_prefs_get_bool("/purple/contact/last_match"))) { new_priority = buddy; } @@ -1141,20 +1144,12 @@ { g_return_if_fail(buddy != NULL); - if (buddy->icon != icon) { - if (buddy->icon != NULL) - purple_buddy_icon_unref(buddy->icon); - + if (buddy->icon != icon) + { + purple_buddy_icon_unref(buddy->icon); buddy->icon = (icon != NULL ? purple_buddy_icon_ref(icon) : NULL); } - if (buddy->icon) - purple_buddy_icon_cache(icon, buddy); - else - purple_buddy_icon_uncache(buddy); - - purple_blist_schedule_save(); - purple_signal_emit(purple_blist_get_handle(), "buddy-icon-changed", buddy); purple_blist_update_buddy_icon(buddy); @@ -1783,9 +1778,6 @@ contact = (PurpleContact *)cnode; group = (PurpleGroup *)gnode; - /* Delete any buddy icon. */ - purple_buddy_icon_uncache(buddy); - /* Remove the node from its parent */ if (node->prev) node->prev->next = node->next; @@ -1831,8 +1823,7 @@ purple_signal_emit(purple_blist_get_handle(), "buddy-removed", buddy); /* Delete the node */ - if (buddy->icon != NULL) - purple_buddy_icon_unref(buddy->icon); + purple_buddy_icon_unref(buddy->icon); g_hash_table_destroy(buddy->node.settings); purple_presence_remove_buddy(buddy->presence, buddy); purple_presence_destroy(buddy->presence);
--- a/libpurple/buddyicon.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/buddyicon.c Fri Apr 27 05:20:10 2007 +0000 @@ -24,26 +24,257 @@ */ #include "internal.h" #include "buddyicon.h" +#include "cipher.h" #include "conversation.h" #include "dbus-maybe.h" #include "debug.h" +#include "imgstore.h" #include "util.h" +typedef struct _PurpleBuddyIconData PurpleBuddyIconData; + +/* NOTE: Instances of this struct are allocated without zeroing the memory, so + * NOTE: be sure to update purple_buddy_icon_new() if you add members. */ +struct _PurpleBuddyIcon +{ + PurpleAccount *account; /**< The account the user is on. */ + PurpleStoredImage *img; /**< The id of the stored image with the + the icon data. */ + char *username; /**< The username the icon belongs to. */ + char *checksum; /**< The protocol checksum. */ + int ref_count; /**< The buddy icon reference count. */ +}; + static GHashTable *account_cache = NULL; +static GHashTable *icon_data_cache = NULL; +static GHashTable *icon_file_cache = NULL; + +/* This one is used for both custom buddy icons + * on PurpleContacts and account icons. */ +static GHashTable *pointer_icon_cache = NULL; + static char *cache_dir = NULL; static gboolean icon_caching = TRUE; +/* For ~/.gaim to ~/.purple migration. */ +static char *old_icons_dir = NULL; + +static void +ref_filename(const char *filename) +{ + int refs; + + g_return_if_fail(filename != NULL); + + refs = GPOINTER_TO_INT(g_hash_table_lookup(icon_file_cache, filename)); + + g_hash_table_insert(icon_file_cache, g_strdup(filename), + GINT_TO_POINTER(refs + 1)); +} + +static void +unref_filename(const char *filename) +{ + int refs; + + if (filename == NULL) + return; + + refs = GPOINTER_TO_INT(g_hash_table_lookup(icon_file_cache, filename)); + + if (refs == 1) + { + g_hash_table_remove(icon_file_cache, filename); + } + else + { + g_hash_table_insert(icon_file_cache, g_strdup(filename), + GINT_TO_POINTER(refs - 1)); + } +} + +static char * +purple_buddy_icon_data_calculate_filename(guchar *icon_data, size_t icon_len) +{ + PurpleCipherContext *context; + gchar digest[41]; + + context = purple_cipher_context_new_by_name("sha1", NULL); + if (context == NULL) + { + purple_debug_error("buddyicon", "Could not find sha1 cipher\n"); + g_return_val_if_reached(NULL); + } + + /* Hash the icon data */ + purple_cipher_context_append(context, icon_data, icon_len); + if (!purple_cipher_context_digest_to_str(context, sizeof(digest), digest, NULL)) + { + purple_debug_error("buddyicon", "Failed to get SHA-1 digest.\n"); + g_return_val_if_reached(NULL); + } + purple_cipher_context_destroy(context); + + /* Return the filename */ + return g_strdup_printf("%s.%s", digest, + purple_util_get_image_extension(icon_data, icon_len)); +} + +static void +purple_buddy_icon_data_cache(PurpleStoredImage *img) +{ + const char *dirname; + char *path; + FILE *file = NULL; + + g_return_if_fail(img != NULL); + + if (!purple_buddy_icons_is_caching()) + return; + + dirname = purple_buddy_icons_get_cache_dir(); + path = g_build_filename(dirname, purple_imgstore_get_filename(img), NULL); + + if (!g_file_test(dirname, G_FILE_TEST_IS_DIR)) + { + purple_debug_info("buddyicon", "Creating icon cache directory.\n"); + + if (g_mkdir(dirname, S_IRUSR | S_IWUSR | S_IXUSR) < 0) + { + purple_debug_error("buddyicon", + "Unable to create directory %s: %s\n", + dirname, strerror(errno)); + } + } + + if ((file = g_fopen(path, "wb")) != NULL) + { + if (!fwrite(purple_imgstore_get_data(img), purple_imgstore_get_size(img), 1, file)) + { + purple_debug_error("buddyicon", "Error writing %s: %s\n", + path, strerror(errno)); + } + else + purple_debug_info("buddyicon", "Wrote cache file: %s\n", path); + + fclose(file); + } + else + { + purple_debug_error("buddyicon", "Unable to create file %s: %s\n", + path, strerror(errno)); + g_free(path); + return; + } + g_free(path); +} + +static void +purple_buddy_icon_data_uncache_file(const char *filename) +{ + const char *dirname; + char *path; + + g_return_if_fail(filename != NULL); + + /* It's possible that there are other references to this icon + * cache file that are not currently loaded into memory. */ + if (GPOINTER_TO_INT(g_hash_table_lookup(icon_file_cache, filename))) + return; + + dirname = purple_buddy_icons_get_cache_dir(); + path = g_build_filename(dirname, filename, NULL); + + if (g_file_test(path, G_FILE_TEST_EXISTS)) + { + if (g_unlink(path)) + { + purple_debug_error("buddyicon", "Failed to delete %s: %s\n", + path, strerror(errno)); + } + else + { + purple_debug_info("buddyicon", "Deleted cache file: %s\n", path); + } + } + + g_free(path); +} + +static gboolean +value_equals(gpointer key, gpointer value, gpointer user_data) +{ + return (value == user_data); +} + +static void +image_deleting_cb(PurpleStoredImage *img, gpointer data) +{ + const char *filename = purple_imgstore_get_filename(img); + + if (img == g_hash_table_lookup(icon_data_cache, filename)) + { + purple_buddy_icon_data_uncache_file(filename); + g_hash_table_remove(icon_data_cache, filename); + + /* We could make this O(1) by using another hash table, but + * this is probably good enough. */ + g_hash_table_foreach_remove(pointer_icon_cache, value_equals, img); + } +} + +static PurpleStoredImage * +purple_buddy_icon_data_new(guchar *icon_data, size_t icon_len, const char *filename) +{ + char *file; + PurpleStoredImage *img; + + g_return_val_if_fail(icon_data != NULL, NULL); + g_return_val_if_fail(icon_len > 0, NULL); + + if (filename == NULL) + { + file = purple_buddy_icon_data_calculate_filename(icon_data, icon_len); + if (file == NULL) + { + g_free(icon_data); + return NULL; + } + } + else + file = g_strdup(filename); + + if ((img = g_hash_table_lookup(icon_data_cache, file))) + { + g_free(file); + g_free(icon_data); + return purple_imgstore_ref(img); + } + + img = purple_imgstore_add(icon_data, icon_len, file); + + /* This will take ownership of file and g_free it either now or later. */ + g_hash_table_insert(icon_data_cache, file, img); + + purple_buddy_icon_data_cache(img); + + return img; +} + static PurpleBuddyIcon * purple_buddy_icon_create(PurpleAccount *account, const char *username) { PurpleBuddyIcon *icon; GHashTable *icon_cache; - icon = g_new0(PurpleBuddyIcon, 1); + /* This does not zero. See purple_buddy_icon_new() for + * information on which function allocates which member. */ + icon = g_slice_new(PurpleBuddyIcon); PURPLE_DBUS_REGISTER_POINTER(icon, PurpleBuddyIcon); - purple_buddy_icon_set_account(icon, account); - purple_buddy_icon_set_username(icon, username); + icon->account = account; + icon->username = g_strdup(username); + icon->checksum = NULL; icon_cache = g_hash_table_lookup(account_cache, account); @@ -55,13 +286,14 @@ } g_hash_table_insert(icon_cache, - (char *)purple_buddy_icon_get_username(icon), icon); + (char *)purple_buddy_icon_get_username(icon), icon); return icon; } PurpleBuddyIcon * purple_buddy_icon_new(PurpleAccount *account, const char *username, - void *icon_data, size_t icon_len) + void *icon_data, size_t icon_len, + const char *checksum) { PurpleBuddyIcon *icon; @@ -70,76 +302,25 @@ g_return_val_if_fail(icon_data != NULL, NULL); g_return_val_if_fail(icon_len > 0, NULL); + /* purple_buddy_icons_find() does allocation, so be + * sure to update it as well when members are added. */ icon = purple_buddy_icons_find(account, username); + /* purple_buddy_icon_create() sets account & username */ if (icon == NULL) icon = purple_buddy_icon_create(account, username); - purple_buddy_icon_ref(icon); - purple_buddy_icon_set_data(icon, icon_data, icon_len); - purple_buddy_icon_set_path(icon, NULL); + /* Take a reference for the caller of this function. */ + icon->ref_count = 1; - /* purple_buddy_icon_set_data() makes blist.c or - * conversation.c, or both, take a reference. - * - * Plus, we leave one for the caller of this function. - */ + /* purple_buddy_icon_set_data() sets img, but it + * references img first, so we need to initialize it */ + icon->img = NULL; + purple_buddy_icon_set_data(icon, icon_data, icon_len, checksum); return icon; } -void -purple_buddy_icon_destroy(PurpleBuddyIcon *icon) -{ - PurpleConversation *conv; - PurpleAccount *account; - GHashTable *icon_cache; - const char *username; - GSList *sl, *list; - - g_return_if_fail(icon != NULL); - - if (icon->ref_count > 0) - { - /* If the ref count is greater than 0, then we weren't called from - * purple_buddy_icon_unref(). So we go through and ask everyone to - * unref us. Then we return, since we know somewhere along the - * line we got called recursively by one of the unrefs, and the - * icon is already destroyed. - */ - account = purple_buddy_icon_get_account(icon); - username = purple_buddy_icon_get_username(icon); - - conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, username, account); - if (conv != NULL) - purple_conv_im_set_icon(PURPLE_CONV_IM(conv), NULL); - - for (list = sl = purple_find_buddies(account, username); sl != NULL; - sl = sl->next) - { - PurpleBuddy *buddy = (PurpleBuddy *)sl->data; - - purple_buddy_set_icon(buddy, NULL); - } - - g_slist_free(list); - - return; - } - - icon_cache = g_hash_table_lookup(account_cache, - purple_buddy_icon_get_account(icon)); - - if (icon_cache != NULL) - g_hash_table_remove(icon_cache, purple_buddy_icon_get_username(icon)); - - g_free(icon->username); - g_free(icon->data); - g_free(icon->path); - PURPLE_DBUS_UNREGISTER_POINTER(icon); - g_free(icon); -} - PurpleBuddyIcon * purple_buddy_icon_ref(PurpleBuddyIcon *icon) { @@ -153,14 +334,26 @@ PurpleBuddyIcon * purple_buddy_icon_unref(PurpleBuddyIcon *icon) { - g_return_val_if_fail(icon != NULL, NULL); + if (icon == NULL) + return NULL; + g_return_val_if_fail(icon->ref_count > 0, NULL); icon->ref_count--; if (icon->ref_count == 0) { - purple_buddy_icon_destroy(icon); + GHashTable *icon_cache = g_hash_table_lookup(account_cache, purple_buddy_icon_get_account(icon)); + + if (icon_cache != NULL) + g_hash_table_remove(icon_cache, purple_buddy_icon_get_username(icon)); + + g_free(icon->username); + g_free(icon->checksum); + purple_imgstore_unref(icon->img); + + PURPLE_DBUS_UNREGISTER_POINTER(icon); + g_slice_free(PurpleBuddyIcon, icon); return NULL; } @@ -174,6 +367,7 @@ PurpleConversation *conv; PurpleAccount *account; const char *username; + PurpleBuddyIcon *icon_to_set; GSList *sl, *list; g_return_if_fail(icon != NULL); @@ -181,12 +375,52 @@ account = purple_buddy_icon_get_account(icon); username = purple_buddy_icon_get_username(icon); - for (list = sl = purple_find_buddies(account, username); sl != NULL; - sl = sl->next) + /* If no data exists, then call the functions below with NULL to + * unset the icon. They will then unref the icon and it should be + * destroyed. The only way it wouldn't be destroyed is if someone + * else is holding a reference to it, in which case they can kill + * the icon when they realize it has no data. */ + icon_to_set = icon->img ? icon : NULL; + + for (list = sl = purple_find_buddies(account, username); + sl != NULL; + sl = sl->next) { PurpleBuddy *buddy = (PurpleBuddy *)sl->data; + char *old_icon; - purple_buddy_set_icon(buddy, icon); + purple_buddy_set_icon(buddy, icon_to_set); + + + old_icon = g_strdup(purple_blist_node_get_string((PurpleBlistNode *)buddy, + "buddy_icon")); + if (icon->img && purple_buddy_icons_is_caching()) + { + const char *filename = purple_imgstore_get_filename(icon->img); + purple_blist_node_set_string((PurpleBlistNode *)buddy, + "buddy_icon", + filename); + + if (icon->checksum && *icon->checksum) + { + purple_blist_node_set_string((PurpleBlistNode *)buddy, + "icon_checksum", + icon->checksum); + } + else + { + purple_blist_node_remove_setting((PurpleBlistNode *)buddy, + "icon_checksum"); + } + ref_filename(filename); + } + else + { + purple_blist_node_remove_setting((PurpleBlistNode *)buddy, "buddy_icon"); + purple_blist_node_remove_setting((PurpleBlistNode *)buddy, "icon_checksum"); + } + unref_filename(old_icon); + g_free(old_icon); } g_slist_free(list); @@ -194,160 +428,33 @@ conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, username, account); if (conv != NULL) - purple_conv_im_set_icon(PURPLE_CONV_IM(conv), icon); -} - -static void -delete_icon_cache_file(const char *dirname, const char *old_icon) -{ - struct stat st; - - g_return_if_fail(dirname != NULL); - g_return_if_fail(old_icon != NULL); - - if (g_stat(old_icon, &st) == 0) - g_unlink(old_icon); - else - { - char *filename = g_build_filename(dirname, old_icon, NULL); - if (g_stat(filename, &st) == 0) - g_unlink(filename); - g_free(filename); - } - purple_debug_info("buddyicon", "Uncached file %s\n", old_icon); + purple_conv_im_set_icon(PURPLE_CONV_IM(conv), icon_to_set); } void -purple_buddy_icon_cache(PurpleBuddyIcon *icon, PurpleBuddy *buddy) +purple_buddy_icon_set_data(PurpleBuddyIcon *icon, guchar *data, + size_t len, const char *checksum) { - const guchar *data; - const char *dirname; - char *random; - char *filename; - const char *old_icon; - size_t len = 0; - FILE *file = NULL; + PurpleStoredImage *old_img; - g_return_if_fail(icon != NULL); - g_return_if_fail(buddy != NULL); - - if (!purple_buddy_icons_is_caching()) - return; - - data = purple_buddy_icon_get_data(icon, &len); - - random = g_strdup_printf("%x", g_random_int()); - dirname = purple_buddy_icons_get_cache_dir(); - filename = g_build_filename(dirname, random, NULL); - old_icon = purple_blist_node_get_string((PurpleBlistNode*)buddy, "buddy_icon"); + g_return_if_fail(icon != NULL); - if (!g_file_test(dirname, G_FILE_TEST_IS_DIR)) - { - purple_debug_info("buddyicon", "Creating icon cache directory.\n"); - - if (g_mkdir(dirname, S_IRUSR | S_IWUSR | S_IXUSR) < 0) - { - purple_debug_error("buddyicon", - "Unable to create directory %s: %s\n", - dirname, strerror(errno)); - } - } + old_img = icon->img; + icon->img = NULL; - if ((file = g_fopen(filename, "wb")) != NULL) + if (data != NULL) { - fwrite(data, 1, len, file); - fclose(file); - purple_debug_info("buddyicon", "Wrote file %s\n", filename); - } - else - { - purple_debug_error("buddyicon", "Unable to create file %s: %s\n", - filename, strerror(errno)); - g_free(filename); - g_free(random); - return; + if (len > 0) + icon->img = purple_buddy_icon_data_new(data, len, NULL); + else + g_free(data); } - g_free(filename); - - if (old_icon != NULL) - delete_icon_cache_file(dirname, old_icon); - - purple_blist_node_set_string((PurpleBlistNode *)buddy, "buddy_icon", random); - - g_free(random); -} - -void -purple_buddy_icon_uncache(PurpleBuddy *buddy) -{ - const char *old_icon; - - g_return_if_fail(buddy != NULL); - - old_icon = purple_blist_node_get_string((PurpleBlistNode *)buddy, "buddy_icon"); - - if (old_icon != NULL) - delete_icon_cache_file(purple_buddy_icons_get_cache_dir(), old_icon); - - purple_blist_node_remove_setting((PurpleBlistNode *)buddy, "buddy_icon"); - - /* Unset the icon in case this function is called from - * something other than purple_buddy_set_icon(). */ - if (buddy->icon != NULL) - { - purple_buddy_icon_unref(buddy->icon); - buddy->icon = NULL; - } -} - -void -purple_buddy_icon_set_account(PurpleBuddyIcon *icon, PurpleAccount *account) -{ - g_return_if_fail(icon != NULL); - g_return_if_fail(account != NULL); - - icon->account = account; -} - -void -purple_buddy_icon_set_username(PurpleBuddyIcon *icon, const char *username) -{ - g_return_if_fail(icon != NULL); - g_return_if_fail(username != NULL); - - g_free(icon->username); - icon->username = g_strdup(username); -} - -void -purple_buddy_icon_set_data(PurpleBuddyIcon *icon, void *data, size_t len) -{ - g_return_if_fail(icon != NULL); - - g_free(icon->data); - - if (data != NULL && len > 0) - { - icon->data = g_memdup(data, len); - icon->len = len; - } - else - { - icon->data = NULL; - icon->len = 0; - } + icon->checksum = g_strdup(checksum); purple_buddy_icon_update(icon); -} -void -purple_buddy_icon_set_path(PurpleBuddyIcon *icon, const gchar *path) -{ - g_return_if_fail(icon != NULL); - - g_free(icon->path); - icon->path = g_strdup(path); + purple_imgstore_unref(old_img); } PurpleAccount * @@ -366,121 +473,599 @@ return icon->username; } -const guchar * +const char * +purple_buddy_icon_get_checksum(const PurpleBuddyIcon *icon) +{ + g_return_val_if_fail(icon != NULL, NULL); + + return icon->checksum; +} + +gconstpointer purple_buddy_icon_get_data(const PurpleBuddyIcon *icon, size_t *len) { g_return_val_if_fail(icon != NULL, NULL); - if (len != NULL) - *len = icon->len; - - return icon->data; -} + if (icon->img) + { + if (len != NULL) + *len = purple_imgstore_get_size(icon->img); -const char * -purple_buddy_icon_get_path(PurpleBuddyIcon *icon) -{ - g_return_val_if_fail(icon != NULL, NULL); + return purple_imgstore_get_data(icon->img); + } - return icon->path; + return NULL; } const char * -purple_buddy_icon_get_type(const PurpleBuddyIcon *icon) +purple_buddy_icon_get_extension(const PurpleBuddyIcon *icon) { - const void *data; - size_t len; - - g_return_val_if_fail(icon != NULL, NULL); - - data = purple_buddy_icon_get_data(icon, &len); - - /* TODO: Find a way to do this with GDK */ - if (len >= 4) - { - if (!strncmp(data, "BM", 2)) - return "bmp"; - else if (!strncmp(data, "GIF8", 4)) - return "gif"; - else if (!strncmp(data, "\xff\xd8\xff\xe0", 4)) - return "jpg"; - else if (!strncmp(data, "\x89PNG", 4)) - return "png"; - } + if (icon->img != NULL) + return purple_imgstore_get_extension(icon->img); return NULL; } void purple_buddy_icons_set_for_user(PurpleAccount *account, const char *username, - void *icon_data, size_t icon_len) + void *icon_data, size_t icon_len, + const char *checksum) { + PurpleBuddyIcon *icon; + g_return_if_fail(account != NULL); g_return_if_fail(username != NULL); - if (icon_data == NULL || icon_len == 0) - { - PurpleBuddyIcon *buddy_icon; + icon = purple_buddy_icons_find(account, username); - buddy_icon = purple_buddy_icons_find(account, username); - - if (buddy_icon != NULL) - purple_buddy_icon_destroy(buddy_icon); - } + if (icon != NULL) + purple_buddy_icon_set_data(icon, icon_data, icon_len, checksum); else { - PurpleBuddyIcon *icon = purple_buddy_icon_new(account, username, icon_data, icon_len); + PurpleBuddyIcon *icon = purple_buddy_icon_new(account, username, icon_data, icon_len, checksum); purple_buddy_icon_unref(icon); } } +char *purple_buddy_icon_get_full_path(PurpleBuddyIcon *icon) +{ + char *path; + + g_return_val_if_fail(icon != NULL, NULL); + + if (icon->img == NULL) + return NULL; + + path = g_build_filename(purple_buddy_icons_get_cache_dir(), + purple_imgstore_get_filename(icon->img), NULL); + if (!g_file_test(path, G_FILE_TEST_EXISTS)) + { + g_free(path); + return NULL; + } + return path; +} + +const char * +purple_buddy_icons_get_checksum_for_user(PurpleBuddy *buddy) +{ + return purple_blist_node_get_string((PurpleBlistNode*)buddy, + "icon_checksum"); +} + +static gboolean +read_icon_file(const char *path, guchar **data, size_t *len) +{ + GError *err = NULL; + + if (!g_file_get_contents(path, (gchar **)data, len, &err)) + { + purple_debug_error("buddyicon", "Error reading %s: %s\n", + path, err->message); + g_error_free(err); + + return FALSE; + } + + return TRUE; +} + PurpleBuddyIcon * purple_buddy_icons_find(PurpleAccount *account, const char *username) { GHashTable *icon_cache; - PurpleBuddyIcon *ret = NULL; - char *filename = NULL; + PurpleBuddyIcon *icon = NULL; g_return_val_if_fail(account != NULL, NULL); g_return_val_if_fail(username != NULL, NULL); icon_cache = g_hash_table_lookup(account_cache, account); - if ((icon_cache == NULL) || ((ret = g_hash_table_lookup(icon_cache, username)) == NULL)) { - const char *file; - struct stat st; + if ((icon_cache == NULL) || ((icon = g_hash_table_lookup(icon_cache, username)) == NULL)) + { PurpleBuddy *b = purple_find_buddy(account, username); + const char *protocol_icon_file; + const char *dirname; + gboolean caching; + guchar *data; + size_t len; if (!b) return NULL; - if ((file = purple_blist_node_get_string((PurpleBlistNode*)b, "buddy_icon")) == NULL) + protocol_icon_file = purple_blist_node_get_string((PurpleBlistNode*)b, "buddy_icon"); + + if (protocol_icon_file == NULL) return NULL; - if (!g_stat(file, &st)) - filename = g_strdup(file); - else - filename = g_build_filename(purple_buddy_icons_get_cache_dir(), file, NULL); + dirname = purple_buddy_icons_get_cache_dir(); + + caching = purple_buddy_icons_is_caching(); + /* By disabling caching temporarily, we avoid a loop + * and don't have to add special code through several + * functions. */ + purple_buddy_icons_set_caching(FALSE); + + if (protocol_icon_file != NULL) + { + char *path = g_build_filename(dirname, protocol_icon_file, NULL); + if (read_icon_file(path, &data, &len)) + { + const char *checksum; + + if (icon == NULL) + icon = purple_buddy_icon_create(account, username); + icon->ref_count = 0; + icon->img = NULL; + checksum = g_strdup(purple_blist_node_get_string((PurpleBlistNode*)b, "icon_checksum")); + purple_buddy_icon_set_data(icon, data, len, checksum); + } + g_free(path); + } + + purple_buddy_icons_set_caching(caching); + } + + return icon; +} + +gboolean +purple_buddy_icons_has_custom_icon(PurpleContact *contact) +{ + g_return_val_if_fail(contact != NULL, FALSE); + + return (purple_blist_node_get_string((PurpleBlistNode*)contact, "custom_buddy_icon") != NULL); +} + +PurpleStoredImage * +purple_buddy_icons_find_account_icon(PurpleAccount *account) +{ + PurpleStoredImage *img; + const char *account_icon_file; + const char *dirname; + char *path; + guchar *data; + size_t len; + + g_return_val_if_fail(account != NULL, NULL); + + if ((img = g_hash_table_lookup(pointer_icon_cache, account))) + { + return purple_imgstore_ref(img); + } + + account_icon_file = purple_account_get_string(account, "buddy_icon", NULL); + + if (account_icon_file == NULL) + return NULL; + + dirname = purple_buddy_icons_get_cache_dir(); + path = g_build_filename(dirname, account_icon_file, NULL); + + if (read_icon_file(path, &data, &len)) + { + g_free(path); + img = purple_buddy_icon_data_new(data, len, account_icon_file); + g_hash_table_insert(pointer_icon_cache, account, img); + return img; + } + g_free(path); + + return NULL; +} + +PurpleStoredImage * +purple_buddy_icons_set_account_icon(PurpleAccount *account, + guchar *icon_data, size_t icon_len) +{ + PurpleStoredImage *old_img; + PurpleStoredImage *img = NULL; + char *old_icon; + + old_img = g_hash_table_lookup(pointer_icon_cache, account); + + if (icon_data != NULL && icon_len > 0) + { + img = purple_buddy_icon_data_new(icon_data, icon_len, NULL); + } + + old_icon = g_strdup(purple_account_get_string(account, "buddy_icon", NULL)); + if (img && purple_buddy_icons_is_caching()) + { + const char *filename = purple_imgstore_get_filename(img); + purple_account_set_string(account, "buddy_icon", filename); + ref_filename(filename); + } + else + { + purple_account_set_string(account, "buddy_icon", NULL); + } + unref_filename(old_icon); + + if (img) + g_hash_table_insert(pointer_icon_cache, account, img); + else + g_hash_table_remove(pointer_icon_cache, account); + + if (purple_account_is_connected(account)) + { + PurpleConnection *gc; + PurplePluginProtocolInfo *prpl_info; + + gc = purple_account_get_connection(account); + prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl); + + if (prpl_info && prpl_info->set_buddy_icon) + prpl_info->set_buddy_icon(gc, img); + } + + if (old_img) + purple_imgstore_unref(old_img); + else + { + /* The old icon may not have been loaded into memory. In that + * case, we'll need to uncache the filename. The filenames + * are ref-counted, so this is safe. */ + purple_buddy_icon_data_uncache_file(old_icon); + } + g_free(old_icon); + + return img; +} + +PurpleStoredImage * +purple_buddy_icons_find_custom_icon(PurpleContact *contact) +{ + PurpleStoredImage *img; + const char *custom_icon_file; + const char *dirname; + char *path; + guchar *data; + size_t len; + + g_return_val_if_fail(contact != NULL, NULL); + + if ((img = g_hash_table_lookup(pointer_icon_cache, contact))) + { + return purple_imgstore_ref(img); + } + + custom_icon_file = purple_blist_node_get_string((PurpleBlistNode*)contact, "custom_buddy_icon"); + + if (custom_icon_file == NULL) + return NULL; + + dirname = purple_buddy_icons_get_cache_dir(); + path = g_build_filename(dirname, custom_icon_file, NULL); + + if (read_icon_file(path, &data, &len)) + { + g_free(path); + img = purple_buddy_icon_data_new(data, len, custom_icon_file); + g_hash_table_insert(pointer_icon_cache, contact, img); + return img; + } + g_free(path); - if (!g_stat(filename, &st)) { - FILE *f = g_fopen(filename, "rb"); - if (f) { - char *data = g_malloc(st.st_size); - fread(data, 1, st.st_size, f); - fclose(f); - ret = purple_buddy_icon_create(account, username); - purple_buddy_icon_ref(ret); - purple_buddy_icon_set_data(ret, data, st.st_size); - purple_buddy_icon_unref(ret); - g_free(data); - g_free(filename); - return ret; + return NULL; +} + +PurpleStoredImage * +purple_buddy_icons_set_custom_icon(PurpleContact *contact, + guchar *icon_data, size_t icon_len) +{ + PurpleStoredImage *old_img; + PurpleStoredImage *img = NULL; + char *old_icon; + PurpleBlistNode *child; + + old_img = g_hash_table_lookup(pointer_icon_cache, contact); + + if (icon_data != NULL && icon_len > 0) + { + img = purple_buddy_icon_data_new(icon_data, icon_len, NULL); + } + + old_icon = g_strdup(purple_blist_node_get_string((PurpleBlistNode *)contact, + "custom_buddy_icon")); + if (img && purple_buddy_icons_is_caching()) + { + const char *filename = purple_imgstore_get_filename(img); + purple_blist_node_set_string((PurpleBlistNode *)contact, + "custom_buddy_icon", + filename); + ref_filename(filename); + } + else + { + purple_blist_node_remove_setting((PurpleBlistNode *)contact, + "custom_buddy_icon"); + } + unref_filename(old_icon); + + if (img) + g_hash_table_insert(pointer_icon_cache, contact, img); + else + g_hash_table_remove(pointer_icon_cache, contact); + + for (child = contact->node.child ; child ; child = child->next) + { + PurpleBuddy *buddy; + PurpleConversation *conv; + + if (!PURPLE_BLIST_NODE_IS_BUDDY(child)) + continue; + + buddy = (PurpleBuddy *)child; + + conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, + purple_buddy_get_name(buddy), + purple_buddy_get_account(buddy)); + if (conv) + purple_conversation_update(conv, PURPLE_CONV_UPDATE_ICON); + + purple_blist_update_buddy_icon(buddy); + } + + if (old_img) + purple_imgstore_unref(old_img); + else + { + /* The old icon may not have been loaded into memory. In that + * case, we'll need to uncache the filename. The filenames + * are ref-counted, so this is safe. */ + purple_buddy_icon_data_uncache_file(old_icon); + } + g_free(old_icon); + + return img; +} + +void +purple_buddy_icon_set_old_icons_dir(const char *dirname) +{ + old_icons_dir = g_strdup(dirname); +} + +static void +migrate_buddy_icon(PurpleBlistNode *node, const char *setting_name, + const char *dirname, const char *filename) +{ + char *path; + + if (filename[0] != '/') + { + path = g_build_filename(dirname, filename, NULL); + if (g_file_test(path, G_FILE_TEST_EXISTS)) + { + g_free(path); + return; + } + g_free(path); + + path = g_build_filename(old_icons_dir, filename, NULL); + } + else + path = g_strdup(filename); + + if (g_file_test(path, G_FILE_TEST_EXISTS)) + { + guchar *icon_data; + size_t icon_len; + FILE *file; + char *new_filename; + + if (!read_icon_file(path, &icon_data, &icon_len)) + { + g_free(path); + return; + } + + g_free(path); + + new_filename = purple_buddy_icon_data_calculate_filename(icon_data, icon_len); + if (new_filename == NULL) + { + return; + } + + path = g_build_filename(dirname, new_filename, NULL); + if ((file = g_fopen(path, "wb")) != NULL) + { + if (!fwrite(icon_data, icon_len, 1, file)) + { + purple_debug_error("buddyicon", "Error writing %s: %s\n", + path, strerror(errno)); + } + else + purple_debug_info("buddyicon", "Wrote migrated cache file: %s\n", path); + + fclose(file); + } + else + { + purple_debug_error("buddyicon", "Unable to create file %s: %s\n", + path, strerror(errno)); + g_free(new_filename); + g_free(path); + return; + } + g_free(path); + + purple_blist_node_set_string(node, + setting_name, + new_filename); + ref_filename(new_filename); + + g_free(new_filename); + + if (!strcmp(setting_name, "buddy_icon")) + { + const char *hash; + + hash = purple_blist_node_get_string(node, "avatar_hash"); + if (hash != NULL) + { + purple_blist_node_set_string(node, "icon_checksum", hash); + purple_blist_node_remove_setting(node, "avatar_hash"); + } + else + { + int checksum = purple_blist_node_get_int(node, "icon_checksum"); + if (checksum != 0) + { + char *checksum_str = g_strdup_printf("%i", checksum); + purple_blist_node_remove_setting(node, "icon_checksum"); + purple_blist_node_set_string(node, "icon_checksum", checksum_str); + g_free(checksum_str); + } } } - g_free(filename); + } + else + { + /* If the icon is gone, drop the setting... */ + purple_blist_node_remove_setting(node, + setting_name); + + if (!strcmp(setting_name, "buddy_icon")) + { + purple_blist_node_remove_setting(node, + "avatar_hash"); + purple_blist_node_remove_setting(node, + "icon_checksum"); + } + g_free(path); + } +} + +void +purple_buddy_icons_account_loaded_cb() +{ + const char *dirname = purple_buddy_icons_get_cache_dir(); + GList *cur; + + for (cur = purple_accounts_get_all(); cur != NULL; cur = cur->next) + { + PurpleAccount *account = cur->data; + const char *account_icon_file = purple_account_get_string(account, "buddy_icon", NULL); + + if (account_icon_file != NULL) + { + char *path = g_build_filename(dirname, account_icon_file, NULL); + if (!g_file_test(path, G_FILE_TEST_EXISTS)) + { + purple_account_set_string(account, "buddy_icon", NULL); + } else { + ref_filename(account_icon_file); + } + g_free(path); + } + } +} + +void +purple_buddy_icons_blist_loaded_cb() +{ + PurpleBlistNode *node = purple_blist_get_root(); + const char *dirname = purple_buddy_icons_get_cache_dir(); + + /* Doing this once here saves having to check it inside a loop. */ + if (old_icons_dir != NULL) + { + if (!g_file_test(dirname, G_FILE_TEST_IS_DIR)) + { + purple_debug_info("buddyicon", "Creating icon cache directory.\n"); + + if (g_mkdir(dirname, S_IRUSR | S_IWUSR | S_IXUSR) < 0) + { + purple_debug_error("buddyicon", + "Unable to create directory %s: %s\n", + dirname, strerror(errno)); + } + } } - return ret; + while (node != NULL) + { + if (PURPLE_BLIST_NODE_IS_BUDDY(node)) + { + const char *filename; + + filename = purple_blist_node_get_string(node, "buddy_icon"); + if (filename != NULL) + { + if (old_icons_dir != NULL) + { + migrate_buddy_icon(node, + "buddy_icon", + dirname, filename); + } + else + { + char *path = g_build_filename(dirname, filename, NULL); + if (!g_file_test(path, G_FILE_TEST_EXISTS)) + { + purple_blist_node_remove_setting(node, + "buddy_icon"); + purple_blist_node_remove_setting(node, + "icon_checksum"); + } + else + ref_filename(filename); + g_free(path); + } + } + } + else if (PURPLE_BLIST_NODE_IS_CONTACT(node)) + { + const char *filename; + + filename = purple_blist_node_get_string(node, "custom_buddy_icon"); + if (filename != NULL) + { + if (old_icons_dir != NULL) + { + migrate_buddy_icon(node, + "custom_buddy_icon", + dirname, filename); + } + else + { + char *path = g_build_filename(dirname, filename, NULL); + if (!g_file_test(path, G_FILE_TEST_EXISTS)) + { + purple_blist_node_remove_setting(node, + "custom_buddy_icon"); + } + else + ref_filename(filename); + g_free(path); + } + } + } + node = purple_blist_node_next(node, TRUE); + } } void @@ -510,16 +1095,6 @@ return cache_dir; } -char *purple_buddy_icons_get_full_path(const char *icon) { - if (icon == NULL) - return NULL; - - if (g_file_test(icon, G_FILE_TEST_IS_REGULAR)) - return g_strdup(icon); - else - return g_build_filename(purple_buddy_icons_get_cache_dir(), icon, NULL); -} - void * purple_buddy_icons_get_handle() { @@ -535,13 +1110,28 @@ g_direct_hash, g_direct_equal, NULL, (GFreeFunc)g_hash_table_destroy); + icon_data_cache = g_hash_table_new(g_str_hash, g_str_equal); + icon_file_cache = g_hash_table_new_full(g_str_hash, g_str_equal, + g_free, NULL); + pointer_icon_cache = g_hash_table_new(g_direct_hash, g_direct_equal); + cache_dir = g_build_filename(purple_user_dir(), "icons", NULL); + + purple_signal_connect(purple_imgstore_get_handle(), "image-deleting", + purple_buddy_icons_get_handle(), + G_CALLBACK(image_deleting_cb), NULL); } void purple_buddy_icons_uninit() { + purple_signals_disconnect_by_handle(purple_buddy_icons_get_handle()); + g_hash_table_destroy(account_cache); + g_hash_table_destroy(icon_data_cache); + g_hash_table_destroy(icon_file_cache); + g_hash_table_destroy(pointer_icon_cache); + g_free(old_icons_dir); } void purple_buddy_icon_get_scale_size(PurpleBuddyIconSpec *spec, int *width, int *height) @@ -572,4 +1162,3 @@ *width = new_width; *height = new_height; } -
--- a/libpurple/buddyicon.h Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/buddyicon.h Fri Apr 27 05:20:10 2007 +0000 @@ -29,51 +29,36 @@ #include "account.h" #include "blist.h" +#include "imgstore.h" #include "prpl.h" -struct _PurpleBuddyIcon -{ - PurpleAccount *account; /**< The account the user is on. */ - char *username; /**< The username the icon belongs to. */ - - void *data; /**< The buddy icon data. */ - size_t len; /**< The length of the buddy icon data. */ - char *path; /**< The buddy icon's non-cached path. */ - - int ref_count; /**< The buddy icon reference count. */ -}; - #ifdef __cplusplus extern "C" { #endif + /**************************************************************************/ /** @name Buddy Icon API */ /**************************************************************************/ /*@{*/ /** - * Creates a new buddy icon structure. + * Creates a new buddy icon structure and populate it. + * + * If the buddy icon already exists, you'll get a reference to that structure, + * which will have been updated with the data supplied. * * @param account The account the user is on. * @param username The username the icon belongs to. * @param icon_data The buddy icon data. * @param icon_len The buddy icon length. + * @param checksum A protocol checksum from the prpl or @c NULL. * * @return The buddy icon structure. */ PurpleBuddyIcon *purple_buddy_icon_new(PurpleAccount *account, const char *username, - void *icon_data, size_t icon_len); - -/** - * Destroys a buddy icon structure. - * - * If the buddy icon's reference count is greater than 1, this will - * just decrease the reference count and return. - * - * @param icon The buddy icon structure to destroy. - */ -void purple_buddy_icon_destroy(PurpleBuddyIcon *icon); + void *icon_data, size_t icon_len, + const char *checksum); /** * Increments the reference count on a buddy icon. @@ -103,52 +88,17 @@ void purple_buddy_icon_update(PurpleBuddyIcon *icon); /** - * Caches a buddy icon associated with a specific buddy to disk. - * - * @param icon The buddy icon. - * @param buddy The buddy that this icon belongs to. - */ -void purple_buddy_icon_cache(PurpleBuddyIcon *icon, PurpleBuddy *buddy); - -/** - * Removes cached buddy icon for a specific buddy. - * - * @param buddy The buddy for which to remove the cached icon. - */ -void purple_buddy_icon_uncache(PurpleBuddy *buddy); - -/** - * Sets the buddy icon's account. - * - * @param icon The buddy icon. - * @param account The account. - */ -void purple_buddy_icon_set_account(PurpleBuddyIcon *icon, PurpleAccount *account); - -/** - * Sets the buddy icon's username. - * - * @param icon The buddy icon. - * @param username The username. - */ -void purple_buddy_icon_set_username(PurpleBuddyIcon *icon, const char *username); - -/** - * Sets the buddy icon's icon data. + * Sets the buddy icon's data. * * @param icon The buddy icon. - * @param data The buddy icon data. - * @param len The length of the icon data. + * @param data The buddy icon data, which the buddy icon code + * takes ownership of and will free. + * @param len The length of the data in @a data. + * @param checksum A protocol checksum from the prpl or @c NULL. */ -void purple_buddy_icon_set_data(PurpleBuddyIcon *icon, void *data, size_t len); - -/** - * Sets the buddy icon's path. - * - * @param icon The buddy icon. - * @param path The buddy icon's non-cached path. - */ -void purple_buddy_icon_set_path(PurpleBuddyIcon *icon, const gchar *path); +void +purple_buddy_icon_set_data(PurpleBuddyIcon *icon, guchar *data, + size_t len, const char *checksum); /** * Returns the buddy icon's account. @@ -169,32 +119,52 @@ const char *purple_buddy_icon_get_username(const PurpleBuddyIcon *icon); /** + * Returns the buddy icon's checksum. + * + * This function is really only for prpl use. + * + * @param icon The buddy icon. + * + * @return The checksum. + */ +const char *purple_buddy_icon_get_checksum(const PurpleBuddyIcon *icon); + +/** * Returns the buddy icon's data. * * @param icon The buddy icon. - * @param len The returned icon length. + * @param len If not @c NULL, the length of the icon data returned will be + * set in the location pointed to by this. * - * @return The icon data. + * @return A pointer to the icon data. */ -const guchar *purple_buddy_icon_get_data(const PurpleBuddyIcon *icon, size_t *len); - -/** - * Returns the buddy icon's path. - * - * @param icon The buddy icon. - * - * @return The buddy icon's non-cached path. - */ -const gchar *purple_buddy_icon_get_path(PurpleBuddyIcon *icon); +gconstpointer purple_buddy_icon_get_data(const PurpleBuddyIcon *icon, size_t *len); /** * Returns an extension corresponding to the buddy icon's file type. * * @param icon The buddy icon. * - * @return The icon's extension. + * @return The icon's extension, "icon" if unknown, or @c NULL if + * the image data has disappeared. */ -const char *purple_buddy_icon_get_type(const PurpleBuddyIcon *icon); +const char *purple_buddy_icon_get_extension(const PurpleBuddyIcon *icon); + +/** + * Returns a full path to an icon. + * + * If the icon has data and the file exists in the cache, this will return + * a full path to the cache file. + * + * In general, it is not appropriate to be poking in the icon cache + * directly. If you find yourself wanting to use this function, think + * very long and hard about it, and then don't. + * + * @param icon The buddy icon + * + * @return A full path to the file, or @c NULL under various conditions. + */ +char *purple_buddy_icon_get_full_path(PurpleBuddyIcon *icon); /*@}*/ @@ -208,13 +178,30 @@ * * @param account The account the user is on. * @param username The username of the user. - * @param icon_data The icon data. + * @param icon_data The buddy icon data, which the buddy icon code + * takes ownership of and will free. * @param icon_len The length of the icon data. + * @param checksum A protocol checksum from the prpl or @c NULL. * * @return The buddy icon set, or NULL if no icon was set. */ -void purple_buddy_icons_set_for_user(PurpleAccount *account, const char *username, - void *icon_data, size_t icon_len); +void +purple_buddy_icons_set_for_user(PurpleAccount *account, const char *username, + void *icon_data, size_t icon_len, + const char *checksum); + +/** + * Returns the checksum for the buddy icon of a specified buddy. + * + * This avoids loading the icon image data from the cache if it's + * not already loaded for some other reason. + * + * @param buddy The buddy + * + * @return The checksum. + */ +const char * +purple_buddy_icons_get_checksum_for_user(PurpleBuddy *buddy); /** * Returns the buddy icon information for a user. @@ -224,8 +211,90 @@ * * @return The icon data if found, or @c NULL if not found. */ -PurpleBuddyIcon *purple_buddy_icons_find(PurpleAccount *account, - const char *username); +PurpleBuddyIcon * +purple_buddy_icons_find(PurpleAccount *account, const char *username); + +/** + * Returns a boolean indicating if a given contact has a custom buddy icon. + * + * @param contact The contact + * + * @return A boolean indicating if @a contact has a custom buddy icon. + */ +gboolean +purple_buddy_icons_has_custom_icon(PurpleContact *contact); + +/** + * Returns the buddy icon image for an account. + * + * The caller owns a reference to the image in the store, and must dereference + * the image with purple_imgstore_unref() for it to be freed. + * + * This function deals with loading the icon from the cache, if + * needed, so it should be called in any case where you want the + * appropriate icon. + * + * @param account The account + * + * @return The account's buddy icon image. + */ +PurpleStoredImage * +purple_buddy_icons_find_account_icon(PurpleAccount *account); + +/** + * Sets a buddy icon for an account. + * + * This function will deal with saving a record of the icon, + * caching the data, etc. + * + * @param account The account for which to set a custom icon. + * @param icon_data The image data of the icon, which the + * buddy icon code will free. + * @param icon_len The length of the data in @a icon_data. + * + * @return The icon that was set. The caller does NOT own + * a reference to this, and must call purple_imgstore_ref() + * if it wants one. + */ +PurpleStoredImage * +purple_buddy_icons_set_account_icon(PurpleAccount *account, + guchar *icon_data, size_t icon_len); + +/** + * Returns the custom buddy icon image for a contact. + * + * The caller owns a reference to the image in the store, and must dereference + * the image with purple_imgstore_unref() for it to be freed. + * + * This function deals with loading the icon from the cache, if + * needed, so it should be called in any case where you want the + * appropriate icon. + * + * @param contact The contact + * + * @return The custom buddy icon image. + */ +PurpleStoredImage * +purple_buddy_icons_find_custom_icon(PurpleContact *contact); + +/** + * Sets a custom buddy icon for a user. + * + * This function will deal with saving a record of the icon, + * caching the data, etc. + * + * @param contact The contact for which to set a custom icon. + * @param icon_data The image data of the icon, which the + * buddy icon code will free. + * @param icon_len The length of the data in @a icon_data. + * + * @return The icon that was set. The caller does NOT own + * a reference to this, and must call purple_imgstore_ref() + * if it wants one. + */ +PurpleStoredImage * +purple_buddy_icons_set_custom_icon(PurpleContact *contact, + guchar *icon_data, size_t icon_len); /** * Sets whether or not buddy icon caching is enabled. @@ -263,18 +332,6 @@ const char *purple_buddy_icons_get_cache_dir(void); /** - * Takes a buddy icon and returns a full path. - * - * If @a icon is a full path to an existing file, a copy of - * @a icon is returned. Otherwise, a newly allocated string - * consiting of purple_buddy_icons_get_cache_dir() + @a icon is - * returned. - * - * @return The full path for an icon. - */ -char *purple_buddy_icons_get_full_path(const char *icon); - -/** * Returns the buddy icon subsystem handle. * * @return The subsystem handle.
--- a/libpurple/connection.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/connection.c Fri Apr 27 05:20:10 2007 +0000 @@ -284,7 +284,7 @@ /* Set the time the account came online */ purple_presence_set_login_time(presence, time(NULL)); - if (purple_prefs_get_bool("/core/logging/log_system")) + if (purple_prefs_get_bool("/purple/logging/log_system")) { PurpleLog *log = purple_account_get_log(account, TRUE); @@ -314,7 +314,7 @@ else if (gc->state == PURPLE_DISCONNECTED) { PurpleAccount *account = purple_connection_get_account(gc); - if (purple_prefs_get_bool("/core/logging/log_system")) + if (purple_prefs_get_bool("/purple/logging/log_system")) { PurpleLog *log = purple_account_get_log(account, FALSE);
--- a/libpurple/conversation.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/conversation.c Fri Apr 27 05:20:10 2007 +0000 @@ -281,7 +281,7 @@ if ((icon = purple_buddy_icons_find(account, name))) purple_conv_im_set_icon(conv->u.im, icon); - if (purple_prefs_get_bool("/core/logging/log_ims")) + if (purple_prefs_get_bool("/purple/logging/log_ims")) { purple_conversation_set_logging(conv, TRUE); open_log(conv); @@ -303,7 +303,7 @@ purple_conv_chat_set_nick(conv->u.chat, purple_account_get_username(account)); - if (purple_prefs_get_bool("/core/logging/log_chats")) + if (purple_prefs_get_bool("/purple/logging/log_chats")) { purple_conversation_set_logging(conv, TRUE); open_log(conv); @@ -352,7 +352,7 @@ if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) { - if (purple_prefs_get_bool("/core/conversations/im/send_typing")) + if (purple_prefs_get_bool("/purple/conversations/im/send_typing")) serv_send_typing(gc, name, PURPLE_NOT_TYPING); if (gc && prpl_info->convo_closed != NULL) @@ -425,8 +425,7 @@ purple_conv_im_stop_typing_timeout(conv->u.im); purple_conv_im_stop_send_typed_timeout(conv->u.im); - if (conv->u.im->icon != NULL) - purple_buddy_icon_unref(conv->u.im->icon); + purple_buddy_icon_unref(conv->u.im->icon); conv->u.im->icon = NULL; PURPLE_DBUS_UNREGISTER_POINTER(conv->u.im); @@ -941,8 +940,7 @@ if (im->icon != icon) { - if (im->icon != NULL) - purple_buddy_icon_unref(im->icon); + purple_buddy_icon_unref(im->icon); im->icon = (icon == NULL ? NULL : purple_buddy_icon_ref(icon)); } @@ -1159,9 +1157,11 @@ data[0] = conv; data[1] = (gpointer)message; - purple_request_action(conv, NULL, _("Send Message"), text, 0, data, 2, - _("_Send Message"), G_CALLBACK(purple_conv_send_confirm_cb), - _("Cancel"), NULL); + purple_request_action(conv, NULL, _("Send Message"), text, 0, + purple_conversation_get_account(conv), NULL, conv, + data, 2, + _("_Send Message"), G_CALLBACK(purple_conv_send_confirm_cb), + _("Cancel"), NULL); } void @@ -1665,7 +1665,7 @@ if (is_me) purple_conv_chat_set_nick(chat, new_user); - if (purple_prefs_get_bool("/core/conversations/chat/show_nick_change") && + if (purple_prefs_get_bool("/purple/conversations/chat/show_nick_change") && !purple_conv_chat_is_user_ignored(chat, new_user)) { if (is_me) { @@ -2003,15 +2003,15 @@ **********************************************************************/ /* Conversations */ - purple_prefs_add_none("/core/conversations"); + purple_prefs_add_none("/purple/conversations"); /* Conversations -> Chat */ - purple_prefs_add_none("/core/conversations/chat"); - purple_prefs_add_bool("/core/conversations/chat/show_nick_change", TRUE); + purple_prefs_add_none("/purple/conversations/chat"); + purple_prefs_add_bool("/purple/conversations/chat/show_nick_change", TRUE); /* Conversations -> IM */ - purple_prefs_add_none("/core/conversations/im"); - purple_prefs_add_bool("/core/conversations/im/send_typing", TRUE); + purple_prefs_add_none("/purple/conversations/im"); + purple_prefs_add_bool("/purple/conversations/im/send_typing", TRUE); /**********************************************************************
--- a/libpurple/core.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/core.c Fri Apr 27 05:20:10 2007 +0000 @@ -31,6 +31,7 @@ #include "dnsquery.h" #include "ft.h" #include "idle.h" +#include "imgstore.h" #include "network.h" #include "notify.h" #include "plugin.h" @@ -44,6 +45,7 @@ #include "sslconn.h" #include "status.h" #include "stun.h" +#include "util.h" #ifdef HAVE_DBUS # include "dbus-server.h" @@ -123,6 +125,9 @@ purple_plugins_init(); purple_plugins_probe(G_MODULE_SUFFIX); + /* The buddy icon code uses the imgstore, so init it early. */ + purple_imgstore_init(); + /* Accounts use status and buddy icons, so initialize these before accounts */ purple_status_init(); purple_buddy_icons_init(); @@ -189,6 +194,7 @@ purple_xfers_uninit(); purple_proxy_uninit(); purple_dnsquery_uninit(); + purple_imgstore_uninit(); purple_debug_info("main", "Unloading all plugins\n"); purple_plugins_destroy_all(); @@ -268,3 +274,377 @@ { return _ops; } + +static gboolean +move_and_symlink_dir(const char *path, const char *basename, const char *old_base, const char *new_base, const char *relative) +{ + char *new_name = g_build_filename(new_base, basename, NULL); +#ifndef _WIN32 + char *old_name; +#endif + if (g_rename(path, new_name)) + { + purple_debug_error("core", "Error renaming %s to %s: %s\n", + path, new_name, strerror(errno)); + g_free(new_name); + return FALSE; + } + g_free(new_name); + +#ifndef _WIN32 + /* NOTE: This new_name is relative. */ + new_name = g_build_filename(relative, basename, NULL); + old_name = g_build_filename(old_base, basename, NULL); + if (symlink(new_name, old_name)) + { + purple_debug_warning("core", "Error symlinking %s to %s: %s\n", + old_name, new_name, strerror(errno)); + } + g_free(old_name); + g_free(new_name); +#endif + + return TRUE; +} + +gboolean +purple_core_migrate(void) +{ +#error You probably want to back up your .gaim directory right now. This revision is going to destroy it, potentially not in the way we've intended + const char *user_dir = purple_user_dir(); + char *old_user_dir = g_strconcat(purple_home_dir(), + G_DIR_SEPARATOR_S ".gaim", NULL); + char *status_file; + FILE *fp; + GDir *dir; + GError *err; + const char *entry; +#ifndef _WIN32 + char *logs_dir; +#endif + char *old_icons_dir; + + if (!g_file_test(old_user_dir, G_FILE_TEST_EXISTS)) + { + /* ~/.gaim doesn't exist, so there's nothing to migrate. */ + g_free(old_user_dir); + return TRUE; + } + + status_file = g_strconcat(user_dir, G_DIR_SEPARATOR_S "migrating", NULL); + + if (g_file_test(user_dir, G_FILE_TEST_EXISTS)) + { + /* If we're here, we have both ~/.gaim and .purple. */ + + if (!g_file_test(status_file, G_FILE_TEST_EXISTS)) + { + /* There's no "migrating" status file, + * so ~/.purple is all up to date. */ + g_free(status_file); + g_free(old_user_dir); + return TRUE; + } + } + + /* If we're here, it's time to migrate from ~/.gaim to ~/.purple. */ + + /* Ensure the user directory exists */ + if (!g_file_test(user_dir, G_FILE_TEST_IS_DIR)) + { + if (g_mkdir(user_dir, S_IRUSR | S_IWUSR | S_IXUSR) == -1) + { + purple_debug_error("core", "Error creating directory %s: %s\n", + user_dir, strerror(errno)); + g_free(status_file); + g_free(old_user_dir); + return FALSE; + } + } + + /* This writes ~/.purple/migrating, which allows us to detect + * incomplete migrations and properly retry. */ + if (!(fp = g_fopen(status_file, "w"))) + { + purple_debug_error("core", "Error opening file %s for writing: %s\n", + status_file, strerror(errno)); + g_free(status_file); + g_free(old_user_dir); + return FALSE; + } + fclose(fp); + + /* Open ~/.gaim so we can loop over its contents. */ + err = NULL; + if (!(dir = g_dir_open(old_user_dir, 0, &err))) + { + purple_debug_error("core", "Error opening directory %s: %s\n", + status_file, + (err ? err->message : "Unknown error")); + if (err) + g_error_free(err); + g_free(status_file); + g_free(old_user_dir); + return FALSE; + } + + /* Loop over the contents of ~/.gaim */ + while ((entry = g_dir_read_name(dir))) + { + char *name = g_build_filename(old_user_dir, entry, NULL); + +#ifndef _WIN32 + /* Deal with symlinks... */ + if (g_file_test(name, G_FILE_TEST_IS_SYMLINK)) + { + /* We're only going to duplicate a logs symlink. */ + if (!strcmp(entry, "logs")) + { + char buf[MAXPATHLEN]; + + if (readlink(name, buf, sizeof(buf) - 1) == -1) + { + purple_debug_error("core", "Error reading symlink %s: %s\n", + name, strerror(errno)); + g_free(name); + g_dir_close(dir); + g_free(status_file); + g_free(old_user_dir); + return FALSE; + } + buf[sizeof(buf) - 1] = '\0'; + + logs_dir = g_strconcat(user_dir, G_DIR_SEPARATOR_S "logs", NULL); + + if (!strcmp(buf, "../.purple/logs") || !strcmp(buf, logs_dir)) + { + /* If the symlink points to the new directory, we're + * likely just trying again after a failed migration, + * so there's no need to fail here. */ + g_free(logs_dir); + continue; + } + + /* In case we are trying again after a failed migration, we need + * to unlink any existing symlink. If it's a directory, this + * will fail, and so will the symlink below, which is good + * because the user should sort things out. */ + g_unlink(logs_dir); + + /* Relative links will most likely still be + * valid from ~/.purple, though not it's not + * guaranteed. Oh well. */ + if (symlink(buf, logs_dir)) + { + purple_debug_error("core", "Error symlinking %s to %s: %s\n", + logs_dir, buf, strerror(errno)); + g_free(name); + g_free(logs_dir); + g_dir_close(dir); + g_free(status_file); + g_free(old_user_dir); + return FALSE; + } + + g_free(logs_dir); + continue; + } + + /* Ignore all other symlinks. */ + continue; + } +#endif + + /* Deal with directories... */ + if (g_file_test(name, G_FILE_TEST_IS_DIR)) + { + if (!strcmp(entry, "icons")) + { + /* This is a special case for the Album plugin, which + * stores data in the icons folder. We're not copying + * the icons directory over because previous bugs + * meant that it filled up with junk for many users. + * This is a great time to purge it. */ + + GDir *icons_dir; + char *new_icons_dir; + const char *icons_entry; + + err = NULL; + if (!(icons_dir = g_dir_open(name, 0, &err))) + { + purple_debug_error("core", "Error opening directory %s: %s\n", + name, + (err ? err->message : "Unknown error")); + if (err) + g_error_free(err); + g_free(name); + g_dir_close(dir); + g_free(status_file); + g_free(old_user_dir); + return FALSE; + } + + new_icons_dir = g_build_filename(user_dir, "icons", NULL); + /* Ensure the new icon directory exists */ + if (!g_file_test(new_icons_dir, G_FILE_TEST_IS_DIR)) + { + if (g_mkdir(new_icons_dir, S_IRUSR | S_IWUSR | S_IXUSR) == -1) + { + purple_debug_error("core", "Error creating directory %s: %s\n", + new_icons_dir, strerror(errno)); + g_free(new_icons_dir); + g_dir_close(icons_dir); + g_free(name); + g_dir_close(dir); + g_free(status_file); + g_free(old_user_dir); + return FALSE; + } + } + + while ((icons_entry = g_dir_read_name(icons_dir))) + { + char *icons_name = g_build_filename(name, icons_entry, NULL); + + if (g_file_test(icons_name, G_FILE_TEST_IS_DIR)) + { + if (!move_and_symlink_dir(icons_name, icons_entry, + name, new_icons_dir, "../../.purple/icons")) + { + g_free(icons_name); + g_free(new_icons_dir); + g_dir_close(icons_dir); + g_free(name); + g_dir_close(dir); + g_free(status_file); + g_free(old_user_dir); + return FALSE; + } + } + g_free(icons_name); + } + + g_dir_close(icons_dir); + } + else if (!strcmp(entry, "plugins")) + { + /* Do nothing, because we broke plugin compatibility. + * This means that the plugins directory gets left behind. */ + } + else + { + /* All other directories are moved and symlinked. */ + if (!move_and_symlink_dir(name, entry, old_user_dir, user_dir, "../.purple")) + { + g_free(name); + g_dir_close(dir); + g_free(status_file); + g_free(old_user_dir); + return FALSE; + } + } + } + else if (g_file_test(name, G_FILE_TEST_IS_REGULAR)) + { + /* Regular files are copied. */ + + char *new_name; + FILE *new_file; + + if (!(fp = g_fopen(name, "rb"))) + { + purple_debug_error("core", "Error opening file %s for reading: %s\n", + name, strerror(errno)); + g_free(name); + g_dir_close(dir); + g_free(status_file); + g_free(old_user_dir); + return FALSE; + } + + new_name = g_build_filename(user_dir, entry, NULL); + if (!(new_file = g_fopen(new_name, "wb"))) + { + purple_debug_error("core", "Error opening file %s for writing: %s\n", + new_name, strerror(errno)); + fclose(fp); + g_free(new_name); + g_free(name); + g_dir_close(dir); + g_free(status_file); + g_free(old_user_dir); + return FALSE; + } + + while (!feof(fp)) + { + unsigned char buf[256]; + size_t size; + + size = fread(buf, 1, sizeof(buf), fp); + if (size != sizeof(buf) && !feof(fp)) + { + purple_debug_error("core", "Error reading %s: %s\n", + name, strerror(errno)); + fclose(new_file); + fclose(fp); + g_free(new_name); + g_free(name); + g_dir_close(dir); + g_free(status_file); + g_free(old_user_dir); + return FALSE; + } + + if (!fwrite(buf, size, 1, new_file) && ferror(new_file) != 0) + { + purple_debug_error("core", "Error writing %s: %s\n", + new_name, strerror(errno)); + fclose(new_file); + fclose(fp); + g_free(new_name); + g_free(name); + g_dir_close(dir); + g_free(status_file); + g_free(old_user_dir); + return FALSE; + } + } + + if (fclose(new_file)) + { + purple_debug_error("core", "Error writing: %s: %s\n", + new_name, strerror(errno)); + } + if (fclose(fp)) + { + purple_debug_warning("core", "Error closing %s: %s\n", + name, strerror(errno)); + } + g_free(new_name); + } + else + purple_debug_warning("core", "Not a regular file or directory: %s\n", name); + + g_free(name); + } + + /* The migration was successful, so delete the status file. */ + if (g_unlink(status_file)) + { + purple_debug_error("core", "Error unlinking file %s: %s\n", + status_file, strerror(errno)); + g_free(status_file); + return FALSE; + } + + old_icons_dir = g_build_filename(old_user_dir, "icons", NULL); + purple_buddy_icon_set_old_icons_dir(old_icons_dir); + g_free(old_icons_dir); + + g_free(old_user_dir); + + g_free(status_file); + return TRUE; +}
--- a/libpurple/core.h Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/core.h Fri Apr 27 05:20:10 2007 +0000 @@ -106,6 +106,17 @@ */ PurpleCoreUiOps *purple_core_get_ui_ops(void); +/** + * Migrates from .gaim to .purple. + * + * UIs MUST NOT call this if they have been told to use a custom + * user directory. + * + * @return A boolean indicating success or migration failure. On failure, + * the application must display an error to the user and then exit. + */ +gboolean purple_core_migrate(void); + #ifdef __cplusplus } #endif
--- a/libpurple/debug.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/debug.c Fri Apr 27 05:20:10 2007 +0000 @@ -63,8 +63,8 @@ gchar *ts_s; if ((category != NULL) && - (purple_prefs_exists("/core/debug/timestamps")) && - (purple_prefs_get_bool("/core/debug/timestamps"))) { + (purple_prefs_exists("/purple/debug/timestamps")) && + (purple_prefs_get_bool("/purple/debug/timestamps"))) { const char *mdate; time_t mtime = time(NULL); @@ -189,11 +189,11 @@ void purple_debug_init(void) { - purple_prefs_add_none("/core/debug"); + purple_prefs_add_none("/purple/debug"); /* * This pref is currently used by both the console * output and the debug window output. */ - purple_prefs_add_bool("/core/debug/timestamps", FALSE); + purple_prefs_add_bool("/purple/debug/timestamps", FALSE); }
--- a/libpurple/ft.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/ft.c Fri Apr 27 05:20:10 2007 +0000 @@ -307,7 +307,9 @@ purple_request_file(xfer, NULL, purple_xfer_get_filename(xfer), (purple_xfer_get_type(xfer) == PURPLE_XFER_RECEIVE), G_CALLBACK(purple_xfer_choose_file_ok_cb), - G_CALLBACK(purple_xfer_choose_file_cancel_cb), xfer); + G_CALLBACK(purple_xfer_choose_file_cancel_cb), + purple_xfer_get_account(xfer), xfer->who, NULL, + xfer); return 0; } @@ -353,7 +355,9 @@ xfer->who, xfer->message, 0, time(NULL)); purple_request_accept_cancel(xfer, NULL, buf, NULL, - PURPLE_DEFAULT_ACTION_NONE, xfer, + PURPLE_DEFAULT_ACTION_NONE, + xfer->account, xfer->who, NULL, + xfer, G_CALLBACK(purple_xfer_choose_file), G_CALLBACK(cancel_recv_cb)); @@ -394,7 +398,9 @@ purple_xfer_get_remote_ip(xfer), purple_xfer_get_remote_port(xfer)); purple_request_accept_cancel(xfer, NULL, buf, buf2, - PURPLE_DEFAULT_ACTION_NONE, xfer, + PURPLE_DEFAULT_ACTION_NONE, + xfer->account, xfer->who, NULL, + xfer, G_CALLBACK(ask_accept_ok), G_CALLBACK(ask_accept_cancel)); g_free(buf);
--- a/libpurple/gaim-compat.h Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/gaim-compat.h Fri Apr 27 05:20:10 2007 +0000 @@ -343,19 +343,15 @@ #define gaim_buddy_icon_ref purple_buddy_icon_ref #define gaim_buddy_icon_unref purple_buddy_icon_unref #define gaim_buddy_icon_update purple_buddy_icon_update -#define gaim_buddy_icon_cache purple_buddy_icon_cache -#define gaim_buddy_icon_uncache purple_buddy_icon_uncache #define gaim_buddy_icon_set_account purple_buddy_icon_set_account #define gaim_buddy_icon_set_username purple_buddy_icon_set_username -#define gaim_buddy_icon_set_data purple_buddy_icon_set_data -#define gaim_buddy_icon_set_path purple_buddy_icon_set_path +#define gaim_buddy_icon_set_data purple_buddy_icon_set_protocol_data #define gaim_buddy_icon_get_account purple_buddy_icon_get_account #define gaim_buddy_icon_get_username purple_buddy_icon_get_username #define gaim_buddy_icon_get_data purple_buddy_icon_get_data -#define gaim_buddy_icon_get_path purple_buddy_icon_get_path -#define gaim_buddy_icon_get_type purple_buddy_icon_get_type +#define gaim_buddy_icon_get_type purple_buddy_icon_get_extension #define gaim_buddy_icons_set_for_user purple_buddy_icons_set_for_user #define gaim_buddy_icons_find purple_buddy_icons_find @@ -363,7 +359,6 @@ #define gaim_buddy_icons_is_caching purple_buddy_icons_is_caching #define gaim_buddy_icons_set_cache_dir purple_buddy_icons_set_cache_dir #define gaim_buddy_icons_get_cache_dir purple_buddy_icons_get_cache_dir -#define gaim_buddy_icons_get_full_path purple_buddy_icons_get_full_path #define gaim_buddy_icons_get_handle purple_buddy_icons_get_handle #define gaim_buddy_icons_init purple_buddy_icons_init @@ -967,13 +962,13 @@ #define GaimStoredImage PurpleStoredImage -#define gaim_imgstore_add purple_imgstore_add -#define gaim_imgstore_get purple_imgstore_get +#define gaim_imgstore_add purple_imgstore_add_with_id +#define gaim_imgstore_get purple_imgstore_find_by_id #define gaim_imgstore_get_data purple_imgstore_get_data #define gaim_imgstore_get_size purple_imgstore_get_size #define gaim_imgstore_get_filename purple_imgstore_get_filename -#define gaim_imgstore_ref purple_imgstore_ref -#define gaim_imgstore_unref purple_imgstore_unref +#define gaim_imgstore_ref purple_imgstore_ref_by_id +#define gaim_imgstore_unref purple_imgstore_unref_by_id /* from log.h */ @@ -2237,7 +2232,7 @@ #define gaim_value_new_outgoing purple_value_new_outgoing #define gaim_value_destroy purple_value_destroy #define gaim_value_dup purple_value_dup -#define gaim_value_get_type purple_value_get_type +#define gaim_value_purple_buddy_icon_get_extensionget_type purple_value_get_type #define gaim_value_get_subtype purple_value_get_subtype #define gaim_value_get_specific_type purple_value_get_specific_type #define gaim_value_is_outgoing purple_value_is_outgoing
--- a/libpurple/idle.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/idle.c Fri Apr 27 05:20:10 2007 +0000 @@ -121,7 +121,7 @@ purple_signal_emit(purple_blist_get_handle(), "update-idle"); - idle_reporting = purple_prefs_get_string("/core/away/idle_reporting"); + idle_reporting = purple_prefs_get_string("/purple/away/idle_reporting"); report_idle = TRUE; if (!strcmp(idle_reporting, "system") && (idle_ui_ops != NULL) && (idle_ui_ops->get_time_idle != NULL)) @@ -142,7 +142,7 @@ } /* Auto-away stuff */ - auto_away = purple_prefs_get_bool("/core/away/away_when_idle"); + auto_away = purple_prefs_get_bool("/purple/away/away_when_idle"); /* If we're not reporting idle, we can still do auto-away. * First try "system" and if that isn't possible, use "purple" */ @@ -154,11 +154,11 @@ } if (auto_away && - (time_idle > (60 * purple_prefs_get_int("/core/away/mins_before_away")))) + (time_idle > (60 * purple_prefs_get_int("/purple/away/mins_before_away")))) { purple_savedstatus_set_idleaway(TRUE); } - else if (time_idle < 60 * purple_prefs_get_int("/core/away/mins_before_away")) + else if (time_idle < 60 * purple_prefs_get_int("/purple/away/mins_before_away")) { purple_savedstatus_set_idleaway(FALSE); }
--- a/libpurple/imgstore.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/imgstore.c Fri Apr 27 05:20:10 2007 +0000 @@ -27,140 +27,170 @@ #include <glib.h> #include "debug.h" #include "imgstore.h" +#include "util.h" -static GSList *imgstore = NULL; +static GHashTable *imgstore; static int nextid = 0; /** * Stored image * - * Represents a single IM image awaiting display and/or transmission. - * Now that this type is basicly private too, these two structs could - * probably be combined. + * NOTE: purple_imgstore_add() creates these without zeroing the memory, so + * NOTE: make sure to update that function when adding members. */ struct _PurpleStoredImage { - char *data; /**< The image data. */ + int id; + guint8 refcount; size_t size; /**< The image data's size. */ char *filename; /**< The filename (for the UI) */ + gpointer data; /**< The image data. */ }; -typedef struct +PurpleStoredImage * +purple_imgstore_add(gpointer data, size_t size, const char *filename) { - int id; - int refcount; PurpleStoredImage *img; -} PurpleStoredImagePriv; -/* private functions */ + g_return_val_if_fail(data != NULL, 0); + g_return_val_if_fail(size > 0, 0); -static PurpleStoredImagePriv *purple_imgstore_get_priv(int id) { - GSList *tmp = imgstore; - PurpleStoredImagePriv *priv = NULL; + img = g_new(PurpleStoredImage, 1); + img->data = data; + img->size = size; + img->filename = g_strdup(filename); + img->refcount = 1; + img->id = 0; + + return img; +} + +int +purple_imgstore_add_with_id(gpointer data, size_t size, const char *filename) +{ + PurpleStoredImage *img = purple_imgstore_add(data, size, filename); + img->id = ++nextid; - g_return_val_if_fail(id > 0, NULL); + g_hash_table_insert(imgstore, GINT_TO_POINTER(img->id), img); + + return img->id; +} - while (tmp && !priv) { - PurpleStoredImagePriv *tmp_priv = tmp->data; +PurpleStoredImage *purple_imgstore_find_by_id(int id) { + PurpleStoredImage *img = g_hash_table_lookup(imgstore, GINT_TO_POINTER(id)); - if (tmp_priv->id == id) - priv = tmp_priv; + if (img != NULL) + purple_debug_misc("imgstore", "retrieved image id %d\n", img->id); - tmp = tmp->next; - } + return img; +} + +gconstpointer purple_imgstore_get_data(PurpleStoredImage *img) { + g_return_val_if_fail(img != NULL, NULL); - if (!priv) - purple_debug(PURPLE_DEBUG_ERROR, "imgstore", "failed to find image id %d\n", id); + return img->data; +} - return priv; +size_t purple_imgstore_get_size(PurpleStoredImage *img) +{ + g_return_val_if_fail(img != NULL, 0); + + return img->size; } -static void purple_imgstore_free_priv(PurpleStoredImagePriv *priv) { - PurpleStoredImage *img = NULL; +const char *purple_imgstore_get_filename(PurpleStoredImage *img) +{ + g_return_val_if_fail(img != NULL, NULL); + + return img->filename; +} + +const char *purple_imgstore_get_extension(PurpleStoredImage *img) +{ + g_return_val_if_fail(img != NULL, NULL); + + return purple_util_get_image_extension(img->data, img->size); +} + +void purple_imgstore_ref_by_id(int id) +{ + PurpleStoredImage *img = purple_imgstore_find_by_id(id); + + g_return_if_fail(img != NULL); + + purple_imgstore_ref(img); +} + +void purple_imgstore_unref_by_id(int id) +{ + PurpleStoredImage *img = purple_imgstore_find_by_id(id); + + g_return_if_fail(img != NULL); - g_return_if_fail(priv != NULL); + purple_imgstore_unref(img); +} + +PurpleStoredImage * +purple_imgstore_ref(PurpleStoredImage *img) +{ + g_return_val_if_fail(img != NULL, NULL); + + img->refcount++; + + return img; +} - img = priv->img; - if (img) { +PurpleStoredImage * +purple_imgstore_unref(PurpleStoredImage *img) +{ + if (img == NULL) + return NULL; + + g_return_val_if_fail(img->refcount > 0, NULL); + + img->refcount--; + + if (img->refcount == 0) + { + purple_signal_emit(purple_imgstore_get_handle(), + "image-deleting", img); + if (img->id) + g_hash_table_remove(imgstore, GINT_TO_POINTER(img->id)); + g_free(img->data); g_free(img->filename); g_free(img); } - purple_debug(PURPLE_DEBUG_INFO, "imgstore", "freed image id %d\n", priv->id); - - g_free(priv); - - imgstore = g_slist_remove(imgstore, priv); + return img; } -/* public functions */ - -int purple_imgstore_add(const void *data, size_t size, const char *filename) { - PurpleStoredImagePriv *priv; - PurpleStoredImage *img; - - g_return_val_if_fail(data != NULL, 0); - g_return_val_if_fail(size > 0, 0); +void * +purple_imgstore_get_handle() +{ + static int handle; - img = g_new0(PurpleStoredImage, 1); - img->data = g_memdup(data, size); - img->size = size; - img->filename = g_strdup(filename); - - priv = g_new0(PurpleStoredImagePriv, 1); - priv->id = ++nextid; - priv->refcount = 1; - priv->img = img; - - imgstore = g_slist_append(imgstore, priv); - purple_debug(PURPLE_DEBUG_INFO, "imgstore", "added image id %d\n", priv->id); - - return priv->id; + return &handle; } -PurpleStoredImage *purple_imgstore_get(int id) { - PurpleStoredImagePriv *priv = purple_imgstore_get_priv(id); - - g_return_val_if_fail(priv != NULL, NULL); - - purple_debug(PURPLE_DEBUG_INFO, "imgstore", "retrieved image id %d\n", priv->id); - - return priv->img; -} +void +purple_imgstore_init() +{ + void *handle = purple_imgstore_get_handle(); -gpointer purple_imgstore_get_data(PurpleStoredImage *i) { - return i->data; -} + purple_signal_register(handle, "image-deleting", + purple_marshal_VOID__POINTER, NULL, + 1, + purple_value_new(PURPLE_TYPE_SUBTYPE, + PURPLE_SUBTYPE_STORED_IMAGE)); -size_t purple_imgstore_get_size(PurpleStoredImage *i) { - return i->size; -} - -const char *purple_imgstore_get_filename(PurpleStoredImage *i) { - return i->filename; + imgstore = g_hash_table_new(g_int_hash, g_int_equal); } -void purple_imgstore_ref(int id) { - PurpleStoredImagePriv *priv = purple_imgstore_get_priv(id); - - g_return_if_fail(priv != NULL); - - (priv->refcount)++; - - purple_debug(PURPLE_DEBUG_INFO, "imgstore", "referenced image id %d (count now %d)\n", priv->id, priv->refcount); -} +void +purple_imgstore_uninit() +{ + g_hash_table_destroy(imgstore); -void purple_imgstore_unref(int id) { - PurpleStoredImagePriv *priv = purple_imgstore_get_priv(id); - - g_return_if_fail(priv != NULL); - g_return_if_fail(priv->refcount > 0); - - (priv->refcount)--; - - purple_debug(PURPLE_DEBUG_INFO, "imgstore", "unreferenced image id %d (count now %d)\n", priv->id, priv->refcount); - - if (priv->refcount == 0) - purple_imgstore_free_priv(priv); + purple_signals_unregister_by_instance(purple_blist_get_handle()); }
--- a/libpurple/imgstore.h Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/imgstore.h Fri Apr 27 05:20:10 2007 +0000 @@ -26,6 +26,8 @@ #ifndef _PURPLE_IMGSTORE_H_ #define _PURPLE_IMGSTORE_H_ +#include <glib.h> + struct _PurpleStoredImage; typedef struct _PurpleStoredImage PurpleStoredImage; @@ -34,17 +36,41 @@ #endif /** - * Add an image to the store. The caller owns a reference - * to the image in the store, and must dereference the image - * with purple_imgstore_unref for it to be freed. + * Add an image to the store. + * + * The caller owns a reference to the image in the store, and must dereference + * the image with purple_imgstore_unref() for it to be freed. + * + * No ID is allocated when using this function. If you need to reference the + * image by an ID, use purple_imgstore_add_with_id() instead. + * + * @param data Pointer to the image data, which the imgstore will take + * ownership of and free as appropriate. If you want a + * copy of the data, make it before calling this function. + * @param size Image data's size. + * @param filename Filename associated with image. * - * @param data Pointer to the image data. + * @return The stored image. + */ +PurpleStoredImage * +purple_imgstore_add(gpointer data, size_t size, const char *filename); + +/** + * Add an image to the store, allocating an ID. + * + * The caller owns a reference to the image in the store, and must dereference + * the image with purple_imgstore_unref_by_id() or purple_imgstore_unref() + * for it to be freed. + * + * @param data Pointer to the image data, which the imgstore will take + * ownership of and free as appropriate. If you want a + * copy of the data, make it before calling this function. * @param size Image data's size. * @param filename Filename associated with image. * @return ID for the image. */ -int purple_imgstore_add(const void *data, size_t size, const char *filename); +int purple_imgstore_add_with_id(gpointer data, size_t size, const char *filename); /** * Retrieve an image from the store. The caller does not own a @@ -54,22 +80,22 @@ * * @return A pointer to the requested image, or NULL if it was not found. */ -PurpleStoredImage *purple_imgstore_get(int id); +PurpleStoredImage *purple_imgstore_find_by_id(int id); /** * Retrieves a pointer to the image's data. * - * @param i The Image + * @param img The Image * * @return A pointer to the data, which must not * be freed or modified. */ -gpointer purple_imgstore_get_data(PurpleStoredImage *i); +gconstpointer purple_imgstore_get_data(PurpleStoredImage *img); /** * Retrieves the length of the image's data. * - * @param i The Image + * @param img The Image * * @return The size of the data that the pointer returned by * purple_imgstore_get_data points to. @@ -79,30 +105,82 @@ /** * Retrieves a pointer to the image's filename. * - * @param i The Image + * @param img The image * * @return A pointer to the filename, which must not * be freed or modified. */ -const char *purple_imgstore_get_filename(PurpleStoredImage *i); +const char *purple_imgstore_get_filename(PurpleStoredImage *img); + +/** + * Returns an extension corresponding to the image's file type. + * + * @param img The image. + * + * @return The icon's extension or "icon" if unknown. + */ +const char *purple_imgstore_get_extension(PurpleStoredImage *img); /** - * Increment the reference count for an image in the store. The - * image will be removed from the store when the reference count - * is zero. + * Increment the reference count. + * + * @param img The image. + * + * @return @a img + */ +PurpleStoredImage * +purple_imgstore_ref(PurpleStoredImage *img); + +/** + * Decrement the reference count. + * + * If the reference count reaches zero, the image will be freed. + * + * @param img The image. + * + * @return @a img or @c NULL if the reference count reached zero. + */ +PurpleStoredImage * +purple_imgstore_unref(PurpleStoredImage *img); + +/** + * Increment the reference count using an ID. + * + * This is a convience wrapper for purple_imgstore_find_by_id() and + * purple_imgstore_ref(), so if you have a PurpleStoredImage, it'll + * be more efficient to call purple_imgstore_ref() directly. * * @param id The ID for the image. */ -void purple_imgstore_ref(int id); +void purple_imgstore_ref_by_id(int id); /** - * Decrement the reference count for an image in the store. The - * image will be removed from the store when the reference count - * is zero. + * Decrement the reference count using an ID. + * + * This is a convience wrapper for purple_imgstore_find_by_id() and + * purple_imgstore_unref(), so if you have a PurpleStoredImage, it'll + * be more efficient to call purple_imgstore_unref() directly. * * @param id The ID for the image. */ -void purple_imgstore_unref(int id); +void purple_imgstore_unref_by_id(int id); + +/** + * Returns the image store subsystem handle. + * + * @return The subsystem handle. + */ +void *purple_imgstore_get_handle(void); + +/** + * Initializes the image store subsystem. + */ +void purple_imgstore_init(void); + +/** + * Uninitializes the image store subsystem. + */ +void purple_imgstore_uninit(void); #ifdef __cplusplus }
--- a/libpurple/internal.h Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/internal.h Fri Apr 27 05:20:10 2007 +0000 @@ -184,4 +184,20 @@ #define PURPLE_WEBSITE "http://pidgin.im/" +/* This is for the accounts code to notify the buddy icon code that + * it's done loading. We may want to replace this with a signal. */ +void +purple_buddy_icons_account_loaded_cb(void); + +/* This is for the buddy list to notify the buddy icon code that + * it's done loading. We may want to replace this with a signal. */ +void +purple_buddy_icons_blist_loaded_cb(void); + +/* This is for the purple_core_migrate() code to tell the buddy + * icon subsystem about the old icons directory so it can + * migrate any icons in use. */ +void +purple_buddy_icon_set_old_icons_dir(const char *dirname); + #endif /* _PURPLE_INTERNAL_H_ */
--- a/libpurple/log.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/log.c Fri Apr 27 05:20:10 2007 +0000 @@ -583,12 +583,12 @@ { void *handle = purple_log_get_handle(); - purple_prefs_add_none("/core/logging"); - purple_prefs_add_bool("/core/logging/log_ims", FALSE); - purple_prefs_add_bool("/core/logging/log_chats", FALSE); - purple_prefs_add_bool("/core/logging/log_system", FALSE); + purple_prefs_add_none("/purple/logging"); + purple_prefs_add_bool("/purple/logging/log_ims", FALSE); + purple_prefs_add_bool("/purple/logging/log_chats", FALSE); + purple_prefs_add_bool("/purple/logging/log_system", FALSE); - purple_prefs_add_string("/core/logging/format", "txt"); + purple_prefs_add_string("/purple/logging/format", "txt"); html_logger = purple_log_logger_new("html", _("HTML"), 11, NULL, @@ -650,9 +650,9 @@ #endif purple_value_new(PURPLE_TYPE_BOOLEAN)); - purple_prefs_connect_callback(NULL, "/core/logging/format", + purple_prefs_connect_callback(NULL, "/purple/logging/format", logger_pref_cb, NULL); - purple_prefs_trigger_callback("/core/logging/format"); + purple_prefs_trigger_callback("/purple/logging/format"); logsize_users = g_hash_table_new_full((GHashFunc)_purple_logsize_user_hash, (GEqualFunc)_purple_logsize_user_equal,
--- a/libpurple/network.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/network.c Fri Apr 27 05:20:10 2007 +0000 @@ -111,13 +111,13 @@ /* XXX - Ensure the IP address is valid */ - purple_prefs_set_string("/core/network/public_ip", ip); + purple_prefs_set_string("/purple/network/public_ip", ip); } const char * purple_network_get_public_ip(void) { - return purple_prefs_get_string("/core/network/public_ip"); + return purple_prefs_get_string("/purple/network/public_ip"); } const char * @@ -176,7 +176,7 @@ PurpleStunNatDiscovery *stun; /* Check if the user specified an IP manually */ - if (!purple_prefs_get_bool("/core/network/auto_ip")) { + if (!purple_prefs_get_bool("/purple/network/auto_ip")) { ip = purple_network_get_public_ip(); /* Make sure the IP address entered by the user is valid */ if ((ip != NULL) && (purple_network_ip_atoi(ip) != NULL)) @@ -387,9 +387,9 @@ { PurpleNetworkListenData *ret = NULL; - if (purple_prefs_get_bool("/core/network/ports_range_use")) { - start = purple_prefs_get_int("/core/network/ports_range_start"); - end = purple_prefs_get_int("/core/network/ports_range_end"); + if (purple_prefs_get_bool("/purple/network/ports_range_use")) { + start = purple_prefs_get_int("/purple/network/ports_range_start"); + end = purple_prefs_get_int("/purple/network/ports_range_end"); } else { if (end < start) end = start; @@ -660,12 +660,12 @@ } #endif - purple_prefs_add_none ("/core/network"); - purple_prefs_add_bool ("/core/network/auto_ip", TRUE); - purple_prefs_add_string("/core/network/public_ip", ""); - purple_prefs_add_bool ("/core/network/ports_range_use", FALSE); - purple_prefs_add_int ("/core/network/ports_range_start", 1024); - purple_prefs_add_int ("/core/network/ports_range_end", 2048); + purple_prefs_add_none ("/purple/network"); + purple_prefs_add_bool ("/purple/network/auto_ip", TRUE); + purple_prefs_add_string("/purple/network/public_ip", ""); + purple_prefs_add_bool ("/purple/network/ports_range_use", FALSE); + purple_prefs_add_int ("/purple/network/ports_range_start", 1024); + purple_prefs_add_int ("/purple/network/ports_range_end", 2048); purple_upnp_discover(NULL, NULL);
--- a/libpurple/plugins/autoaccept.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/plugins/autoaccept.c Fri Apr 27 05:20:10 2007 +0000 @@ -162,10 +162,13 @@ purple_request_choice(plugin, _("Set Autoaccept Setting"), message, NULL, purple_blist_node_get_int(node, "autoaccept"), _("_Save"), G_CALLBACK(save_cb), - _("_Cancel"), NULL, node, + _("_Cancel"), NULL, + NULL, NULL, NULL, + node, _("Ask"), FT_ASK, _("Auto Accept"), FT_ACCEPT, _("Auto Reject"), FT_REJECT, + NULL, purple_contact_get_alias((PurpleContact *)node), NULL, NULL); g_free(message); }
--- a/libpurple/plugins/buddynote.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/plugins/buddynote.c Fri Apr 27 05:20:10 2007 +0000 @@ -49,6 +49,7 @@ note, TRUE, FALSE, "html", _("Save"), G_CALLBACK(do_it_cb), _("Cancel"), G_CALLBACK(dont_do_it_cb), + NULL, NULL, NULL, node); }
--- a/libpurple/plugins/idle.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/plugins/idle.c Fri Apr 27 05:20:10 2007 +0000 @@ -168,6 +168,7 @@ request, _("_Set"), G_CALLBACK(idle_action_ok), _("_Cancel"), NULL, + NULL, NULL, NULL, NULL); } @@ -201,6 +202,7 @@ request, _("_Unset"), G_CALLBACK(unidle_action_ok), _("_Cancel"), NULL, + NULL, NULL, NULL, NULL); } @@ -226,6 +228,7 @@ request, _("_Set"), G_CALLBACK(idle_all_action_ok), _("_Cancel"), NULL, + NULL, NULL, NULL, NULL); }
--- a/libpurple/plugins/offlinemsg.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/plugins/offlinemsg.c Fri Apr 27 05:20:10 2007 +0000 @@ -155,7 +155,9 @@ purple_request_action(handle, _("Offline Message"), ask, _("You can edit/delete the pounce from the `Buddy Pounces' dialog"), - 1, offline, 2, + 1, + offline->account, offline->who, offline->conv, + offline, 2, _("Yes"), record_pounce, _("No"), cancel_poune); g_free(ask);
--- a/libpurple/plugins/perl/common/Account.xs Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/plugins/perl/common/Account.xs Fri Apr 27 05:20:10 2007 +0000 @@ -59,7 +59,7 @@ const char *user_info void -purple_account_set_buddy_icon(account, icon) +purple_account_set_buddy_icon_path(account, icon) Purple::Account account const char *icon @@ -144,7 +144,7 @@ Purple::Account account const char * -purple_account_get_buddy_icon(account) +purple_account_get_buddy_icon_path(account) Purple::Account account const char *
--- a/libpurple/plugins/perl/common/BuddyIcon.xs Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/plugins/perl/common/BuddyIcon.xs Fri Apr 27 05:20:10 2007 +0000 @@ -3,10 +3,6 @@ MODULE = Purple::Buddy::Icon PACKAGE = Purple::Buddy::Icon PREFIX = purple_buddy_icon_ PROTOTYPES: ENABLE -void -purple_buddy_icon_destroy(icon) - Purple::Buddy::Icon icon - Purple::Buddy::Icon purple_buddy_icon_ref(icon) Purple::Buddy::Icon icon @@ -20,25 +16,11 @@ Purple::Buddy::Icon icon void -purple_buddy_icon_cache(icon, buddy) - Purple::Buddy::Icon icon - Purple::BuddyList::Buddy buddy - -void -purple_buddy_icon_set_account(icon, account) - Purple::Buddy::Icon icon - Purple::Account account - -void -purple_buddy_icon_set_username(icon, username) - Purple::Buddy::Icon icon - const char * username - -void -purple_buddy_icon_set_data(icon, data, len) +purple_buddy_icon_set_data(icon, data, len, checksum) Purple::Buddy::Icon icon void * data size_t len + char *checksum Purple::Account purple_buddy_icon_get_account(icon) @@ -54,7 +36,7 @@ size_t &len const char * -purple_buddy_icon_get_type(icon) +purple_buddy_icon_get_extension(icon) Purple::Buddy::Icon icon void
--- a/libpurple/plugins/perl/common/ImgStore.xs Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/plugins/perl/common/ImgStore.xs Fri Apr 27 05:20:10 2007 +0000 @@ -3,17 +3,23 @@ MODULE = Purple::ImgStore PACKAGE = Purple::ImgStore PREFIX = purple_imgstore_ PROTOTYPES: ENABLE -int +Purple::StoredImage purple_imgstore_add(data, size, filename) void *data size_t size const char *filename +int +purple_imgstore_add_with_id(data, size, filename) + void *data + size_t size + const char *filename + Purple::StoredImage -purple_imgstore_get(id) +purple_imgstore_find_by_id(id) int id -gpointer +gconstpointer purple_imgstore_get_data(i) Purple::StoredImage i @@ -25,11 +31,23 @@ purple_imgstore_get_size(i) Purple::StoredImage i -void +const char * +purple_imgstore_get_extension(i) + Purple::StoredImage i + +Purple::StoredImage purple_imgstore_ref(id) + Purple::StoredImage id + +Purple::StoredImage +purple_imgstore_unref(id) + Purple::StoredImage id + +void +purple_imgstore_ref_by_id(id) int id -void -purple_imgstore_unref(id) +void +purple_imgstore_unref_by_id(id) int id
--- a/libpurple/plugins/perl/common/Request.xs Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/plugins/perl/common/Request.xs Fri Apr 27 05:20:10 2007 +0000 @@ -106,7 +106,7 @@ gpr->cancel_cb = g_strdup_printf("Purple::Script::%s::%s", basename, SvPV(cancel_cb, len)); g_free(basename); - RETVAL = purple_request_input(handle, title, primary, secondary, default_value, multiline, masked, hint, ok_text, G_CALLBACK(purple_perl_request_ok_cb), cancel_text, G_CALLBACK(purple_perl_request_cancel_cb), gpr); + RETVAL = purple_request_input(handle, title, primary, secondary, default_value, multiline, masked, hint, ok_text, G_CALLBACK(purple_perl_request_ok_cb), cancel_text, G_CALLBACK(purple_perl_request_cancel_cb), NULL, NULL, NULL, gpr); OUTPUT: RETVAL @@ -130,7 +130,7 @@ gpr->cancel_cb = g_strdup_printf("Purple::Script::%s::%s", basename, SvPV(cancel_cb, len)); g_free(basename); - RETVAL = purple_request_file(handle, title, filename, savedialog, G_CALLBACK(purple_perl_request_ok_cb), G_CALLBACK(purple_perl_request_cancel_cb), gpr); + RETVAL = purple_request_file(handle, title, filename, savedialog, G_CALLBACK(purple_perl_request_ok_cb), G_CALLBACK(purple_perl_request_cancel_cb), NULL, NULL, NULL, gpr); OUTPUT: RETVAL @@ -157,7 +157,7 @@ gpr->cancel_cb = g_strdup_printf("Purple::Script::%s::%s", basename, SvPV(cancel_cb, len)); g_free(basename); - RETVAL = purple_request_fields(handle, title, primary, secondary, fields, ok_text, G_CALLBACK(purple_perl_request_ok_cb), cancel_text, G_CALLBACK(purple_perl_request_cancel_cb), gpr); + RETVAL = purple_request_fields(handle, title, primary, secondary, fields, ok_text, G_CALLBACK(purple_perl_request_ok_cb), cancel_text, G_CALLBACK(purple_perl_request_cancel_cb), NULL, NULL, NULL, gpr); OUTPUT: RETVAL
--- a/libpurple/plugins/tcl/tcl_ref.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/plugins/tcl/tcl_ref.c Fri Apr 27 05:20:10 2007 +0000 @@ -114,17 +114,18 @@ char *ptr; PurpleStringref *type; void *value; - int magicnumber = strlen("purple-"); + static const char const *prefix = "purple-"; + static const int prefixlen = sizeof(prefix) - 1; - if (strlen(bytes) < magicnumber - || strncmp(bytes, "purple-", magicnumber) + if (strlen(bytes) < prefixlen + || strncmp(bytes, prefix, prefixlen) || (ptr = strchr(bytes, ':')) == NULL - || (ptr - bytes) == magicnumber) + || (ptr - bytes) == prefixlen) goto badobject; /* Bad Ethan */ *ptr = '\0'; - type = purple_stringref_new(bytes + magicnumber); + type = purple_stringref_new(bytes + prefixlen); *ptr = ':'; ptr++;
--- a/libpurple/prefs.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/prefs.c Fri Apr 27 05:20:10 2007 +0000 @@ -438,14 +438,14 @@ /* I introduced a bug in 2.0.0beta2. This fixes the broken * scores on upgrade. This can be removed sometime shortly * after 2.0.0 final is released. -- rlaager */ - if (purple_prefs_get_int("/core/status/scores/offline") == -500 && - purple_prefs_get_int("/core/status/scores/available") == 100 && - purple_prefs_get_int("/core/status/scores/invisible") == -50 && - purple_prefs_get_int("/core/status/scores/away") == -100 && - purple_prefs_get_int("/core/status/scores/extended_away") == -200 && - purple_prefs_get_int("/core/status/scores/idle") == -400) + if (purple_prefs_get_int("/purple/status/scores/offline") == -500 && + purple_prefs_get_int("/purple/status/scores/available") == 100 && + purple_prefs_get_int("/purple/status/scores/invisible") == -50 && + purple_prefs_get_int("/purple/status/scores/away") == -100 && + purple_prefs_get_int("/purple/status/scores/extended_away") == -200 && + purple_prefs_get_int("/purple/status/scores/idle") == -400) { - purple_prefs_set_int("/core/status/scores/idle", -10); + purple_prefs_set_int("/purple/status/scores/idle", -10); } return TRUE; @@ -1120,7 +1120,7 @@ if(newchild == NULL) { /* no rename happened, we weren't able to find the new pref */ char *tmpname = pref_full_name(child); - purple_debug_error("prefs", "Unable to find rename pref for %s", tmpname); + purple_debug_error("prefs", "Unable to find rename pref for %s\n", tmpname); g_free(tmpname); } } @@ -1328,25 +1328,25 @@ purple_prefs_update_old() { /* Remove some no-longer-used prefs */ - purple_prefs_remove("/core/away/auto_response/enabled"); - purple_prefs_remove("/core/away/auto_response/idle_only"); - purple_prefs_remove("/core/away/auto_response/in_active_conv"); - purple_prefs_remove("/core/away/auto_response/sec_before_resend"); - purple_prefs_remove("/core/away/auto_response"); - purple_prefs_remove("/core/away/default_message"); - purple_prefs_remove("/core/buddies/use_server_alias"); - purple_prefs_remove("/core/conversations/away_back_on_send"); - purple_prefs_remove("/core/conversations/send_urls_as_links"); - purple_prefs_remove("/core/conversations/im/show_login"); - purple_prefs_remove("/core/conversations/chat/show_join"); - purple_prefs_remove("/core/conversations/chat/show_leave"); - purple_prefs_remove("/core/conversations/combine_chat_im"); - purple_prefs_remove("/core/conversations/use_alias_for_title"); - purple_prefs_remove("/core/logging/log_signon_signoff"); - purple_prefs_remove("/core/logging/log_idle_state"); - purple_prefs_remove("/core/logging/log_away_state"); - purple_prefs_remove("/core/logging/log_own_states"); - purple_prefs_remove("/core/status/scores/hidden"); + purple_prefs_remove("/purple/away/auto_response/enabled"); + purple_prefs_remove("/purple/away/auto_response/idle_only"); + purple_prefs_remove("/purple/away/auto_response/in_active_conv"); + purple_prefs_remove("/purple/away/auto_response/sec_before_resend"); + purple_prefs_remove("/purple/away/auto_response"); + purple_prefs_remove("/purple/away/default_message"); + purple_prefs_remove("/purple/buddies/use_server_alias"); + purple_prefs_remove("/purple/conversations/away_back_on_send"); + purple_prefs_remove("/purple/conversations/send_urls_as_links"); + purple_prefs_remove("/purple/conversations/im/show_login"); + purple_prefs_remove("/purple/conversations/chat/show_join"); + purple_prefs_remove("/purple/conversations/chat/show_leave"); + purple_prefs_remove("/purple/conversations/combine_chat_im"); + purple_prefs_remove("/purple/conversations/use_alias_for_title"); + purple_prefs_remove("/purple/logging/log_signon_signoff"); + purple_prefs_remove("/purple/logging/log_idle_state"); + purple_prefs_remove("/purple/logging/log_away_state"); + purple_prefs_remove("/purple/logging/log_own_states"); + purple_prefs_remove("/purple/status/scores/hidden"); purple_prefs_remove("/plugins/core/autorecon/hide_connected_error"); purple_prefs_remove("/plugins/core/autorecon/hide_connecting_error"); purple_prefs_remove("/plugins/core/autorecon/hide_reconnecting_dialog"); @@ -1354,12 +1354,13 @@ purple_prefs_remove("/plugins/core/autorecon"); /* Convert old sounds while_away pref to new 3-way pref. */ - if (purple_prefs_exists("/core/sound/while_away") && - purple_prefs_get_bool("/core/sound/while_away")) + if (purple_prefs_exists("/purple/sound/while_away") && + purple_prefs_get_bool("/purple/sound/while_away")) { - purple_prefs_set_int("/core/sound/while_status", 3); + purple_prefs_set_int("/purple/sound/while_status", 3); } - purple_prefs_remove("/core/sound/while_away"); + purple_prefs_remove("/purple/sound/while_away"); + purple_prefs_rename("/core", "/purple"); } void * @@ -1379,52 +1380,52 @@ purple_prefs_connect_callback(handle, "/", prefs_save_cb, NULL); - purple_prefs_add_none("/core"); + purple_prefs_add_none("/purple"); purple_prefs_add_none("/plugins"); purple_prefs_add_none("/plugins/core"); purple_prefs_add_none("/plugins/lopl"); purple_prefs_add_none("/plugins/prpl"); /* Away */ - purple_prefs_add_none("/core/away"); - purple_prefs_add_string("/core/away/idle_reporting", "system"); - purple_prefs_add_bool("/core/away/away_when_idle", TRUE); - purple_prefs_add_int("/core/away/mins_before_away", 5); + purple_prefs_add_none("/purple/away"); + purple_prefs_add_string("/purple/away/idle_reporting", "system"); + purple_prefs_add_bool("/purple/away/away_when_idle", TRUE); + purple_prefs_add_int("/purple/away/mins_before_away", 5); /* Away -> Auto-Reply */ - if (!purple_prefs_exists("/core/away/auto_response/enabled") || - !purple_prefs_exists("/core/away/auto_response/idle_only")) + if (!purple_prefs_exists("/purple/away/auto_response/enabled") || + !purple_prefs_exists("/purple/away/auto_response/idle_only")) { - purple_prefs_add_string("/core/away/auto_reply", "awayidle"); + purple_prefs_add_string("/purple/away/auto_reply", "awayidle"); } else { - if (!purple_prefs_get_bool("/core/away/auto_response/enabled")) + if (!purple_prefs_get_bool("/purple/away/auto_response/enabled")) { - purple_prefs_add_string("/core/away/auto_reply", "never"); + purple_prefs_add_string("/purple/away/auto_reply", "never"); } else { - if (purple_prefs_get_bool("/core/away/auto_response/idle_only")) + if (purple_prefs_get_bool("/purple/away/auto_response/idle_only")) { - purple_prefs_add_string("/core/away/auto_reply", "awayidle"); + purple_prefs_add_string("/purple/away/auto_reply", "awayidle"); } else { - purple_prefs_add_string("/core/away/auto_reply", "away"); + purple_prefs_add_string("/purple/away/auto_reply", "away"); } } } /* Buddies */ - purple_prefs_add_none("/core/buddies"); + purple_prefs_add_none("/purple/buddies"); /* Contact Priority Settings */ - purple_prefs_add_none("/core/contact"); - purple_prefs_add_bool("/core/contact/last_match", FALSE); - purple_prefs_remove("/core/contact/offline_score"); - purple_prefs_remove("/core/contact/away_score"); - purple_prefs_remove("/core/contact/idle_score"); + purple_prefs_add_none("/purple/contact"); + purple_prefs_add_bool("/purple/contact/last_match", FALSE); + purple_prefs_remove("/purple/contact/offline_score"); + purple_prefs_remove("/purple/contact/away_score"); + purple_prefs_remove("/purple/contact/idle_score"); } void
--- a/libpurple/protocols/gg/gg.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/gg/gg.c Fri Apr 27 05:20:10 2007 +0000 @@ -334,7 +334,9 @@ PurpleConnection *gc = (PurpleConnection *)action->context; purple_request_file(action, _("Save buddylist..."), NULL, TRUE, - G_CALLBACK(ggp_callback_buddylist_save_ok), NULL, gc); + G_CALLBACK(ggp_callback_buddylist_save_ok), NULL, + purple_connection_get_account(gc), NULL, NULL, + gc); } /* }}} */ @@ -346,7 +348,9 @@ PurpleConnection *gc = (PurpleConnection *)action->context; purple_request_file(action, "Load buddylist from file...", NULL, FALSE, - G_CALLBACK(ggp_callback_buddylist_load_ok), NULL, gc); + G_CALLBACK(ggp_callback_buddylist_load_ok), NULL, + purple_connection_get_account(gc), NULL, NULL, + gc); } /* }}} */ @@ -496,6 +500,7 @@ fields, _("OK"), G_CALLBACK(ggp_callback_register_account_ok), _("Cancel"), G_CALLBACK(ggp_callback_register_account_cancel), + purple_connection_get_account(gc), NULL, NULL, gc); } /* }}} */ @@ -654,6 +659,7 @@ fields, _("OK"), G_CALLBACK(ggp_callback_find_buddies), _("Cancel"), NULL, + purple_connection_get_account(gc), NULL, NULL, gc); } /* }}} */ @@ -789,7 +795,9 @@ _("Change Gadu-Gadu Password"), msg, fields, _("OK"), G_CALLBACK(ggp_callback_change_passwd_ok), - _("Cancel"), NULL, gc); + _("Cancel"), NULL, + purple_connection_get_account(gc), NULL, NULL, + gc); g_free(msg); } @@ -868,7 +876,9 @@ msg, fields, _("Add"), G_CALLBACK(ggp_callback_add_to_chat_ok), - _("Cancel"), NULL, gc); + _("Cancel"), NULL, + purple_connection_get_account(gc), NULL, NULL, + gc); g_free(msg); } /* }}} */
--- a/libpurple/protocols/irc/cmds.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/irc/cmds.c Fri Apr 27 05:20:10 2007 +0000 @@ -559,6 +559,22 @@ return 0; } +int irc_cmd_whowas(struct irc_conn *irc, const char *cmd, const char *target, const char **args) +{ + char *buf; + + if (!args || !args[0]) + return 0; + + buf = irc_format(irc, "vn", "WHOWAS", args[0]); + + irc->whois.nick = g_strdup(args[0]); + irc_send(irc, buf); + g_free(buf); + + return 0; +} + static void irc_do_mode(struct irc_conn *irc, const char *target, const char *sign, char **ops) { char *buf, mode[5];
--- a/libpurple/protocols/irc/irc.h Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/irc/irc.h Fri Apr 27 05:20:10 2007 +0000 @@ -179,6 +179,7 @@ int irc_cmd_topic(struct irc_conn *irc, const char *cmd, const char *target, const char **args); int irc_cmd_wallops(struct irc_conn *irc, const char *cmd, const char *target, const char **args); int irc_cmd_whois(struct irc_conn *irc, const char *cmd, const char *target, const char **args); +int irc_cmd_whowas(struct irc_conn *irc, const char *cmd, const char *target, const char **args); PurpleXfer *irc_dccsend_new_xfer(PurpleConnection *gc, const char *who); void irc_dccsend_send_file(PurpleConnection *gc, const char *who, const char *file);
--- a/libpurple/protocols/irc/msgs.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/irc/msgs.c Fri Apr 27 05:20:10 2007 +0000 @@ -236,18 +236,20 @@ void irc_msg_whois(struct irc_conn *irc, const char *name, const char *from, char **args) { if (!irc->whois.nick) { - purple_debug(PURPLE_DEBUG_WARNING, "irc", "Unexpected WHOIS reply for %s\n", args[1]); + purple_debug(PURPLE_DEBUG_WARNING, "irc", "Unexpected %s reply for %s\n", !strcmp(name, "314") ? "WHOWAS" : "WHOIS" + , args[1]); return; } if (purple_utf8_strcasecmp(irc->whois.nick, args[1])) { - purple_debug(PURPLE_DEBUG_WARNING, "irc", "Got WHOIS reply for %s while waiting for %s\n", args[1], irc->whois.nick); + purple_debug(PURPLE_DEBUG_WARNING, "irc", "Got %s reply for %s while waiting for %s\n", !strcmp(name, "314") ? "WHOWAS" : "WHOIS" + , args[1], irc->whois.nick); return; } if (!strcmp(name, "301")) { irc->whois.away = g_strdup(args[2]); - } else if (!strcmp(name, "311")) { + } else if (!strcmp(name, "311") || !strcmp(name, "314")) { irc->whois.userhost = g_strdup_printf("%s@%s", args[2], args[3]); irc->whois.name = g_strdup(args[5]); } else if (!strcmp(name, "312")) { @@ -273,11 +275,13 @@ PurpleNotifyUserInfo *user_info; if (!irc->whois.nick) { - purple_debug(PURPLE_DEBUG_WARNING, "irc", "Unexpected End of WHOIS for %s\n", args[1]); + purple_debug(PURPLE_DEBUG_WARNING, "irc", "Unexpected End of %s for %s\n", !strcmp(name, "369") ? "WHOWAS" : "WHOIS" + , args[1]); return; } if (purple_utf8_strcasecmp(irc->whois.nick, args[1])) { - purple_debug(PURPLE_DEBUG_WARNING, "irc", "Received end of WHOIS for %s, expecting %s\n", args[1], irc->whois.nick); + purple_debug(PURPLE_DEBUG_WARNING, "irc", "Received end of %s for %s, expecting %s\n", !strcmp(name, "369") ? "WHOWAS" : "WHOIS" + , args[1], irc->whois.nick); return; }
--- a/libpurple/protocols/irc/parse.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/irc/parse.c Fri Apr 27 05:20:10 2007 +0000 @@ -64,6 +64,8 @@ { "318", "nt:", irc_msg_endwhois }, /* End of WHOIS */ { "319", "nn:", irc_msg_whois }, /* Whois channels */ { "320", "nn:", irc_msg_whois }, /* Whois (fn ident) */ + { "314", "nnvvv:", irc_msg_whois }, /* Whowas user */ + { "369", "nt:", irc_msg_endwhois }, /* End of WHOWAS */ { "321", "*", irc_msg_list }, /* Start of list */ { "322", "ncv:", irc_msg_list }, /* List. */ { "323", ":", irc_msg_list }, /* End of list. */ @@ -78,6 +80,7 @@ { "376", "n:", irc_msg_motd }, /* End of MOTD */ { "391", "nv:", irc_msg_time }, /* Time reply */ { "401", "nt:", irc_msg_nonick }, /* No such nick/chan */ + { "406", "nt:", irc_msg_nonick }, /* No such nick for WHOWAS */ { "403", "nc:", irc_msg_nochan }, /* No such channel */ { "404", "nt:", irc_msg_nosend }, /* Cannot send to chan */ { "421", "nv:", irc_msg_unknown }, /* Unknown command */ @@ -148,6 +151,7 @@ { "voice", ":", irc_cmd_op, N_("voice <nick1> [nick2] ...: Grant channel voice status to someone. You must be a channel operator to do this.") }, { "wallops", ":", irc_cmd_wallops, N_("wallops <message>: If you don't know what this is, you probably can't use it.") }, { "whois", "tt", irc_cmd_whois, N_("whois [server] <nick>: Get information on a user.") }, + { "whowas", "t", irc_cmd_whowas, N_("whowas <nick>: Get information on a user that has logged off.") }, { NULL, NULL, NULL, NULL } };
--- a/libpurple/protocols/jabber/auth.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/jabber/auth.c Fri Apr 27 05:20:10 2007 +0000 @@ -294,7 +294,7 @@ purple_request_yes_no(js->gc, _("Plaintext Authentication"), _("Plaintext Authentication"), _("This server requires plaintext authentication over an unencrypted connection. Allow this and continue authentication?"), - 2, js->gc->account, + 2, js->gc->account, NULL, NULL, NULL, allow_cyrus_plaintext_auth, disallow_plaintext_auth); return; @@ -480,7 +480,9 @@ purple_request_yes_no(js->gc, _("Plaintext Authentication"), _("Plaintext Authentication"), _("This server requires plaintext authentication over an unencrypted connection. Allow this and continue authentication?"), - 2, js->gc->account, allow_plaintext_auth, + 2, + purple_connection_get_account(js->gc), NULL, NULL, + purple_connection_get_account(js->gc), allow_plaintext_auth, disallow_plaintext_auth); return; } @@ -562,7 +564,9 @@ purple_request_yes_no(js->gc, _("Plaintext Authentication"), _("Plaintext Authentication"), _("This server requires plaintext authentication over an unencrypted connection. Allow this and continue authentication?"), - 2, js->gc->account, allow_plaintext_auth, + 2, + purple_connection_get_account(js->gc), NULL, NULL, + purple_connection_get_account(js->gc), allow_plaintext_auth, disallow_plaintext_auth); return; }
--- a/libpurple/protocols/jabber/buddy.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/jabber/buddy.c Fri Apr 27 05:20:10 2007 +0000 @@ -383,7 +383,6 @@ JabberIq *iq; JabberStream *js = gc->proto_data; xmlnode *vc_node; - char *avatar_file = NULL; struct tag_attr *tag_attr; g_free(js->avatar_hash); @@ -393,7 +392,6 @@ * Send only if there's actually any *information* to send */ vc_node = info ? xmlnode_from_str(info, -1) : NULL; - avatar_file = purple_buddy_icons_get_full_path(purple_account_get_buddy_icon(gc->account)); if(!vc_node) { vc_node = xmlnode_new("vCard"); @@ -403,27 +401,29 @@ if (vc_node->name && !g_ascii_strncasecmp(vc_node->name, "vCard", 5)) { - GError *error = NULL; - gchar *avatar_data_tmp; - guchar *avatar_data; - gsize avatar_len; + PurpleStoredImage *img; - if(avatar_file && g_file_get_contents(avatar_file, &avatar_data_tmp, &avatar_len, &error)) { + if ((img = purple_buddy_icons_find_account_icon(gc->account))) { + gconstpointer avatar_data; + gsize avatar_len; xmlnode *photo, *binval; gchar *enc; int i; unsigned char hashval[20]; char *p, hash[41]; - avatar_data = (guchar *) avatar_data_tmp; + avatar_data = purple_imgstore_get_data(img); + avatar_len = purple_imgstore_get_size(img); photo = xmlnode_new_child(vc_node, "PHOTO"); binval = xmlnode_new_child(photo, "BINVAL"); enc = purple_base64_encode(avatar_data, avatar_len); - purple_cipher_digest_region("sha1", (guchar *)avatar_data, + purple_cipher_digest_region("sha1", avatar_data, avatar_len, sizeof(hashval), hashval, NULL); + purple_imgstore_unref(img); + p = hash; for(i=0; i<20; i++, p+=2) snprintf(p, 3, "%02x", hashval[i]); @@ -431,11 +431,7 @@ xmlnode_insert_data(binval, enc, -1); g_free(enc); - g_free(avatar_data); - } else if (error != NULL) { - g_error_free(error); } - g_free(avatar_file); iq = jabber_iq_new(js, JABBER_IQ_SET); xmlnode_insert_child(iq->node, vc_node); @@ -445,7 +441,7 @@ } } -void jabber_set_buddy_icon(PurpleConnection *gc, const char *iconfile) +void jabber_set_buddy_icon(PurpleConnection *gc, PurpleStoredImage *img) { PurplePresence *gpresence; PurpleStatus *status; @@ -586,6 +582,7 @@ fields, _("Save"), G_CALLBACK(jabber_format_info), _("Cancel"), NULL, + purple_connection_get_account(gc), NULL, NULL, gc); } @@ -714,7 +711,7 @@ purple_notify_user_info_destroy(user_info); while(jbi->vcard_imgids) { - purple_imgstore_unref(GPOINTER_TO_INT(jbi->vcard_imgids->data)); + purple_imgstore_unref_by_id(GPOINTER_TO_INT(jbi->vcard_imgids->data)); jbi->vcard_imgids = g_slist_delete_link(jbi->vcard_imgids, jbi->vcard_imgids); } @@ -959,23 +956,20 @@ data = purple_base64_decode(bintext, &size); - jbi->vcard_imgids = g_slist_prepend(jbi->vcard_imgids, GINT_TO_POINTER(purple_imgstore_add(data, size, "logo.png"))); + jbi->vcard_imgids = g_slist_prepend(jbi->vcard_imgids, GINT_TO_POINTER(purple_imgstore_add_with_id(g_memdup(data, size), size, "logo.png"))); g_string_append_printf(info_text, "<b>%s:</b> <img id='%d'><br/>", photo ? _("Photo") : _("Logo"), GPOINTER_TO_INT(jbi->vcard_imgids->data)); - purple_buddy_icons_set_for_user(js->gc->account, bare_jid, - data, size); - purple_cipher_digest_region("sha1", (guchar *)data, size, sizeof(hashval), hashval, NULL); p = hash; for(i=0; i<20; i++, p+=2) snprintf(p, 3, "%02x", hashval[i]); - purple_blist_node_set_string((PurpleBlistNode*)b, "avatar_hash", hash); - g_free(data); + purple_buddy_icons_set_for_user(js->gc->account, bare_jid, + data, size, hash); g_free(bintext); } } @@ -1765,7 +1759,9 @@ purple_request_fields(js->gc, _("Search for Jabber users"), _("Search for Jabber users"), instructions, fields, _("Search"), G_CALLBACK(user_search_cb), - _("Cancel"), G_CALLBACK(user_search_cancel_cb), usi); + _("Cancel"), G_CALLBACK(user_search_cancel_cb), + NULL, NULL, NULL, + usi); g_free(instructions); } @@ -1799,7 +1795,9 @@ js->user_directories ? js->user_directories->data : "users.jabber.org", FALSE, FALSE, NULL, _("Search Directory"), PURPLE_CALLBACK(jabber_user_search_ok), - _("Cancel"), NULL, js); + _("Cancel"), NULL, + NULL, NULL, NULL, + js); }
--- a/libpurple/protocols/jabber/buddy.h Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/jabber/buddy.h Fri Apr 27 05:20:10 2007 +0000 @@ -91,7 +91,7 @@ void jabber_set_info(PurpleConnection *gc, const char *info); void jabber_setup_set_info(PurplePluginAction *action); -void jabber_set_buddy_icon(PurpleConnection *gc, const char *iconfile); +void jabber_set_buddy_icon(PurpleConnection *gc, PurpleStoredImage *img); const char *jabber_buddy_state_get_name(JabberBuddyState state); const char *jabber_buddy_state_get_status_id(JabberBuddyState state);
--- a/libpurple/protocols/jabber/chat.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/jabber/chat.c Fri Apr 27 05:20:10 2007 +0000 @@ -785,7 +785,9 @@ js->chat_servers ? js->chat_servers->data : "conference.jabber.org", FALSE, FALSE, NULL, _("Find Rooms"), PURPLE_CALLBACK(roomlist_ok_cb), - _("Cancel"), PURPLE_CALLBACK(roomlist_cancel_cb), js); + _("Cancel"), PURPLE_CALLBACK(roomlist_cancel_cb), + purple_connection_get_account(gc), NULL, NULL, + js); return js->roomlist; }
--- a/libpurple/protocols/jabber/jabber.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/jabber/jabber.c Fri Apr 27 05:20:10 2007 +0000 @@ -871,7 +871,9 @@ purple_request_fields(js->gc, _("Register New Jabber Account"), _("Register New Jabber Account"), instructions, fields, _("Register"), G_CALLBACK(jabber_register_cb), - _("Cancel"), G_CALLBACK(jabber_register_cancel_cb), js); + _("Cancel"), G_CALLBACK(jabber_register_cancel_cb), + purple_connection_get_account(js->gc), NULL, NULL, + js); g_free(instructions); } @@ -1366,7 +1368,9 @@ purple_request_fields(js->gc, _("Change Jabber Password"), _("Change Jabber Password"), _("Please enter your new password"), fields, _("OK"), G_CALLBACK(jabber_password_change_cb), - _("Cancel"), NULL, js); + _("Cancel"), NULL, + purple_connection_get_account(gc), NULL, NULL, + js); } GList *jabber_actions(PurplePlugin *plugin, gpointer context)
--- a/libpurple/protocols/jabber/presence.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/jabber/presence.c Fri Apr 27 05:20:10 2007 +0000 @@ -201,7 +201,6 @@ static void jabber_vcard_parse_avatar(JabberStream *js, xmlnode *packet, gpointer blah) { JabberBuddy *jb = NULL; - PurpleBuddy *b = NULL; xmlnode *vcard, *photo, *binval; char *text; guchar *data; @@ -221,22 +220,19 @@ (( (binval = xmlnode_get_child(photo, "BINVAL")) && (text = xmlnode_get_data(binval))) || (text = xmlnode_get_data(photo)))) { + unsigned char hashval[20]; + char hash[41], *p; + int i; + data = purple_base64_decode(text, &size); - purple_buddy_icons_set_for_user(js->gc->account, from, data, size); - if((b = purple_find_buddy(js->gc->account, from))) { - unsigned char hashval[20]; - char hash[41], *p; - int i; + purple_cipher_digest_region("sha1", data, size, + sizeof(hashval), hashval, NULL); + p = hash; + for(i=0; i<20; i++, p+=2) + snprintf(p, 3, "%02x", hashval[i]); - purple_cipher_digest_region("sha1", data, size, - sizeof(hashval), hashval, NULL); - p = hash; - for(i=0; i<20; i++, p+=2) - snprintf(p, 3, "%02x", hashval[i]); - purple_blist_node_set_string((PurpleBlistNode*)b, "avatar_hash", hash); - } - g_free(data); + purple_buddy_icons_set_for_user(js->gc->account, from, data, size, hash); g_free(text); } } @@ -358,10 +354,11 @@ _("You are creating a new room. Would" " you like to configure it, or" " accept the default settings?"), - 1, chat, 2, _("_Configure Room"), - G_CALLBACK(jabber_chat_request_room_configure), - _("_Accept Defaults"), - G_CALLBACK(jabber_chat_create_instant_room)); + /* Default Action */ 1, + purple_connection_get_account(js->gc), NULL, chat->conv, + chat, 2, + _("_Configure Room"), G_CALLBACK(jabber_chat_request_room_configure), + _("_Accept Defaults"), G_CALLBACK(jabber_chat_create_instant_room)); } } } @@ -520,7 +517,7 @@ } if(avatar_hash) { - const char *avatar_hash2 = purple_blist_node_get_string((PurpleBlistNode*)b, "avatar_hash"); + const char *avatar_hash2 = purple_buddy_icons_get_checksum_for_user(b); if(!avatar_hash2 || strcmp(avatar_hash, avatar_hash2)) { JabberIq *iq; xmlnode *vcard;
--- a/libpurple/protocols/jabber/xdata.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/jabber/xdata.c Fri Apr 27 05:20:10 2007 +0000 @@ -334,7 +334,9 @@ handle = purple_request_fields(js->gc, title, title, instructions, fields, _("OK"), G_CALLBACK(jabber_x_data_ok_cb), - _("Cancel"), G_CALLBACK(jabber_x_data_cancel_cb), data); + _("Cancel"), G_CALLBACK(jabber_x_data_cancel_cb), + purple_connection_get_account(js->gc), /* XXX Do we have a who here? */ NULL, NULL, + data); g_free(title); g_free(instructions);
--- a/libpurple/protocols/msn/dialog.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/msn/dialog.c Fri Apr 27 05:20:10 2007 +0000 @@ -128,6 +128,7 @@ } purple_request_action(gc, NULL, msg, reason, PURPLE_DEFAULT_ACTION_NONE, + purple_connection_get_account(gc), data->who, NULL, data, 2, _("Yes"), G_CALLBACK(msn_add_cb), _("No"), G_CALLBACK(msn_rem_cb));
--- a/libpurple/protocols/msn/msn.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/msn/msn.c Fri Apr 27 05:20:10 2007 +0000 @@ -247,7 +247,9 @@ "see you as."), purple_connection_get_display_name(gc), FALSE, FALSE, NULL, _("OK"), G_CALLBACK(msn_act_id), - _("Cancel"), NULL, gc); + _("Cancel"), NULL, + purple_connection_get_account(gc), NULL, NULL, + gc); } static void @@ -262,7 +264,9 @@ purple_request_input(gc, NULL, _("Set your home phone number."), NULL, msn_user_get_home_phone(session->user), FALSE, FALSE, NULL, _("OK"), G_CALLBACK(msn_set_home_phone_cb), - _("Cancel"), NULL, gc); + _("Cancel"), NULL, + purple_connection_get_account(gc), NULL, NULL, + gc); } static void @@ -277,7 +281,9 @@ purple_request_input(gc, NULL, _("Set your work phone number."), NULL, msn_user_get_work_phone(session->user), FALSE, FALSE, NULL, _("OK"), G_CALLBACK(msn_set_work_phone_cb), - _("Cancel"), NULL, gc); + _("Cancel"), NULL, + purple_connection_get_account(gc), NULL, NULL, + gc); } static void @@ -292,7 +298,9 @@ purple_request_input(gc, NULL, _("Set your mobile phone number."), NULL, msn_user_get_mobile_phone(session->user), FALSE, FALSE, NULL, _("OK"), G_CALLBACK(msn_set_mobile_phone_cb), - _("Cancel"), NULL, gc); + _("Cancel"), NULL, + purple_connection_get_account(gc), NULL, NULL, + gc); } static void @@ -306,7 +314,9 @@ _("Do you want to allow or disallow people on " "your buddy list to send you MSN Mobile pages " "to your cell phone or other mobile device?"), - -1, gc, 3, + -1, + purple_connection_get_account(gc), NULL, NULL, + gc, 3, _("Allow"), G_CALLBACK(enable_msn_pages_cb), _("Disallow"), G_CALLBACK(disable_msn_pages_cb), _("Cancel"), NULL); @@ -354,6 +364,7 @@ NULL, TRUE, FALSE, NULL, _("Page"), G_CALLBACK(send_to_mobile_cb), _("Close"), G_CALLBACK(close_mobile_page_cb), + purple_connection_get_account(gc), purple_buddy_get_name(buddy), NULL, data); } @@ -1290,7 +1301,7 @@ } static void -msn_set_buddy_icon(PurpleConnection *gc, const char *filename) +msn_set_buddy_icon(PurpleConnection *gc, PurpleStoredImage *img) { MsnSession *session; MsnUser *user; @@ -1298,7 +1309,7 @@ session = gc->proto_data; user = session->user; - msn_user_set_buddy_icon(user, filename); + msn_user_set_buddy_icon(user, img); msn_change_status(session); } @@ -1869,7 +1880,7 @@ { char buf[1024]; purple_debug_info("msn", "%s is %d bytes\n", photo_url_text, len); - id = purple_imgstore_add(url_text, len, NULL); + id = purple_imgstore_add_with_id(g_memdup(url_text, len), len, NULL); g_snprintf(buf, sizeof(buf), "<img id=\"%d\"><br>", id); purple_notify_user_info_prepend_pair(user_info, NULL, buf); } @@ -1888,7 +1899,7 @@ g_free(photo_url_text); g_free(info2_data); if (id != -1) - purple_imgstore_unref(id); + purple_imgstore_unref_by_id(id); #endif }
--- a/libpurple/protocols/msn/object.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/msn/object.c Fri Apr 27 05:20:10 2007 +0000 @@ -111,11 +111,12 @@ g_free(obj->creator); g_free(obj->location); - g_free(obj->real_location); g_free(obj->friendly); g_free(obj->sha1d); g_free(obj->sha1c); + purple_imgstore_unref(obj->img); + if (obj->local) local_objs = g_list_remove(local_objs, obj); @@ -317,21 +318,19 @@ } void -msn_object_set_real_location(MsnObject *obj, const char *real_location) +msn_object_set_image(MsnObject *obj, PurpleStoredImage *img) { g_return_if_fail(obj != NULL); + g_return_if_fail(img != NULL); /* obj->local = TRUE; */ - if (obj->real_location != NULL) - g_free(obj->real_location); - - obj->real_location = - (real_location == NULL ? NULL : g_strdup(real_location)); + purple_imgstore_unref(obj->img); + obj->img = purple_imgstore_ref(img); } -const char * -msn_object_get_real_location(const MsnObject *obj) +PurpleStoredImage * +msn_object_get_image(const MsnObject *obj) { MsnObject *local_obj; @@ -340,7 +339,7 @@ local_obj = msn_object_find_local(msn_object_get_sha1(obj)); if (local_obj != NULL) - return local_obj->real_location; + return local_obj->img; return NULL; }
--- a/libpurple/protocols/msn/object.h Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/msn/object.h Fri Apr 27 05:20:10 2007 +0000 @@ -24,6 +24,8 @@ #ifndef _MSN_OBJECT_H_ #define _MSN_OBJECT_H_ +#include "imgstore.h" + #include "internal.h" typedef enum @@ -44,7 +46,7 @@ char *creator; int size; MsnObjectType type; - char *real_location; + PurpleStoredImage *img; char *location; char *friendly; char *sha1d; @@ -134,6 +136,14 @@ void msn_object_set_sha1c(MsnObject *obj, const char *sha1c); /** + * Associates an image with a MsnObject. + * + * @param obj The object. + * @param img The image to associate. + */ +void msn_object_set_image(MsnObject *obj, PurpleStoredImage *img); + +/** * Returns a MsnObject's creator value. * * @param obj The object. @@ -205,9 +215,15 @@ */ const char *msn_object_get_sha1(const MsnObject *obj); +/** + * Returns the image associated with the MsnObject. + * + * @param obj The object. + * + * @return The associated image. + */ +PurpleStoredImage *msn_object_get_image(const MsnObject *obj); + void msn_object_set_local(MsnObject *obj); -const char *msn_object_get_real_location(const MsnObject *obj); -void msn_object_set_real_location(MsnObject *obj, - const char *real_location); #endif /* _MSN_OBJECT_H_ */
--- a/libpurple/protocols/msn/session.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/msn/session.c Fri Apr 27 05:20:10 2007 +0000 @@ -384,7 +384,7 @@ { PurpleAccount *account; PurpleConnection *gc; - char *icon; + PurpleStoredImage *img; if (session->logged_in) return; @@ -392,9 +392,9 @@ account = session->account; gc = purple_account_get_connection(account); - icon = purple_buddy_icons_get_full_path(purple_account_get_buddy_icon(session->account)); - msn_user_set_buddy_icon(session->user, icon); - g_free(icon); + img = purple_buddy_icons_find_account_icon(session->account); + msn_user_set_buddy_icon(session->user, img); + purple_imgstore_unref(img); session->logged_in = TRUE;
--- a/libpurple/protocols/msn/slp.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/msn/slp.c Fri Apr 27 05:20:10 2007 +0000 @@ -248,14 +248,14 @@ if (!strcmp(euf_guid, "A4268EEC-FEC5-49E5-95C3-F126696BDBF6")) { /* Emoticon or UserDisplay */ + char *content; + gsize len; MsnSlpSession *slpsession; MsnSlpLink *slplink; MsnSlpMessage *slpmsg; MsnObject *obj; char *msnobj_data; - const char *file_name; - char *content; - gsize len; + PurpleStoredImage *img; int type; /* Send Ok */ @@ -281,9 +281,8 @@ g_return_if_reached(); } - file_name = msn_object_get_real_location(obj); - - if (file_name == NULL) + img = msn_object_get_image(obj); + if (img == NULL) { purple_debug_error("msn", "Wrong object.\n"); msn_object_destroy(obj); @@ -314,7 +313,7 @@ #ifdef MSN_DEBUG_SLP slpmsg->info = "SLP DATA"; #endif - msn_slpmsg_open_file(slpmsg, file_name); + msn_slpmsg_set_image(slpmsg, img); msn_slplink_queue_slpmsg(slplink, slpmsg); } else if (!strcmp(euf_guid, "5D3E02AB-6190-11D3-BBBB-00C04F795683")) @@ -445,7 +444,7 @@ char *ip_port; int port; - /* ip_addr = purple_prefs_get_string("/core/ft/public_ip"); */ + /* ip_addr = purple_prefs_get_string("/purple/ft/public_ip"); */ ip_port = "5190"; listening = "true"; nonce = rand_guid(); @@ -870,7 +869,7 @@ if (buddy == NULL) return FALSE; - old = purple_blist_node_get_string((PurpleBlistNode *)buddy, "icon_checksum"); + old = purple_buddy_icons_get_checksum_for_user(buddy); new = msn_object_get_sha1(obj); if (new == NULL) @@ -878,7 +877,7 @@ /* If the old and new checksums are the same, and the file actually exists, * then return TRUE */ - if (old != NULL && !strcmp(old, new) && (purple_buddy_icons_find(account, purple_buddy_get_name(buddy)) != NULL)) + if (old != NULL && !strcmp(old, new)) return TRUE; return FALSE; @@ -956,22 +955,7 @@ if (obj == NULL) { - /* It seems the user has not set a msnobject */ - GSList *sl, *list; - - list = purple_find_buddies(account, user->passport); - - for (sl = list; sl != NULL; sl = sl->next) - { - PurpleBuddy *buddy = (PurpleBuddy *)sl->data; - if (buddy->icon) - purple_blist_node_remove_setting((PurpleBlistNode*)buddy, "icon_checksum"); - } - g_slist_free(list); - - /* TODO: I think we need better buddy icon core functions. */ - purple_buddy_icons_set_for_user(account, user->passport, NULL, 0); - + purple_buddy_icons_set_for_user(account, user->passport, NULL, 0, NULL); return; } @@ -1001,7 +985,6 @@ MsnUserList *userlist; const char *info; PurpleAccount *account; - GSList *sl, *list; g_return_if_fail(slpcall != NULL); @@ -1013,18 +996,8 @@ userlist = slpcall->slplink->session->userlist; account = slpcall->slplink->session->account; - /* TODO: I think we need better buddy icon core functions. */ purple_buddy_icons_set_for_user(account, slpcall->slplink->remote_user, - (void *)data, size); - - list = purple_find_buddies(account, slpcall->slplink->remote_user); - - for (sl = list; sl != NULL; sl = sl->next) - { - PurpleBuddy *buddy = (PurpleBuddy *)sl->data; - purple_blist_node_set_string((PurpleBlistNode*)buddy, "icon_checksum", info); - } - g_slist_free(list); + g_memdup(data, size), size, info); #if 0 /* Free one window slot */ @@ -1101,9 +1074,8 @@ else { MsnObject *my_obj = NULL; - gchar *data = NULL; - gsize len = 0; - GSList *sl, *list; + gconstpointer data = NULL; + size_t len = 0; #ifdef MSN_DEBUG_UD purple_debug_info("msn", "Requesting our own user display\n"); @@ -1113,24 +1085,12 @@ if (my_obj != NULL) { - const char *filename = msn_object_get_real_location(my_obj); - - if (filename != NULL) - g_file_get_contents(filename, &data, &len, NULL); + PurpleStoredImage *img = msn_object_get_image(my_obj); + data = purple_imgstore_get_data(img); + len = purple_imgstore_get_size(img); } - /* TODO: I think we need better buddy icon core functions. */ - purple_buddy_icons_set_for_user(account, user->passport, (void *)data, len); - g_free(data); - - list = purple_find_buddies(account, user->passport); - - for (sl = list; sl != NULL; sl = sl->next) - { - PurpleBuddy *buddy = (PurpleBuddy *)sl->data; - purple_blist_node_set_string((PurpleBlistNode*)buddy, "icon_checksum", info); - } - g_slist_free(list); + purple_buddy_icons_set_for_user(account, user->passport, g_memdup(data, len), len, info); /* Free one window slot */ session->userlist->buddy_icon_window++;
--- a/libpurple/protocols/msn/slpmsg.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/msn/slpmsg.c Fri Apr 27 05:20:10 2007 +0000 @@ -65,7 +65,11 @@ if (slpmsg->fp != NULL) fclose(slpmsg->fp); - if (slpmsg->buffer != NULL) + purple_imgstore_unref(slpmsg->img); + + /* We don't want to free the data of the PurpleStoredImage, + * but to avoid code duplication, it's sharing buffer. */ + if (slpmsg->img == NULL) g_free(slpmsg->buffer); #ifdef MSN_DEBUG_SLP @@ -101,6 +105,11 @@ msn_slpmsg_set_body(MsnSlpMessage *slpmsg, const char *body, long long size) { + /* We can only have one data source at a time. */ + g_return_if_fail(slpmsg->buffer); + g_return_if_fail(slpmsg->img); + g_return_if_fail(slpmsg->fp); + if (body != NULL) slpmsg->buffer = g_memdup(body, size); else @@ -110,10 +119,28 @@ } void +msn_slpmsg_set_image(MsnSlpMessage *slpmsg, PurpleStoredImage *img) +{ + /* We can only have one data source at a time. */ + g_return_if_fail(slpmsg->buffer); + g_return_if_fail(slpmsg->img); + g_return_if_fail(slpmsg->fp); + + slpmsg->img = purple_imgstore_ref(img); + slpmsg->buffer = (guchar *)purple_imgstore_get_data(img); + slpmsg->size = purple_imgstore_get_size(img); +} + +void msn_slpmsg_open_file(MsnSlpMessage *slpmsg, const char *file_name) { struct stat st; + /* We can only have one data source at a time. */ + g_return_if_fail(slpmsg->buffer); + g_return_if_fail(slpmsg->img); + g_return_if_fail(slpmsg->fp); + slpmsg->fp = g_fopen(file_name, "rb"); if (g_stat(file_name, &st) == 0)
--- a/libpurple/protocols/msn/slpmsg.h Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/msn/slpmsg.h Fri Apr 27 05:20:10 2007 +0000 @@ -26,6 +26,8 @@ typedef struct _MsnSlpMessage MsnSlpMessage; +#include "imgstore.h" + #include "slpsession.h" #include "slpcall.h" #include "slplink.h" @@ -57,6 +59,7 @@ long flags; FILE *fp; + PurpleStoredImage *img; guchar *buffer; long long offset; long long size; @@ -90,6 +93,7 @@ void msn_slpmsg_set_body(MsnSlpMessage *slpmsg, const char *body, long long size); +void msn_slpmsg_set_image(MsnSlpMessage *slpmsg, PurpleStoredImage *img); void msn_slpmsg_open_file(MsnSlpMessage *slpmsg, const char *file_name); MsnSlpMessage * msn_slpmsg_sip_new(MsnSlpCall *slpcall, int cseq,
--- a/libpurple/protocols/msn/user.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/msn/user.c Fri Apr 27 05:20:10 2007 +0000 @@ -151,23 +151,20 @@ } void -msn_user_set_buddy_icon(MsnUser *user, const char *filename) +msn_user_set_buddy_icon(MsnUser *user, PurpleStoredImage *img) { - struct stat st; - FILE *fp; MsnObject *msnobj = msn_user_get_object(user); g_return_if_fail(user != NULL); - if (filename == NULL || g_stat(filename, &st) == -1) - { + if (img == NULL) msn_user_set_object(user, NULL); - } - else if ((fp = g_fopen(filename, "rb")) != NULL) + else { PurpleCipherContext *ctx; char *buf; - gsize len; + gconstpointer data = purple_imgstore_get_data(img); + size_t size = purple_imgstore_get_size(img); char *base64; unsigned char digest[20]; @@ -182,26 +179,20 @@ msn_user_set_object(user, msnobj); } - msn_object_set_real_location(msnobj, filename); - - buf = g_malloc(st.st_size); - len = fread(buf, 1, st.st_size, fp); - - fclose(fp); + msn_object_set_image(msnobj, img); /* Compute the SHA1D field. */ memset(digest, 0, sizeof(digest)); ctx = purple_cipher_context_new_by_name("sha1", NULL); - purple_cipher_context_append(ctx, (const guchar *)buf, st.st_size); + purple_cipher_context_append(ctx, data, size); purple_cipher_context_digest(ctx, sizeof(digest), digest, NULL); - g_free(buf); base64 = purple_base64_encode(digest, sizeof(digest)); msn_object_set_sha1d(msnobj, base64); g_free(base64); - msn_object_set_size(msnobj, st.st_size); + msn_object_set_size(msnobj, size); /* Compute the SHA1C field. */ buf = g_strdup_printf( @@ -216,7 +207,7 @@ memset(digest, 0, sizeof(digest)); purple_cipher_context_reset(ctx, NULL); - purple_cipher_context_append(ctx, (const guchar *)buf, strlen(buf)); + purple_cipher_context_append(ctx, data, strlen((char *)data)); purple_cipher_context_digest(ctx, sizeof(digest), digest, NULL); purple_cipher_context_destroy(ctx); g_free(buf); @@ -225,11 +216,6 @@ msn_object_set_sha1c(msnobj, base64); g_free(base64); } - else - { - purple_debug_error("msn", "Unable to open buddy icon %s!\n", filename); - msn_user_set_object(user, NULL); - } } void
--- a/libpurple/protocols/msn/user.h Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/msn/user.h Fri Apr 27 05:20:10 2007 +0000 @@ -138,9 +138,9 @@ * Sets the buddy icon for a local user. * * @param user The user. - * @param filename The path to the buddy icon. + * @param img The buddy icon image */ -void msn_user_set_buddy_icon(MsnUser *user, const char *filename); +void msn_user_set_buddy_icon(MsnUser *user, PurpleStoredImage *img); /** * Sets the group ID list for a user.
--- a/libpurple/protocols/novell/novell.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/novell/novell.c Fri Apr 27 05:20:10 2007 +0000 @@ -1911,7 +1911,9 @@ /* Prompt the user */ gc = purple_account_get_connection(user->client_data); purple_request_action(gc, title, primary, secondary, - PURPLE_DEFAULT_ACTION_NONE, parms, 2, + PURPLE_DEFAULT_ACTION_NONE, + purple_connection_get_account(gc), name, NULL, + parms, 2, _("Yes"), G_CALLBACK(_join_conference_cb), _("No"), G_CALLBACK(_reject_conference_cb));
--- a/libpurple/protocols/oscar/odc.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/oscar/odc.c Fri Apr 27 05:20:10 2007 +0000 @@ -353,7 +353,7 @@ if ((embedded_data != NULL) && (embedded_data->size == size)) { - imgid = purple_imgstore_add(embedded_data->data, size, src); + imgid = purple_imgstore_add_with_id(g_memdup(embedded_data->data, size), size, src); /* Record the image number */ images = g_slist_append(images, GINT_TO_POINTER(imgid)); @@ -406,7 +406,7 @@ { GSList *l; for (l = images; l != NULL; l = l->next) - purple_imgstore_unref(GPOINTER_TO_INT(l->data)); + purple_imgstore_unref_by_id(GPOINTER_TO_INT(l->data)); g_slist_free(images); }
--- a/libpurple/protocols/oscar/oscar.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/oscar/oscar.c Fri Apr 27 05:20:10 2007 +0000 @@ -1432,6 +1432,7 @@ FALSE, FALSE, NULL, _("_OK"), G_CALLBACK(purple_parse_auth_securid_request_yes_cb), _("_Cancel"), G_CALLBACK(purple_parse_auth_securid_request_no_cb), + account, NULL, NULL, gc); g_free(primary); @@ -1841,34 +1842,14 @@ bi->ipaddr = info->icqinfo.ipaddr; if (info->iconcsumlen) { - const char *filename, *saved_b16 = NULL; - char *b16 = NULL, *filepath = NULL; + const char *saved_b16 = NULL; + char *b16 = NULL; PurpleBuddy *b = NULL; b16 = purple_base16_encode(info->iconcsum, info->iconcsumlen); b = purple_find_buddy(account, info->sn); - /* - * If for some reason the checksum is valid, but cached file is not.. - * we want to know. - */ if (b != NULL) - filename = purple_blist_node_get_string((PurpleBlistNode*)b, "buddy_icon"); - else - filename = NULL; - if (filename != NULL) { - if (g_file_test(filename, G_FILE_TEST_EXISTS)) - saved_b16 = purple_blist_node_get_string((PurpleBlistNode*)b, - "icon_checksum"); - else { - filepath = g_build_filename(purple_buddy_icons_get_cache_dir(), - filename, NULL); - if (g_file_test(filepath, G_FILE_TEST_EXISTS)) - saved_b16 = purple_blist_node_get_string((PurpleBlistNode*)b, - "icon_checksum"); - g_free(filepath); - } - } else - saved_b16 = NULL; + saved_b16 = purple_buddy_icons_get_checksum_for_user(b); if (!b16 || !saved_b16 || strcmp(b16, saved_b16)) { GSList *cur = od->requesticon; @@ -1915,7 +1896,7 @@ PurpleAccount *account = purple_connection_get_account(gc); PurpleMessageFlags flags = 0; struct buddyinfo *bi; - char *iconfile; + PurpleStoredImage *img; GString *message; gchar *tmp; aim_mpmsg_section_t *curpart; @@ -1952,33 +1933,19 @@ } } - iconfile = purple_buddy_icons_get_full_path(purple_account_get_buddy_icon(account)); - if ((iconfile != NULL) && + img = purple_buddy_icons_find_account_icon(account); + if ((img != NULL) && (args->icbmflags & AIM_IMFLAGS_BUDDYREQ) && !bi->ico_sent && bi->ico_informed) { - FILE *file; - struct stat st; - - if (!g_stat(iconfile, &st)) { - guchar *buf = g_malloc(st.st_size); - file = g_fopen(iconfile, "rb"); - if (file) { - /* XXX - Use g_file_get_contents() */ - /* g_file_get_contents(iconfile, &data, &len, NULL); */ - int len = fread(buf, 1, st.st_size, file); - purple_debug_info("oscar", - "Sending buddy icon to %s (%d bytes, " - "%lu reported)\n", - userinfo->sn, len, st.st_size); - aim_im_sendch2_icon(od, userinfo->sn, buf, st.st_size, - st.st_mtime, aimutil_iconsum(buf, st.st_size)); - fclose(file); - } else - purple_debug_error("oscar", "Can't open buddy icon file!\n"); - g_free(buf); - } else - purple_debug_error("oscar", "Can't stat buddy icon file!\n"); - } - g_free(iconfile); + gconstpointer data = purple_imgstore_get_data(img); + size_t len = purple_imgstore_get_size(img); + purple_debug_info("oscar", + "Sending buddy icon to %s (%d bytes)\n", + userinfo->sn, len); + /* TODO: XXX: FIXME: Does this actually need the mtime of the file? */ + aim_im_sendch2_icon(od, userinfo->sn, data, len, + time(NULL), aimutil_iconsum(data, len)); + } + purple_imgstore_unref(img); message = g_string_new(""); curpart = args->mpmsg.parts; @@ -2176,8 +2143,9 @@ else if (args->type & OSCAR_CAPABILITY_BUDDYICON) { purple_buddy_icons_set_for_user(account, userinfo->sn, - args->info.icon.icon, - args->info.icon.length); + g_memdup(args->info.icon.icon, args->info.icon.length), + args->info.icon.length, + NULL); } else if (args->type & OSCAR_CAPABILITY_ICQSERVERRELAY) @@ -2255,6 +2223,7 @@ NULL, _("Please authorize me!"), TRUE, FALSE, NULL, _("_OK"), G_CALLBACK(purple_auth_request), _("_Cancel"), G_CALLBACK(purple_auth_dontrequest), + purple_connection_get_account(gc), name, NULL, data); } @@ -2301,6 +2270,7 @@ NULL, _("No reason given."), TRUE, FALSE, NULL, _("_OK"), G_CALLBACK(purple_auth_dontgrant), _("_Cancel"), G_CALLBACK(oscar_free_name_data), + purple_connection_get_account(data->gc), data->name, NULL, data); } @@ -2485,7 +2455,9 @@ purple_request_action(gc, NULL, message, _("Do you want to add this buddy " "to your buddy list?"), - PURPLE_DEFAULT_ACTION_NONE, data, 2, + PURPLE_DEFAULT_ACTION_NONE, + purple_connection_get_account(gc), data->name, NULL, + data, 2, _("_Add"), G_CALLBACK(purple_icq_buddyadd), _("_Decline"), G_CALLBACK(oscar_free_name_data)); g_free(message); @@ -3273,16 +3245,10 @@ * no icon is set. Ignore these. */ if ((iconlen > 0) && (iconlen != 90)) { - char *b16; - PurpleBuddy *b; + char *b16 = purple_base16_encode(iconcsum, iconcsumlen); purple_buddy_icons_set_for_user(purple_connection_get_account(gc), - sn, icon, iconlen); - b16 = purple_base16_encode(iconcsum, iconcsumlen); - b = purple_find_buddy(gc->account, sn); - if ((b16 != NULL) && (b != NULL)) { - purple_blist_node_set_string((PurpleBlistNode*)b, "icon_checksum", b16); - g_free(b16); - } + sn, g_memdup(icon, iconlen), iconlen, b16); + g_free(b16); } cur = od->requesticon; @@ -3320,29 +3286,17 @@ } if (od->set_icon) { - struct stat st; - char *iconfile = purple_buddy_icons_get_full_path(purple_account_get_buddy_icon(purple_connection_get_account(gc))); - if (iconfile == NULL) { + PurpleAccount *account = purple_connection_get_account(gc); + PurpleStoredImage *img = purple_buddy_icons_find_account_icon(account); + if (img == NULL) { aim_ssi_delicon(od); - } else if (!g_stat(iconfile, &st)) { - guchar *buf = g_malloc(st.st_size); - FILE *file = g_fopen(iconfile, "rb"); - if (file) { - /* XXX - Use g_file_get_contents()? */ - fread(buf, 1, st.st_size, file); - fclose(file); - purple_debug_info("oscar", - "Uploading icon to icon server\n"); - aim_bart_upload(od, buf, st.st_size); - } else - purple_debug_error("oscar", - "Can't open buddy icon file!\n"); - g_free(buf); } else { - purple_debug_error("oscar", - "Can't stat buddy icon file!\n"); + purple_debug_info("oscar", + "Uploading icon to icon server\n"); + aim_bart_upload(od, purple_imgstore_get_data(img), + purple_imgstore_get_size(img)); + purple_imgstore_unref(img); } - g_free(iconfile); od->set_icon = FALSE; } @@ -4140,11 +4094,11 @@ id = g_datalist_get_data(&attribs, "id"); /* ... if it refers to a valid purple image ... */ - if (id && (image = purple_imgstore_get(atoi(id)))) { + if (id && (image = purple_imgstore_find_by_id(atoi(id)))) { /* ... append the message from start to the tag ... */ unsigned long size = purple_imgstore_get_size(image); const char *filename = purple_imgstore_get_filename(image); - gpointer imgdata = purple_imgstore_get_data(image); + gconstpointer imgdata = purple_imgstore_get_data(image); oscar_id++; @@ -4203,13 +4157,11 @@ PurpleAccount *account; PeerConnection *conn; int ret; - char *iconfile; char *tmp1, *tmp2; od = (OscarData *)gc->proto_data; account = purple_connection_get_account(gc); ret = 0; - iconfile = purple_buddy_icons_get_full_path(purple_account_get_buddy_icon(account)); if (imflags & PURPLE_MESSAGE_AUTO_RESP) tmp1 = purple_str_sub_away_formatters(message, name); @@ -4224,9 +4176,9 @@ } else { struct buddyinfo *bi; struct aim_sendimext_args args; - struct stat st; gsize len; PurpleConversation *conv; + PurpleStoredImage *img; conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, name, account); @@ -4275,44 +4227,38 @@ bi->ico_need = FALSE; } - if (iconfile && !g_stat(iconfile, &st)) { - FILE *file = g_fopen(iconfile, "rb"); - if (file) { - guchar *buf = g_malloc(st.st_size); - /* TODO: Use g_file_get_contents()? */ - fread(buf, 1, st.st_size, file); - fclose(file); - - args.iconlen = st.st_size; - args.iconsum = aimutil_iconsum(buf, st.st_size); - args.iconstamp = st.st_mtime; - - if ((args.iconlen != bi->ico_me_len) || (args.iconsum != bi->ico_me_csum) || (args.iconstamp != bi->ico_me_time)) { - bi->ico_informed = FALSE; - bi->ico_sent = FALSE; - } - - /* - * TODO: - * For some reason sending our icon to people only works - * when we're the ones who initiated the conversation. If - * the other person sends the first IM then they never get - * the icon. We should fix that. - */ - if (!bi->ico_informed) { - purple_debug_info("oscar", - "Claiming to have a buddy icon\n"); - args.flags |= AIM_IMFLAGS_HASICON; - bi->ico_me_len = args.iconlen; - bi->ico_me_csum = args.iconsum; - bi->ico_me_time = args.iconstamp; - bi->ico_informed = TRUE; - } - - g_free(buf); + img = purple_buddy_icons_find_account_icon(account); + if (img) { + gconstpointer data = purple_imgstore_get_data(img); + args.iconlen = purple_imgstore_get_size(img); + args.iconsum = aimutil_iconsum(data, args.iconlen); + /* TODO: XXX: FIXME: Deal with the timestamp issue. */ + args.iconstamp = time(NULL); + + if ((args.iconlen != bi->ico_me_len) || (args.iconsum != bi->ico_me_csum) || (args.iconstamp != bi->ico_me_time)) { + bi->ico_informed = FALSE; + bi->ico_sent = FALSE; } + + /* + * TODO: + * For some reason sending our icon to people only works + * when we're the ones who initiated the conversation. If + * the other person sends the first IM then they never get + * the icon. We should fix that. + */ + if (!bi->ico_informed) { + purple_debug_info("oscar", + "Claiming to have a buddy icon\n"); + args.flags |= AIM_IMFLAGS_HASICON; + bi->ico_me_len = args.iconlen; + bi->ico_me_csum = args.iconsum; + bi->ico_me_time = args.iconstamp; + bi->ico_informed = TRUE; + } + + purple_imgstore_unref(img); } - g_free(iconfile); args.destsn = name; @@ -4786,8 +4732,7 @@ PurpleBuddy *b; struct aim_ssi_item *curitem; guint32 tmp; - const char *icon_path; - char *cached_icon_path; + PurpleStoredImage *img; va_list ap; guint16 fmtver, numitems; guint32 timestamp; @@ -5020,10 +4965,9 @@ * the event that the local user set a new icon while this * account was offline. */ - icon_path = purple_account_get_buddy_icon(account); - cached_icon_path = purple_buddy_icons_get_full_path(icon_path); - oscar_set_icon(gc, cached_icon_path); - g_free(cached_icon_path); + img = purple_buddy_icons_find_account_icon(account); + oscar_set_icon(gc, img); + purple_imgstore_unref(img); return 1; } @@ -5149,6 +5093,7 @@ purple_debug_info("oscar", "ssi: %s has given you permission to add him to your buddy list\n", sn); + /* XXX Should data->nick store the alias and nombre just have the sn? -evands */ buddy = purple_find_buddy(gc->account, sn); if (buddy && (purple_buddy_get_alias_only(buddy))) nombre = g_strdup_printf("%s (%s)", sn, purple_buddy_get_alias_only(buddy)); @@ -5162,7 +5107,9 @@ data->nick = NULL; purple_request_yes_no(gc, NULL, _("Authorization Given"), dialog_msg, - PURPLE_DEFAULT_ACTION_NONE, data, + PURPLE_DEFAULT_ACTION_NONE, + purple_connection_get_account(gc), sn, NULL, + data, G_CALLBACK(purple_icq_buddyadd), G_CALLBACK(oscar_free_name_data)); @@ -5625,37 +5572,27 @@ od->set_icon = TRUE; aim_srv_requestnew(od, SNAC_FAMILY_BART); } else { - struct stat st; - char *iconfile = purple_buddy_icons_get_full_path(purple_account_get_buddy_icon(purple_connection_get_account(gc))); - if (iconfile == NULL) { + PurpleAccount *account = purple_connection_get_account(gc); + PurpleStoredImage *img = purple_buddy_icons_find_account_icon(account); + if (img == NULL) { aim_ssi_delicon(od); - } else if (!g_stat(iconfile, &st)) { - guchar *buf = g_malloc(st.st_size); - FILE *file = g_fopen(iconfile, "rb"); - if (file) { - /* XXX - Use g_file_get_contents()? */ - fread(buf, 1, st.st_size, file); - fclose(file); - purple_debug_info("oscar", - "Uploading icon to icon server\n"); - aim_bart_upload(od, buf, st.st_size); - } else - purple_debug_error("oscar", - "Can't open buddy icon file!\n"); - g_free(buf); } else { - purple_debug_error("oscar", - "Can't stat buddy icon file!\n"); + + purple_debug_info("oscar", + "Uploading icon to icon server\n"); + aim_bart_upload(od, purple_imgstore_get_data(img), + purple_imgstore_get_size(img)); + purple_imgstore_unref(img); } - g_free(iconfile); } } else if (flags == 0x81) { - char *iconfile = purple_buddy_icons_get_full_path(purple_account_get_buddy_icon(purple_connection_get_account(gc))); - if (iconfile == NULL) + PurpleAccount *account = purple_connection_get_account(gc); + PurpleStoredImage *img = purple_buddy_icons_find_account_icon(account); + if (img == NULL) aim_ssi_delicon(od); else { aim_ssi_seticon(od, md5, length); - g_free(iconfile); + purple_imgstore_unref(img); } } } break; @@ -5776,7 +5713,7 @@ purple_value_new(PURPLE_TYPE_STRING), NULL); status_types = g_list_prepend(status_types, type); - type = purple_status_type_new_with_attrs(PURPLE_STATUS_EXTENDED_AWAY, + type = purple_status_type_new_with_attrs(PURPLE_STATUS_UNAVAILABLE, OSCAR_STATUS_ID_DND, _("Do Not Disturb"), TRUE, is_icq, FALSE, "message", _("Message"), @@ -5857,6 +5794,7 @@ comment_utf8, TRUE, FALSE, NULL, _("_OK"), G_CALLBACK(oscar_ssi_editcomment), _("_Cancel"), G_CALLBACK(oscar_free_name_data), + purple_connection_get_account(gc), data->name, NULL, data); g_free(title); @@ -5906,7 +5844,9 @@ _("Because this reveals your IP address, it " "may be considered a security risk. Do you " "wish to continue?"), - 0, data, 2, + 0, + purple_connection_get_account(gc), data->who, NULL, + data, 2, _("C_onnect"), G_CALLBACK(oscar_ask_directim_yes_cb), _("_Cancel"), G_CALLBACK(oscar_ask_directim_no_cb)); g_free(buf); @@ -6061,7 +6001,9 @@ purple_request_fields(gc, _("ICQ Privacy Options"), _("ICQ Privacy Options"), NULL, fields, _("OK"), G_CALLBACK(oscar_icq_privacy_opts), - _("Cancel"), NULL, gc); + _("Cancel"), NULL, + purple_connection_get_account(gc), NULL, NULL, + gc); } static void oscar_format_screenname(PurpleConnection *gc, const char *nick) { @@ -6133,6 +6075,7 @@ FALSE, FALSE, NULL, _("_OK"), G_CALLBACK(oscar_change_email), _("_Cancel"), NULL, + purple_connection_get_account(gc), NULL, NULL, gc); } @@ -6201,7 +6144,9 @@ "searching for."), NULL, FALSE, FALSE, NULL, _("_Search"), G_CALLBACK(search_by_email_cb), - _("_Cancel"), NULL, gc); + _("_Cancel"), NULL, + purple_connection_get_account(gc), NULL, NULL, + gc); } static void oscar_show_set_info(PurplePluginAction *action) @@ -6237,41 +6182,28 @@ purple_notify_uri(gc, "http://mymobile.aol.com/dbreg/register?action=imf&clientID=1"); } -void oscar_set_icon(PurpleConnection *gc, const char *iconfile) +void oscar_set_icon(PurpleConnection *gc, PurpleStoredImage *img) { OscarData *od = gc->proto_data; - FILE *file; - struct stat st; - - if (iconfile == NULL) { + + if (img == NULL) { aim_ssi_delicon(od); - } else if (!g_stat(iconfile, &st)) { - guchar *buf = g_malloc(st.st_size); - file = g_fopen(iconfile, "rb"); - if (file) - { - PurpleCipher *cipher; - PurpleCipherContext *context; - guchar md5[16]; - int len; - - /* XXX - Use g_file_get_contents()? */ - len = fread(buf, 1, st.st_size, file); - fclose(file); - - cipher = purple_ciphers_find_cipher("md5"); - context = purple_cipher_context_new(cipher, NULL); - purple_cipher_context_append(context, buf, len); - purple_cipher_context_digest(context, 16, md5, NULL); - purple_cipher_context_destroy(context); - - aim_ssi_seticon(od, md5, 16); - } else - purple_debug_error("oscar", - "Can't open buddy icon file!\n"); - g_free(buf); - } else - purple_debug_error("oscar", "Can't stat buddy icon file!\n"); + } else { + PurpleCipher *cipher; + PurpleCipherContext *context; + guchar md5[16]; + gconstpointer data = purple_imgstore_get_data(img); + size_t len = purple_imgstore_get_size(img); + + + cipher = purple_ciphers_find_cipher("md5"); + context = purple_cipher_context_new(cipher, NULL); + purple_cipher_context_append(context, data, len); + purple_cipher_context_digest(context, 16, md5, NULL); + purple_cipher_context_destroy(context); + + aim_ssi_seticon(od, md5, 16); + } } /**
--- a/libpurple/protocols/oscar/oscarcommon.h Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/oscar/oscarcommon.h Fri Apr 27 05:20:10 2007 +0000 @@ -81,7 +81,7 @@ void oscar_rename_group(PurpleConnection *gc, const char *old_name, PurpleGroup *group, GList *moved_buddies); void oscar_convo_closed(PurpleConnection *gc, const char *who); const char *oscar_normalize(const PurpleAccount *account, const char *str); -void oscar_set_icon(PurpleConnection *gc, const char *iconfile); +void oscar_set_icon(PurpleConnection *gc, PurpleStoredImage *img); gboolean oscar_can_receive_file(PurpleConnection *gc, const char *who); void oscar_send_file(PurpleConnection *gc, const char *who, const char *file); PurpleXfer *oscar_new_xfer(PurpleConnection *gc, const char *who);
--- a/libpurple/protocols/oscar/peer.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/oscar/peer.c Fri Apr 27 05:20:10 2007 +0000 @@ -1016,7 +1016,9 @@ "Images. Because your IP address will be " "revealed, this may be considered a privacy " "risk."), - PURPLE_DEFAULT_ACTION_NONE, conn, 2, + PURPLE_DEFAULT_ACTION_NONE, + account, sn, NULL, + conn, 2, _("_Connect"), G_CALLBACK(peer_connection_got_proposition_yes_cb), _("Cancel"), G_CALLBACK(peer_connection_got_proposition_no_cb)); }
--- a/libpurple/protocols/qq/buddy_info.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/qq/buddy_info.c Fri Apr 27 05:20:10 2007 +0000 @@ -482,6 +482,7 @@ _("Modify my information"), NULL, fields, _("Update my information"), G_CALLBACK(modify_info_ok_cb), _("Cancel"), G_CALLBACK(modify_info_cancel_cb), + purple_connection_get_account(gc), NULL, NULL, mid); } } @@ -531,27 +532,21 @@ qq_send_packet_get_info(gc, qd->uid, FALSE); } -void qq_set_buddy_icon_for_user(PurpleAccount *account, const gchar *who, const gchar *iconfile) +void qq_set_buddy_icon_for_user(PurpleAccount *account, const gchar *who, const gchar *icon_num, const gchar *iconfile) { - FILE *file; - struct stat st; + gchar *data; + gsize len; - g_return_if_fail(g_stat(iconfile, &st) == 0); - file = g_fopen(iconfile, "rb"); - if (file) { - PurpleBuddyIcon *icon; - size_t data_len; - gchar *data = g_new(gchar, st.st_size + 1); - data_len = fread(data, 1, st.st_size, file); - fclose(file); - purple_buddy_icons_set_for_user(account, who, data, data_len); - icon = purple_buddy_icons_find(account, who); - purple_buddy_icon_set_path(icon, iconfile); + if (!g_file_get_contents(iconfile, &data, &len, NULL)) + g_return_if_reached(); + else + { + purple_buddy_icons_set_for_user(account, who, data, len, icon_num); } } /* TODO: custom faces for QQ members and users with level >= 16 */ -void qq_set_my_buddy_icon(PurpleConnection *gc, const gchar *iconfile) +void qq_set_my_buddy_icon(PurpleConnection *gc, PurpleStoredImage *img) { gchar *icon; gint icon_num; @@ -600,25 +595,29 @@ /* tell server my icon changed */ _qq_send_packet_modify_face(gc, icon_num); /* display in blist */ - qq_set_buddy_icon_for_user(account, account->username, icon_path); + qq_set_buddy_icon_for_user(account, account->username, icon, icon_path); } static void _qq_update_buddy_icon(PurpleAccount *account, const gchar *name, gint face) { - gchar *icon_path; PurpleBuddyIcon *icon = purple_buddy_icons_find(account, name); gchar *icon_num_str = face_to_icon_str(face); - const gchar *old_path = purple_buddy_icon_get_path(icon); - const gchar *buddy_icon_dir = qq_buddy_icon_dir(); + const gchar *old_icon_num = purple_buddy_icon_get_checksum(icon); + + if (icon == NULL || old_icon_num == NULL || + strcmp(icon_num_str, old_icon_num)) + { + gchar *icon_path; - icon_path = g_strconcat(buddy_icon_dir, G_DIR_SEPARATOR_S, QQ_ICON_PREFIX, - icon_num_str, QQ_ICON_SUFFIX, NULL); - if (icon == NULL || old_path == NULL - || g_ascii_strcasecmp(icon_path, old_path) != 0) - qq_set_buddy_icon_for_user(account, name, icon_path); + icon_path = g_strconcat(qq_buddy_icon_dir(), G_DIR_SEPARATOR_S, + QQ_ICON_PREFIX, icon_num_str, + QQ_ICON_SUFFIX, NULL); + + qq_set_buddy_icon_for_user(account, name, icon_num_str, icon_path); + g_free(icon_path); + } g_free(icon_num_str); - g_free(icon_path); } /* after getting info or modify myself, refresh the buddy list accordingly */
--- a/libpurple/protocols/qq/buddy_info.h Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/qq/buddy_info.h Fri Apr 27 05:20:10 2007 +0000 @@ -86,8 +86,8 @@ void qq_refresh_buddy_and_myself(contact_info *info, PurpleConnection *gc); void qq_send_packet_get_info(PurpleConnection *gc, guint32 uid, gboolean show_window); -void qq_set_my_buddy_icon(PurpleConnection *gc, const gchar *iconfile); -void qq_set_buddy_icon_for_user(PurpleAccount *account, const gchar *who, const gchar *iconfile); +void qq_set_my_buddy_icon(PurpleConnection *gc, PurpleStoredImage *img); +void qq_set_buddy_icon_for_user(PurpleAccount *account, const gchar *who, const gchar *icon_num, const gchar *iconfile); void qq_prepare_modify_info(PurpleConnection *gc); void qq_process_modify_info_reply(guint8 *buf, gint buf_len, PurpleConnection *gc); void qq_process_get_info_reply(guint8 *buf, gint buf_len, PurpleConnection *gc);
--- a/libpurple/protocols/qq/buddy_opt.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/qq/buddy_opt.c Fri Apr 27 05:20:10 2007 +0000 @@ -191,6 +191,7 @@ gchar *msg1, *msg2; PurpleConnection *gc; gc_and_uid *g2; + gchar *nombre; g_return_if_fail(g != NULL); @@ -207,9 +208,13 @@ msg1 = g_strdup_printf(_("You rejected %d's request"), uid); msg2 = g_strdup(_("Input your reason:")); + nombre = uid_to_purple_name(uid); purple_request_input(gc, _("Reject request"), msg1, msg2, _("Sorry, you are not my type..."), TRUE, FALSE, - NULL, _("Reject"), G_CALLBACK(_qq_reject_add_request_real), _("Cancel"), NULL, g2); + NULL, _("Reject"), G_CALLBACK(_qq_reject_add_request_real), _("Cancel"), NULL, + purple_connection_get_account(gc), nombre, NULL, + g2); + g_free(nombre); } void qq_add_buddy_with_gc_and_uid(gc_and_uid *g) @@ -345,6 +350,7 @@ PurpleBuddy *b; gc_and_uid *g; qq_add_buddy_request *req; + gchar *nombre; g_return_if_fail(buf != NULL && buf_len != 0); @@ -386,7 +392,8 @@ if (strtol(reply, NULL, 10) > 0) { /* need auth */ purple_debug(PURPLE_DEBUG_WARNING, "QQ", "Add buddy attempt fails, need authentication\n"); - b = purple_find_buddy(gc->account, uid_to_purple_name(for_uid)); + nombre = uid_to_purple_name(for_uid); + b = purple_find_buddy(gc->account, nombre); if (b != NULL) purple_blist_remove_buddy(b); g = g_new0(gc_and_uid, 1); @@ -394,13 +401,16 @@ g->uid = for_uid; msg = g_strdup_printf(_("User %d needs authentication"), for_uid); purple_request_input(gc, NULL, msg, - _("Input request here"), + _("Input request here"), /* TODO: Awkward string to fix post string freeze - standardize auth dialogues? -evands */ _("Would you be my friend?"), TRUE, FALSE, NULL, _("Send"), G_CALLBACK (_qq_send_packet_add_buddy_auth_with_gc_and_uid), - _("Cancel"), G_CALLBACK(qq_do_nothing_with_gc_and_uid), g); + _("Cancel"), G_CALLBACK(qq_do_nothing_with_gc_and_uid), + purple_connection_get_account(gc), nombre, NULL, + g); g_free(msg); + g_free(nombre); } else { /* add OK */ qq_add_buddy_by_recv_packet(gc, for_uid, TRUE, TRUE); msg = g_strdup_printf(_("You have added %d in buddy list"), for_uid);
--- a/libpurple/protocols/qq/group.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/qq/group.c Fri Apr 27 05:20:10 2007 +0000 @@ -122,6 +122,7 @@ NULL, FALSE, FALSE, NULL, _("Search"), G_CALLBACK(_qq_group_search_callback), _("Cancel"), G_CALLBACK(_qq_group_search_cancel_callback), + purple_connection_get_account(gc), NULL, NULL, gc); return qd->roomlist;
--- a/libpurple/protocols/qq/group_im.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/qq/group_im.c Fri Apr 27 05:20:10 2007 +0000 @@ -104,6 +104,7 @@ guint8 group_type; gchar *reason_utf8, *msg, *reason; group_member_opt *g; + gchar *nombre; g_return_if_fail(internal_group_id > 0 && data != NULL && len > 0); @@ -128,9 +129,13 @@ g->internal_group_id = internal_group_id; g->member = user_uid; + nombre = uid_to_purple_name(user_uid); + purple_request_action(gc, _("QQ Qun Operation"), msg, reason, - 2, g, 3, + 2, + purple_connection_get_account(gc), nombre, NULL, + g, 3, _("Approve"), G_CALLBACK (qq_group_approve_application_with_struct), @@ -139,6 +144,7 @@ (qq_group_reject_application_with_struct), _("Search"), G_CALLBACK(qq_group_search_application_with_struct)); + g_free(nombre); g_free(reason); g_free(msg); g_free(reason_utf8);
--- a/libpurple/protocols/qq/group_join.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/qq/group_join.c Fri Apr 27 05:20:10 2007 +0000 @@ -135,7 +135,9 @@ _("Would you be my friend?"), TRUE, FALSE, NULL, _("Send"), G_CALLBACK(_qq_group_join_auth_with_gc_and_id), - _("Cancel"), G_CALLBACK(qq_do_nothing_with_gc_and_uid), g); + _("Cancel"), G_CALLBACK(qq_do_nothing_with_gc_and_uid), + purple_connection_get_account(gc), group->group_name_utf8, NULL, + g); g_free(msg); } @@ -356,7 +358,9 @@ _("Are you sure to exit this Qun?"), _ ("Note, if you are the creator, \nthis operation will eventually remove this Qun."), - 1, g, 2, _("Cancel"), + 1, + purple_connection_get_account(gc), NULL, NULL, + g, 2, _("Cancel"), G_CALLBACK(qq_do_nothing_with_gc_and_uid), _("Go ahead"), G_CALLBACK(_qq_group_exit_with_gc_and_id)); }
--- a/libpurple/protocols/qq/group_opt.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/qq/group_opt.c Fri Apr 27 05:20:10 2007 +0000 @@ -120,29 +120,33 @@ g_return_if_fail(g != NULL && g->gc != NULL && g->member > 0); qq_send_packet_get_info(g->gc, g->member, TRUE); /* we wanna see window */ - purple_request_action - (g->gc, NULL, _("Do you wanna approve the request?"), "", 2, g, - 2, _("Reject"), - G_CALLBACK(qq_group_reject_application_with_struct), - _("Approve"), G_CALLBACK(qq_group_approve_application_with_struct)); + purple_request_action(g->gc, NULL, _("Do you wanna approve the request?"), "", 2, + purple_connection_get_account(g->gc), NULL, NULL, + g, 2, + _("Reject"), G_CALLBACK(qq_group_reject_application_with_struct), + _("Approve"), G_CALLBACK(qq_group_approve_application_with_struct)); } void qq_group_reject_application_with_struct(group_member_opt *g) { - gchar *msg1, *msg2; + gchar *msg1, *msg2, *nombre; g_return_if_fail(g != NULL && g->gc != NULL && g->member > 0); msg1 = g_strdup_printf(_("You rejected %d's request"), g->member); msg2 = g_strdup(_("Input your reason:")); - purple_request_input(g->gc, NULL, msg1, msg2, - _("Sorry, you are not my type..."), TRUE, FALSE, - NULL, _("Send"), - G_CALLBACK(_qq_group_reject_application_real), - _("Cancel"), G_CALLBACK(_qq_group_do_nothing_with_struct), g); + nombre = uid_to_purple_name(g->member); + purple_request_input(g->gc, /* title */ NULL, msg1, msg2, + _("Sorry, you are not my type..."), /* multiline */ TRUE, /* masked */ FALSE, + /* hint */ NULL, + _("Send"), G_CALLBACK(_qq_group_reject_application_real), + _("Cancel"), G_CALLBACK(_qq_group_do_nothing_with_struct), + purple_connection_get_account(g->gc), nombre, NULL, + g); g_free(msg1); g_free(msg2); + g_free(nombre); } void qq_group_approve_application_with_struct(group_member_opt *g) @@ -387,8 +391,10 @@ _("You have successfully created a Qun"), _ ("Would you like to set up the Qun details now?"), - 1, g, 2, _("Setup"), - G_CALLBACK(qq_group_setup_with_gc_and_uid), + 1, + purple_connection_get_account(gc), NULL, NULL, + g, 2, + _("Setup"), G_CALLBACK(qq_group_setup_with_gc_and_uid), _("Cancel"), G_CALLBACK(qq_do_nothing_with_gc_and_uid)); }
--- a/libpurple/protocols/qq/sys_msg.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/qq/sys_msg.c Fri Apr 27 05:20:10 2007 +0000 @@ -72,6 +72,7 @@ { PurpleConnection *gc; guint32 uid; + gchar *nombre; g_return_if_fail(g != NULL); @@ -80,17 +81,23 @@ g_return_if_fail(gc != 0 && uid != 0); qq_send_packet_get_info(gc, uid, TRUE); /* we wanna see window */ + + nombre = uid_to_purple_name(uid); + /* TODO: 'wanna' is not an appropriate word for this string. Fix after string freeze. */ purple_request_action - (gc, NULL, _("Do you wanna approve the request?"), "", 2, g, 2, - _("Reject"), - G_CALLBACK(qq_reject_add_request_with_gc_and_uid), + (gc, NULL, _("Do you wanna approve the request?"), "", 2, + purple_connection_get_account(gc), nombre, NULL, + g, 2, + _("Reject"), G_CALLBACK(qq_reject_add_request_with_gc_and_uid), _("Approve"), G_CALLBACK(qq_approve_add_request_with_gc_and_uid)); + g_free(nombre); } static void _qq_search_before_add_with_gc_and_uid(gc_and_uid *g) { PurpleConnection *gc; guint32 uid; + gchar *nombre; g_return_if_fail(g != NULL); @@ -99,9 +106,15 @@ g_return_if_fail(gc != 0 && uid != 0); qq_send_packet_get_info(gc, uid, TRUE); /* we wanna see window */ + /* TODO: 'wanna' is not an appropriate word for this string. Fix after string freeze. */ + nombre = uid_to_purple_name(uid); purple_request_action - (gc, NULL, _("Do you wanna add this buddy?"), "", 2, g, 2, - _("Cancel"), NULL, _("Add"), G_CALLBACK(qq_add_buddy_with_gc_and_uid)); + (gc, NULL, _("Do you wanna add this buddy?"), "", 2, + purple_connection_get_account(gc), nombre, NULL, + g, 2, + _("Cancel"), NULL, + _("Add"), G_CALLBACK(qq_add_buddy_with_gc_and_uid)); + g_free(nombre); } /* Send ACK if the sys message needs an ACK */ @@ -147,7 +160,7 @@ uid = strtol(from, NULL, 10); name = uid_to_purple_name(uid); b = purple_find_buddy(gc->account, name); - g_free(name); + if (b == NULL) { /* the person is not in my list */ g = g_new0(gc_and_uid, 1); g->gc = gc; @@ -155,10 +168,11 @@ message = g_strdup_printf(_("You have been added by %s"), from); _qq_sys_msg_log_write(gc, message, from); purple_request_action(gc, NULL, message, - _("Would like to add him?"), 2, g, 3, - _("Cancel"), NULL, _("Add"), - G_CALLBACK - (qq_add_buddy_with_gc_and_uid), + _("Would like to add him?"), 2, + purple_connection_get_account(gc), name, NULL, + g, 3, + _("Cancel"), NULL, + _("Add"), G_CALLBACK(qq_add_buddy_with_gc_and_uid), _("Search"), G_CALLBACK(_qq_search_before_add_with_gc_and_uid)); } else { message = g_strdup_printf(_("%s has added you [%s]"), from, to); @@ -166,6 +180,7 @@ purple_notify_info(gc, NULL, message, NULL); } + g_free(name); g_free(message); } @@ -219,12 +234,18 @@ g->gc = gc; g->uid = uid; + name = uid_to_purple_name(uid); + + /* TODO: 'wanna' is not an appropriate word for this string. Fix after string freeze */ + /* TODO: this should go through purple_account_request_authorization() */ message = g_strdup_printf(_("%s wanna add you [%s] as friends"), from, to); reason = g_strdup_printf(_("Message: %s"), msg_utf8); _qq_sys_msg_log_write(gc, message, from); purple_request_action - (gc, NULL, message, reason, 2, g, 3, + (gc, NULL, message, reason, 2, + purple_connection_get_account(gc), name, NULL, + g, 3, _("Reject"), G_CALLBACK(qq_reject_add_request_with_gc_and_uid), _("Approve"), @@ -234,22 +255,24 @@ g_free(message); g_free(reason); - name = uid_to_purple_name(uid); + /* XXX: Is this needed once the above goes through purple_account_request_authorization()? */ b = purple_find_buddy(gc->account, name); - g_free(name); if (b == NULL) { /* the person is not in my list */ g2 = g_new0(gc_and_uid, 1); g2->gc = gc; g2->uid = strtol(from, NULL, 10); message = g_strdup_printf(_("%s is not in your buddy list"), from); purple_request_action(gc, NULL, message, - _("Would you like to add him?"), 2, g2, - 3, _("Cancel"), NULL, _("Add"), - G_CALLBACK - (qq_add_buddy_with_gc_and_uid), + _("Would you like to add him?"), 2, + purple_connection_get_account(gc), name, NULL, + g2, 3, + _("Cancel"), NULL, + _("Add"), G_CALLBACK(qq_add_buddy_with_gc_and_uid), _("Search"), G_CALLBACK(_qq_search_before_add_with_gc_and_uid)); g_free(message); } + + g_free(name); } void qq_process_msg_sys(guint8 *buf, gint buf_len, guint16 seq, PurpleConnection *gc)
--- a/libpurple/protocols/sametime/sametime.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/sametime/sametime.c Fri Apr 27 05:20:10 2007 +0000 @@ -2698,8 +2698,7 @@ cid = make_cid(cid); /* add image to the purple image store */ - img = purple_imgstore_add(d_dat, d_len, cid); - g_free(d_dat); + img = purple_imgstore_add_with_id(d_dat, d_len, cid); /* map the cid to the image store identifier */ g_hash_table_insert(img_by_cid, cid, GINT_TO_POINTER(img)); @@ -2772,7 +2771,7 @@ /* dereference all the imgages */ while(images) { - purple_imgstore_unref(GPOINTER_TO_INT(images->data)); + purple_imgstore_unref_by_id(GPOINTER_TO_INT(images->data)); images = g_list_delete_link(images, images); } } @@ -3387,6 +3386,7 @@ msgA, msg1, fields, _("Create"), G_CALLBACK(conf_create_prompt_join), _("Cancel"), G_CALLBACK(conf_create_prompt_cancel), + acct, purple_buddy_get_name(buddy), NULL, buddy); g_free(msg1); } @@ -3472,6 +3472,7 @@ msgA, msg, fields, _("Invite"), G_CALLBACK(conf_select_prompt_invite), _("Cancel"), G_CALLBACK(conf_select_prompt_cancel), + acct, purple_buddy_get_name(buddy), NULL, buddy); g_free(msg); } @@ -3642,6 +3643,7 @@ MW_PLUGIN_DEFAULT_HOST, FALSE, FALSE, NULL, _("Connect"), G_CALLBACK(prompt_host_ok_cb), _("Cancel"), G_CALLBACK(prompt_host_cancel_cb), + acct, NULL, NULL, gc); g_free(msg); @@ -3856,7 +3858,7 @@ /* find the imgstore data by the id tag */ id = g_datalist_get_data(&attr, "id"); if(id && *id) - img = purple_imgstore_get(atoi(id)); + img = purple_imgstore_find_by_id(atoi(id)); if(img) { char *cid; @@ -3882,9 +3884,8 @@ /* obtain and base64 encode the image data, and put it in the mime part */ - data = purple_imgstore_get_data(img); size = purple_imgstore_get_size(img); - data = purple_base64_encode(data, (gsize) size); + data = purple_base64_encode(purple_imgstore_get_data(img), (gsize) size); purple_mime_part_set_data(part, data); g_free(data); @@ -5210,6 +5211,7 @@ purple_request_file(gc, title, NULL, FALSE, G_CALLBACK(st_import_action_cb), NULL, + account, NULL, NULL, gc); g_free(title); @@ -5249,6 +5251,7 @@ purple_request_file(gc, title, NULL, TRUE, G_CALLBACK(st_export_action_cb), NULL, + account, NULL, NULL, gc); g_free(title); @@ -5386,6 +5389,7 @@ msgA, msg, fields, _("Add Group"), G_CALLBACK(remote_group_multi_cb), _("Cancel"), G_CALLBACK(remote_group_multi_cleanup), + purple_connection_get_account(gc), result->name, NULL, pd); g_free(msg); @@ -5475,6 +5479,7 @@ FALSE, FALSE, NULL, _("Add"), G_CALLBACK(remote_group_action_cb), _("Cancel"), NULL, + purple_connection_get_account(gc), NULL, NULL, gc); } @@ -5599,7 +5604,8 @@ FALSE, FALSE, NULL, _("Search"), G_CALLBACK(search_action_cb), _("Cancel"), NULL, - gc); + purple_connection_get_account(gc), NULL, NULL, + gc); }
--- a/libpurple/protocols/silc/buddy.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/silc/buddy.c Fri Apr 27 05:20:10 2007 +0000 @@ -289,6 +289,7 @@ { char tmp[128], tmp2[128]; SilcPurpleKeyAgrAsk a; + PurpleConnection *gc = client->application; g_snprintf(tmp, sizeof(tmp), _("Key agreement request received from %s. Would you like to " @@ -309,8 +310,8 @@ a->port = port; purple_request_action(client->application, _("Key Agreement Request"), tmp, - hostname ? tmp2 : NULL, 1, a, 2, - _("Yes"), G_CALLBACK(silcpurple_buddy_keyagr_request_cb), + hostname ? tmp2 : NULL, 1, gc->account, client_entry->nickname, + NULL, a, 2, _("Yes"), G_CALLBACK(silcpurple_buddy_keyagr_request_cb), _("No"), G_CALLBACK(silcpurple_buddy_keyagr_request_cb)); } @@ -432,7 +433,7 @@ static void silcpurple_buddy_privkey(PurpleConnection *gc, const char *name) { - SilcPurple sg = gc->proto_data; + SilcPurple sg = gc->proto_data; char *nickname; SilcPurplePrivkey p; SilcClientEntry *clients; @@ -461,11 +462,11 @@ p->client = sg->client; p->conn = sg->conn; p->client_id = *clients[0]->id; - purple_request_input(gc, _("IM With Password"), NULL, - _("Set IM Password"), NULL, FALSE, TRUE, NULL, - _("OK"), G_CALLBACK(silcpurple_buddy_privkey_cb), - _("Cancel"), G_CALLBACK(silcpurple_buddy_privkey_cb), - p); + purple_request_input(gc, _("IM With Password"), NULL, + _("Set IM Password"), NULL, FALSE, TRUE, NULL, + _("OK"), G_CALLBACK(silcpurple_buddy_privkey_cb), + _("Cancel"), G_CALLBACK(silcpurple_buddy_privkey_cb), + gc->account, NULL, NULL, p); silc_free(clients); silc_free(nickname); @@ -986,8 +987,10 @@ const unsigned char *data; SilcUInt32 data_len; data = silc_mime_get_data(m, &data_len); - if (data) - purple_buddy_icons_set_for_user(purple_buddy_get_account(r->b), purple_buddy_get_name(r->b), (void *)data, data_len); + if (data) { + /* TODO: Check if SILC gives us something to use as the checksum instead */ + purple_buddy_icons_set_for_user(purple_buddy_get_account(r->b), purple_buddy_get_name(r->b), g_memdup(data, data_len), data_len, NULL); + } } silc_mime_free(m); } @@ -1063,7 +1066,9 @@ /* Open file selector to select the public key. */ purple_request_file(r->client->application, _("Open..."), NULL, FALSE, G_CALLBACK(silcpurple_add_buddy_ask_import), - G_CALLBACK(silcpurple_add_buddy_ask_pk_cancel), r); + G_CALLBACK(silcpurple_add_buddy_ask_pk_cancel), + purple_buddy_get_account(r->b), purple_buddy_get_name(r->b), NULL, r); + } static void @@ -1074,7 +1079,8 @@ r->b->name); purple_request_action(r->client->application, _("Add Buddy"), tmp, _("To add the buddy you must import his/her public key. " - "Press Import to import a public key."), 0, r, 2, + "Press Import to import a public key."), 0, + purple_buddy_get_account(r->b), purple_buddy_get_name(r->b), NULL, r, 2, _("Cancel"), G_CALLBACK(silcpurple_add_buddy_ask_pk_cb), _("_Import..."), G_CALLBACK(silcpurple_add_buddy_ask_pk_cb)); } @@ -1180,7 +1186,8 @@ "the correct user from the list to add to the buddy list."), fields, _("OK"), G_CALLBACK(silcpurple_add_buddy_select_cb), - _("Cancel"), G_CALLBACK(silcpurple_add_buddy_select_cancel), r); + _("Cancel"), G_CALLBACK(silcpurple_add_buddy_select_cancel), + purple_buddy_get_account(r->b), purple_buddy_get_name(r->b), NULL, r); } static void @@ -1676,48 +1683,31 @@ } #ifdef SILC_ATTRIBUTE_USER_ICON -void silcpurple_buddy_set_icon(PurpleConnection *gc, const char *iconfile) +void silcpurple_buddy_set_icon(PurpleConnection *gc, PurpleStoredImage *img) { SilcPurple sg = gc->proto_data; SilcClient client = sg->client; SilcClientConnection conn = sg->conn; SilcMime mime; - PurpleBuddyIcon ic; char type[32]; unsigned char *icon; const char *t; - struct stat st; - FILE *fp; SilcAttributeObjMime obj; /* Remove */ - if (!iconfile) { + if (!img) { silc_client_attribute_del(client, conn, SILC_ATTRIBUTE_USER_ICON, NULL); return; } /* Add */ - if (g_stat(iconfile, &st) < 0) - return; - fp = g_fopen(iconfile, "rb"); - if (!fp) - return; - ic.data = g_malloc(st.st_size); - if (!ic.data) + mime = silc_mime_alloc(); + if (!mime) return; - ic.len = fread(ic.data, 1, st.st_size, fp); - fclose(fp); - mime = silc_mime_alloc(); - if (!mime) { - g_free(ic.data); - return; - } - - t = purple_buddy_icon_get_type((const PurpleBuddyIcon *)&ic); - if (!t) { - g_free(ic.data); + t = purple_util_get_image_extension(purple_imgstore_get_data(img), purple_imgstore_get_size(img)); + if (!t || !strcmp(t, "icon")) { silc_mime_free(mime); return; } @@ -1725,7 +1715,7 @@ t = "jpeg"; g_snprintf(type, sizeof(type), "image/%s", t); silc_mime_add_field(mime, "Content-Type", type); - silc_mime_add_data(mime, ic.data, ic.len); + silc_mime_add_data(mime, purple_imgstore_get_data(img), purple_imgstore_get_size(img)); obj.mime = icon = silc_mime_encode(mime, &obj.mime_len); if (obj.mime) @@ -1733,7 +1723,6 @@ SILC_ATTRIBUTE_USER_ICON, &obj, sizeof(obj)); silc_free(icon); - g_free(ic.data); silc_mime_free(mime); } #endif
--- a/libpurple/protocols/silc/chat.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/silc/chat.c Fri Apr 27 05:20:10 2007 +0000 @@ -290,7 +290,8 @@ /* Add new public key */ purple_request_file(sg->gc, _("Open Public Key..."), NULL, FALSE, G_CALLBACK(silcpurple_chat_chpk_add), - G_CALLBACK(silcpurple_chat_chpk_cancel), sgc); + G_CALLBACK(silcpurple_chat_chpk_cancel), + purple_connection_get_account(sg->gc), NULL, NULL, sgc); return; } @@ -421,7 +422,8 @@ purple_request_fields(sg->gc, _("Channel Authentication"), _("Channel Authentication"), t, fields, _("Add / Remove"), G_CALLBACK(silcpurple_chat_chpk_cb), - _("OK"), G_CALLBACK(silcpurple_chat_chauth_ok), sgc); + _("OK"), G_CALLBACK(silcpurple_chat_chauth_ok), + purple_connection_get_account(sg->gc), NULL, NULL, sgc); return; } sgc->pubkeys = silc_buffer_copy(channel_pubkeys); @@ -459,7 +461,8 @@ purple_request_fields(sg->gc, _("Channel Authentication"), _("Channel Authentication"), t, fields, _("Add / Remove"), G_CALLBACK(silcpurple_chat_chpk_cb), - _("OK"), G_CALLBACK(silcpurple_chat_chauth_ok), sgc); + _("OK"), G_CALLBACK(silcpurple_chat_chauth_ok), + purple_connection_get_account(sg->gc), NULL, NULL, sgc); silc_argument_payload_free(chpks); } @@ -594,7 +597,8 @@ p->channel); purple_request_fields(gc, _("Add Channel Private Group"), NULL, tmp, fields, _("Add"), G_CALLBACK(silcpurple_chat_prv_add), - _("Cancel"), G_CALLBACK(silcpurple_chat_prv_cancel), p); + _("Cancel"), G_CALLBACK(silcpurple_chat_prv_cancel), + purple_connection_get_account(gc), NULL, NULL, p); } @@ -723,7 +727,8 @@ _("Set user limit on channel. Set to zero to reset user limit."), tmp, FALSE, FALSE, NULL, _("OK"), G_CALLBACK(silcpurple_chat_ulimit_cb), - _("Cancel"), G_CALLBACK(silcpurple_chat_ulimit_cb), s); + _("Cancel"), G_CALLBACK(silcpurple_chat_ulimit_cb), + purple_connection_get_account(gc), NULL, NULL, s); } static void
--- a/libpurple/protocols/silc/ops.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/silc/ops.c Fri Apr 27 05:20:10 2007 +0000 @@ -161,7 +161,7 @@ if (channel && !convo) goto out; - imgid = purple_imgstore_add(data, data_len, ""); + imgid = purple_imgstore_add_with_id(g_memdup(data, data_len), data_len, ""); if (imgid) { cflags |= PURPLE_MESSAGE_IMAGES | PURPLE_MESSAGE_RECV; g_snprintf(tmp, sizeof(tmp), "<IMG ID=\"%d\">", imgid); @@ -177,7 +177,7 @@ sender->nickname : "<unknown>", tmp, cflags, time(NULL)); - purple_imgstore_unref(imgid); + purple_imgstore_unref_by_id(imgid); cflags = 0; } goto out; @@ -1295,7 +1295,7 @@ _("User Information"), buf, 1, client_entry, 2, _("OK"), G_CALLBACK(silcpurple_whois_more), - _("_More..."), G_CALLBACK(silcpurple_whois_more)); + _("_More..."), G_CALLBACK(silcpurple_whois_more), gc->account, NULL, NULL); else #endif purple_notify_userinfo(gc, client_entry->nickname, user_info, NULL, NULL); @@ -1900,17 +1900,18 @@ silc_ask_passphrase(SilcClient client, SilcClientConnection conn, SilcAskPassphrase completion, void *context) { + PurpleConnection *gc = client->application; SilcPurpleAskPassphrase internal = silc_calloc(1, sizeof(*internal)); if (!internal) return; internal->completion = completion; internal->context = context; - purple_request_input(client->application, _("Passphrase"), NULL, + purple_request_input(gc, _("Passphrase"), NULL, _("Passphrase required"), NULL, FALSE, TRUE, NULL, _("OK"), G_CALLBACK(silc_ask_passphrase_cb), _("Cancel"), G_CALLBACK(silc_ask_passphrase_cb), - internal); + purple_connection_get_account(gc), NULL, NULL, internal); }
--- a/libpurple/protocols/silc/pk.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/silc/pk.c Fri Apr 27 05:20:10 2007 +0000 @@ -96,6 +96,7 @@ const char *babbleprint, PublicKeyVerify verify) { + PurpleConnection *gc = verify->client->application; char tmp[256], tmp2[256]; if (verify->changed) { @@ -112,8 +113,9 @@ _("Fingerprint and babbleprint for the %s key are:\n\n" "%s\n%s\n"), entity, fingerprint, babbleprint); - purple_request_action(verify->client->application, _("Verify Public Key"), tmp, tmp2, - PURPLE_DEFAULT_ACTION_NONE, verify, 3, + purple_request_action(gc, _("Verify Public Key"), tmp, tmp2, + PURPLE_DEFAULT_ACTION_NONE, + purple_connection_get_account(gc), entity, NULL, verify, 3, _("Yes"), G_CALLBACK(silcpurple_verify_cb), _("No"), G_CALLBACK(silcpurple_verify_cb), _("_View..."), G_CALLBACK(silcpurple_verify_details));
--- a/libpurple/protocols/silc/silc.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/silc/silc.c Fri Apr 27 05:20:10 2007 +0000 @@ -194,7 +194,7 @@ SilcUInt32 mask; const char *tmp; #ifdef SILC_ATTRIBUTE_USER_ICON - char *icon; + PurpleStoredImage *img; #endif #ifdef HAVE_SYS_UTSNAME_H struct utsname u; @@ -233,9 +233,9 @@ #ifdef SILC_ATTRIBUTE_USER_ICON /* Set our buddy icon */ - icon = purple_buddy_icons_get_full_path(purple_account_get_buddy_icon(account)); - silcpurple_buddy_set_icon(gc, icon); - g_free(icon); + img = purple_buddy_icons_find_account_icon(account); + silcpurple_buddy_set_icon(gc, img); + purple_imgstore_unref(img); #endif } @@ -741,7 +741,8 @@ "you would like other users to see about yourself."), fields, _("OK"), G_CALLBACK(silcpurple_attrs_cb), - _("Cancel"), G_CALLBACK(silcpurple_attrs_cancel), gc); + _("Cancel"), G_CALLBACK(silcpurple_attrs_cancel), + gc->account, NULL, NULL, gc); } static void @@ -946,7 +947,8 @@ purple_request_fields(gc, _("Create New SILC Key Pair"), _("Create New SILC Key Pair"), NULL, fields, _("Generate Key Pair"), G_CALLBACK(silcpurple_create_keypair_cb), - _("Cancel"), G_CALLBACK(silcpurple_create_keypair_cancel), gc); + _("Cancel"), G_CALLBACK(silcpurple_create_keypair_cancel), + gc->account, NULL, NULL, gc); g_strfreev(u); silc_free(hostname);
--- a/libpurple/protocols/silc/silcpurple.h Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/silc/silcpurple.h Fri Apr 27 05:20:10 2007 +0000 @@ -145,7 +145,7 @@ char **contactstr, char **langstr, char **devicestr, char **tzstr, char **geostr); #ifdef SILC_ATTRIBUTE_USER_ICON -void silcpurple_buddy_set_icon(PurpleConnection *gc, const char *iconfile); +void silcpurple_buddy_set_icon(PurpleConnection *gc, PurpleStoredImage *img); #endif #ifdef HAVE_SILCMIME_H char *silcpurple_file2mime(const char *filename);
--- a/libpurple/protocols/silc/util.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/silc/util.c Fri Apr 27 05:20:10 2007 +0000 @@ -373,8 +373,8 @@ purple_request_action(sg->gc, _("Public Key Information"), _("Public Key Information"), - buf, 0, context, 1, - _("Close"), callback); + buf, 0, purple_connection_get_account(sg->gc), + NULL, NULL, context, 1, _("Close"), callback); g_free(buf); silc_free(fingerprint); @@ -676,9 +676,9 @@ } id = g_datalist_get_data(&attribs, "id"); - if (id && (image = purple_imgstore_get(atoi(id)))) { + if (id && (image = purple_imgstore_find_by_id(atoi(id)))) { unsigned long imglen = purple_imgstore_get_size(image); - gpointer img = purple_imgstore_get_data(image); + gconstpointer img = purple_imgstore_get_data(image); p = silc_mime_alloc();
--- a/libpurple/protocols/silc/wb.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/silc/wb.c Fri Apr 27 05:20:10 2007 +0000 @@ -263,7 +263,7 @@ SilcPurple sg; gc = client->application; - sg = gc->proto_data; + sg = gc->proto_data; /* Open whiteboard automatically if requested */ if (purple_account_get_bool(sg->account, "open-wb", FALSE)) { @@ -299,7 +299,8 @@ req->channel = channel; req->sg = sg; - purple_request_action(gc, _("Whiteboard"), tmp, NULL, 1, req, 2, + purple_request_action(gc, _("Whiteboard"), tmp, NULL, 1, + sg->account, sender->nickname, NULL, req, 2, _("Yes"), G_CALLBACK(silcpurple_wb_request_cb), _("No"), G_CALLBACK(silcpurple_wb_request_cb)); }
--- a/libpurple/protocols/yahoo/yahoo.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/yahoo/yahoo.c Fri Apr 27 05:20:10 2007 +0000 @@ -342,6 +342,8 @@ } case 192: /* Pictures, aka Buddy Icons, checksum */ { + /* FIXME: Please, if you know this protocol, + * FIXME: fix up the strtol() stuff if possible. */ int cksum = strtol(pair->value, NULL, 10); PurpleBuddy *b; @@ -353,9 +355,7 @@ if (!cksum || (cksum == -1)) { if (f) yahoo_friend_set_buddy_icon_need_request(f, TRUE); - purple_buddy_icons_set_for_user(gc->account, name, NULL, 0); - if (b) - purple_blist_node_remove_setting((PurpleBlistNode *)b, YAHOO_ICON_CHECKSUM_KEY); + purple_buddy_icons_set_for_user(gc->account, name, NULL, 0, NULL); break; } @@ -363,7 +363,7 @@ break; yahoo_friend_set_buddy_icon_need_request(f, FALSE); - if (b && cksum != purple_blist_node_get_int((PurpleBlistNode*)b, YAHOO_ICON_CHECKSUM_KEY)) + if (b && cksum != strtol(purple_buddy_icons_get_checksum_for_user(b), NULL, 10)) yahoo_send_picture_request(gc, name); break; @@ -985,7 +985,9 @@ purple_request_input(add_req->gc, NULL, _("Authorization denied message:"), NULL, _("No reason given."), TRUE, FALSE, NULL, _("OK"), G_CALLBACK(yahoo_buddy_add_deny_cb), - _("Cancel"), G_CALLBACK(yahoo_buddy_add_deny_noreason_cb), add_req); + _("Cancel"), G_CALLBACK(yahoo_buddy_add_deny_noreason_cb), + purple_connection_get_account(add_req->gc), add_req->who, NULL, + add_req); } static void yahoo_buddy_added_us(PurpleConnection *gc, struct yahoo_packet *pkt) { @@ -1890,7 +1892,9 @@ g_snprintf(buf, sizeof(buf), _("You have tried to ignore %s, but the " "user is on your buddy list. Clicking \"Yes\" " "will remove and ignore the buddy."), who); - purple_request_yes_no(gc, NULL, _("Ignore buddy?"), buf, 0, b, + purple_request_yes_no(gc, NULL, _("Ignore buddy?"), buf, 0, + gc->account, who, NULL, + b, G_CALLBACK(ignore_buddy), G_CALLBACK(keep_buddy)); break; @@ -2682,11 +2686,10 @@ static void yahoo_picture_check(PurpleAccount *account) { PurpleConnection *gc = purple_account_get_connection(account); - char *buddyicon; - - buddyicon = purple_buddy_icons_get_full_path(purple_account_get_buddy_icon(account)); - yahoo_set_buddy_icon(gc, buddyicon); - g_free(buddyicon); + PurpleStoredImage *img = purple_buddy_icons_find_account_icon(account); + + yahoo_set_buddy_icon(gc, img); + purple_imgstore_unref(img); } static int get_yahoo_status_from_purple_status(PurpleStatus *status) @@ -3222,10 +3225,13 @@ static void yahoo_show_act_id(PurplePluginAction *action) { PurpleConnection *gc = (PurpleConnection *) action->context; + /* XXX Typo: This should be _("Activate which ID?") - fix after string freeze is over */ purple_request_input(gc, NULL, _("Active which ID?"), NULL, purple_connection_get_display_name(gc), FALSE, FALSE, NULL, _("OK"), G_CALLBACK(yahoo_act_id), - _("Cancel"), NULL, gc); + _("Cancel"), NULL, + purple_connection_get_account(gc), NULL, NULL, + gc); } static void yahoo_show_chat_goto(PurplePluginAction *action) @@ -3234,7 +3240,9 @@ purple_request_input(gc, NULL, _("Join who in chat?"), NULL, "", FALSE, FALSE, NULL, _("OK"), G_CALLBACK(yahoo_chat_goto), - _("Cancel"), NULL, gc); + _("Cancel"), NULL, + purple_connection_get_account(gc), NULL, NULL, + gc); } static GList *yahoo_actions(PurplePlugin *plugin, gpointer context) {
--- a/libpurple/protocols/yahoo/yahoo.h Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/yahoo/yahoo.h Fri Apr 27 05:20:10 2007 +0000 @@ -48,7 +48,6 @@ #define WEBMESSENGER_URL "http://login.yahoo.com/config/login?.src=pg" -#define YAHOO_ICON_CHECKSUM_KEY "icon_checksum" #define YAHOO_PICURL_SETTING "picture_url" #define YAHOO_PICCKSUM_SETTING "picture_checksum" #define YAHOO_PICEXPIRE_SETTING "picture_expire"
--- a/libpurple/protocols/yahoo/yahoo_picture.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/yahoo/yahoo_picture.c Fri Apr 27 05:20:10 2007 +0000 @@ -49,7 +49,6 @@ { struct yahoo_fetch_picture_data *d; struct yahoo_data *yd; - PurpleBuddy *b; d = user_data; yd = d->gc->proto_data; @@ -60,10 +59,9 @@ } else if (len == 0) { purple_debug_error("yahoo", "Fetched an icon with length 0. Strange.\n"); } else { - purple_buddy_icons_set_for_user(purple_connection_get_account(d->gc), d->who, (void *)pic_data, len); - b = purple_find_buddy(purple_connection_get_account(d->gc), d->who); - if (b) - purple_blist_node_set_int((PurpleBlistNode*)b, YAHOO_ICON_CHECKSUM_KEY, d->checksum); + char *checksum = g_strdup_printf("%i", d->checksum); + purple_buddy_icons_set_for_user(purple_connection_get_account(d->gc), d->who, g_memdup(pic_data, len), len, checksum); + g_free(checksum); } g_free(d->who); @@ -117,7 +115,9 @@ PurpleUtilFetchUrlData *url_data; struct yahoo_fetch_picture_data *data; PurpleBuddy *b = purple_find_buddy(gc->account, who); - if (b && (checksum == purple_blist_node_get_int((PurpleBlistNode*)b, YAHOO_ICON_CHECKSUM_KEY))) + + /* FIXME: Cleanup this strtol() stuff if possible. */ + if (b && (checksum == strtol(purple_buddy_icons_get_checksum_for_user(b), NULL, 10))) return; data = g_new0(struct yahoo_fetch_picture_data, 1); @@ -166,11 +166,8 @@ if (icon == 2) yahoo_send_picture_request(gc, who); else if ((icon == 0) || (icon == 1)) { - PurpleBuddy *b = purple_find_buddy(gc->account, who); YahooFriend *f; - purple_buddy_icons_set_for_user(gc->account, who, NULL, 0); - if (b) - purple_blist_node_remove_setting((PurpleBlistNode *)b, YAHOO_ICON_CHECKSUM_KEY); + purple_buddy_icons_set_for_user(gc->account, who, NULL, 0, NULL); if ((f = yahoo_friend_find(gc, who))) yahoo_friend_set_buddy_icon_need_request(f, TRUE); purple_debug_misc("yahoo", "Setting user %s's icon to NULL.\n", who); @@ -203,7 +200,9 @@ if (who) { PurpleBuddy *b = purple_find_buddy(gc->account, who); - if (b && (checksum != purple_blist_node_get_int((PurpleBlistNode*)b, YAHOO_ICON_CHECKSUM_KEY))) + + /* FIXME: Cleanup this strtol() stuff if possible. */ + if (b && (checksum != strtol(purple_buddy_icons_get_checksum_for_user(b), NULL, 10))) yahoo_send_picture_request(gc, who); } } @@ -276,11 +275,8 @@ if (avatar == 2) yahoo_send_picture_request(gc, who); else if ((avatar == 0) || (avatar == 1)) { - PurpleBuddy *b = purple_find_buddy(gc->account, who); YahooFriend *f; - purple_buddy_icons_set_for_user(gc->account, who, NULL, 0); - if (b) - purple_blist_node_remove_setting((PurpleBlistNode *)b, YAHOO_ICON_CHECKSUM_KEY); + purple_buddy_icons_set_for_user(gc->account, who, NULL, 0, NULL); if ((f = yahoo_friend_find(gc, who))) yahoo_friend_set_buddy_icon_need_request(f, TRUE); purple_debug_misc("yahoo", "Setting user %s's icon to NULL.\n", who); @@ -518,15 +514,12 @@ } } -void yahoo_set_buddy_icon(PurpleConnection *gc, const char *iconfile) +void yahoo_set_buddy_icon(PurpleConnection *gc, PurpleStoredImage *img) { struct yahoo_data *yd = gc->proto_data; PurpleAccount *account = gc->account; - gchar *icondata; - gsize len; - GError *error = NULL; - if (iconfile == NULL) { + if (img == NULL) { g_free(yd->picture_url); yd->picture_url = NULL; @@ -537,14 +530,19 @@ /* Tell everyone we ain't got one no more */ yahoo_send_picture_update(gc, 0); - } else if (g_file_get_contents(iconfile, &icondata, &len, &error)) { - GString *s = g_string_new_len(icondata, len); + } else { + gconstpointer data = purple_imgstore_get_data(img); + size_t len = purple_imgstore_get_size(img); + GString *s = g_string_new_len(data, len); struct yahoo_buddy_icon_upload_data *d; int oldcksum = purple_account_get_int(account, YAHOO_PICCKSUM_SETTING, 0); int expire = purple_account_get_int(account, YAHOO_PICEXPIRE_SETTING, 0); const char *oldurl = purple_account_get_string(account, YAHOO_PICURL_SETTING, NULL); + char *iconfile; - g_free(icondata); + /* TODO: At some point, it'd be nice to fix this for real, or + * TODO: at least change it to be something like: + * TODO: purple_imgstore_get_filename(img); */ yd->picture_checksum = g_string_hash(s); if ((yd->picture_checksum == oldcksum) && @@ -557,11 +555,15 @@ return; } + /* TODO: FIXME: This is completely wrong. The upload code needs to + * TODO: be modified to work with a PurpleStoredImage. */ + iconfile = g_build_filename(purple_buddy_icons_get_cache_dir(), + purple_imgstore_get_filename(img), NULL); d = g_new0(struct yahoo_buddy_icon_upload_data, 1); d->gc = gc; d->str = s; d->fd = -1; - d->filename = g_strdup(iconfile); + d->filename = iconfile; if (!yd->logged_in) { yd->picture_upload_todo = d; @@ -570,10 +572,5 @@ yahoo_buddy_icon_upload(gc, d); - } else { - purple_debug_error("yahoo", - "Could not read buddy icon file '%s': %s\n", - iconfile, error->message); - g_error_free(error); } }
--- a/libpurple/protocols/yahoo/yahoo_picture.h Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/yahoo/yahoo_picture.h Fri Apr 27 05:20:10 2007 +0000 @@ -37,7 +37,7 @@ void yahoo_process_avatar_update(PurpleConnection *gc, struct yahoo_packet *pkt); -void yahoo_set_buddy_icon(PurpleConnection *gc, const char *iconfile); +void yahoo_set_buddy_icon(PurpleConnection *gc, PurpleStoredImage *img); void yahoo_buddy_icon_upload(PurpleConnection *gc, struct yahoo_buddy_icon_upload_data *d); void yahoo_buddy_icon_upload_data_free(struct yahoo_buddy_icon_upload_data *d);
--- a/libpurple/protocols/yahoo/yahoo_profile.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/protocols/yahoo/yahoo_profile.c Fri Apr 27 05:20:10 2007 +0000 @@ -1022,7 +1022,7 @@ photo_url_text, url_text); } else { purple_debug_info("yahoo", "%s is %d bytes\n", photo_url_text, len); - id = purple_imgstore_add(url_text, len, NULL); + id = purple_imgstore_add_with_id(g_memdup(url_text, len), len, NULL); tmp = g_strdup_printf("<img id=\"%d\"><br>", id); purple_notify_user_info_add_pair(user_info, NULL, tmp); @@ -1234,7 +1234,7 @@ g_free(photo_url_text); g_free(info2_data); if (id != -1) - purple_imgstore_unref(id); + purple_imgstore_unref_by_id(id); #endif }
--- a/libpurple/proxy.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/proxy.c Fri Apr 27 05:20:10 2007 +0000 @@ -1900,7 +1900,7 @@ { PurpleProxyInfo *info = purple_global_proxy_get_info(); - if (!strcmp(name, "/core/proxy/type")) { + if (!strcmp(name, "/purple/proxy/type")) { int proxytype; const char *type = value; @@ -1918,13 +1918,13 @@ proxytype = -1; purple_proxy_info_set_type(info, proxytype); - } else if (!strcmp(name, "/core/proxy/host")) + } else if (!strcmp(name, "/purple/proxy/host")) purple_proxy_info_set_host(info, value); - else if (!strcmp(name, "/core/proxy/port")) + else if (!strcmp(name, "/purple/proxy/port")) purple_proxy_info_set_port(info, GPOINTER_TO_INT(value)); - else if (!strcmp(name, "/core/proxy/username")) + else if (!strcmp(name, "/purple/proxy/username")) purple_proxy_info_set_username(info, value); - else if (!strcmp(name, "/core/proxy/password")) + else if (!strcmp(name, "/purple/proxy/password")) purple_proxy_info_set_password(info, value); } @@ -1945,24 +1945,24 @@ global_proxy_info = purple_proxy_info_new(); /* Proxy */ - purple_prefs_add_none("/core/proxy"); - purple_prefs_add_string("/core/proxy/type", "none"); - purple_prefs_add_string("/core/proxy/host", ""); - purple_prefs_add_int("/core/proxy/port", 0); - purple_prefs_add_string("/core/proxy/username", ""); - purple_prefs_add_string("/core/proxy/password", ""); + purple_prefs_add_none("/purple/proxy"); + purple_prefs_add_string("/purple/proxy/type", "none"); + purple_prefs_add_string("/purple/proxy/host", ""); + purple_prefs_add_int("/purple/proxy/port", 0); + purple_prefs_add_string("/purple/proxy/username", ""); + purple_prefs_add_string("/purple/proxy/password", ""); /* Setup callbacks for the preferences. */ handle = purple_proxy_get_handle(); - purple_prefs_connect_callback(handle, "/core/proxy/type", proxy_pref_cb, + purple_prefs_connect_callback(handle, "/purple/proxy/type", proxy_pref_cb, NULL); - purple_prefs_connect_callback(handle, "/core/proxy/host", proxy_pref_cb, + purple_prefs_connect_callback(handle, "/purple/proxy/host", proxy_pref_cb, NULL); - purple_prefs_connect_callback(handle, "/core/proxy/port", proxy_pref_cb, + purple_prefs_connect_callback(handle, "/purple/proxy/port", proxy_pref_cb, NULL); - purple_prefs_connect_callback(handle, "/core/proxy/username", + purple_prefs_connect_callback(handle, "/purple/proxy/username", proxy_pref_cb, NULL); - purple_prefs_connect_callback(handle, "/core/proxy/password", + purple_prefs_connect_callback(handle, "/purple/proxy/password", proxy_pref_cb, NULL); }
--- a/libpurple/prpl.h Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/prpl.h Fri Apr 27 05:20:10 2007 +0000 @@ -59,6 +59,7 @@ #include "blist.h" #include "conversation.h" #include "ft.h" +#include "imgstore.h" #include "notify.h" #include "proxy.h" #include "plugin.h" @@ -175,8 +176,11 @@ /** * Returns the base icon name for the given buddy and account. - * If buddy is NULL, it will return the name to use for the account's - * icon. This must be implemented. + * If buddy is NULL and the account is non-NULL, it will return the + * name to use for the account's icon. If both are NULL, it will + * return the name to use for the protocol's icon. + * + * This must be implemented. */ const char *(*list_icon)(PurpleAccount *account, PurpleBuddy *buddy); @@ -281,7 +285,9 @@ const char *(*normalize)(const PurpleAccount *, const char *); - void (*set_buddy_icon)(PurpleConnection *, const char *cached_path); + /* The prpl does NOT own a reference to img. If it needs one, it + * must purple_imgstore_ref(img) itself. */ + void (*set_buddy_icon)(PurpleConnection *, PurpleStoredImage *img); void (*remove_group)(PurpleConnection *gc, PurpleGroup *group);
--- a/libpurple/purple-url-handler Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/purple-url-handler Fri Apr 27 05:20:10 2007 +0000 @@ -92,13 +92,13 @@ def aim(uri): protocol = "prpl-aim" - match = re.match(r"^(aim):([^?]*)(\?(.*))", uri) + match = re.match(r"^aim:([^?]*)(\?(.*))", uri) if not match: print "Invalid aim URI: %s" % uri return - command = urllib.unquote_plus(match.group(2)) - paramstring = match.group(4) + command = urllib.unquote_plus(match.group(1)) + paramstring = match.group(3) params = {} if paramstring: for param in paramstring.split("&"): @@ -129,13 +129,13 @@ def icq(uri): protocol = "prpl-icq" - match = re.match(r"^(icq):([^?]*)(\?(.*))", uri) + match = re.match(r"^icq:([^?]*)(\?(.*))", uri) if not match: - print "Invalid aim URI: %s" % uri + print "Invalid icq URI: %s" % uri return - command = urllib.unquote_plus(match.group(2)) - paramstring = match.group(4) + command = urllib.unquote_plus(match.group(1)) + paramstring = match.group(3) params = {} if paramstring: for param in paramstring.split("&"): @@ -225,26 +225,26 @@ def xmpp(uri): protocol = "prpl-jabber" - match = re.match(r"^xmpp:((//)?([^/?#]*))?(/?([^?#]*))(\?([^;#]*)(;([^#]*))?)?(#(.*))?", uri) + match = re.match(r"^xmpp:(//([^/?#]*)/?)?([^?#]*)(\?([^;#]*)(;([^#]*))?)?(#(.*))?", uri) if not match: print "Invalid xmpp URI: %s" % uri return - tmp = match.group(3) + tmp = match.group(2) if (tmp): accountname = urllib.unquote_plus(tmp) else: accountname = "" - screenname = urllib.unquote_plus(match.group(5)) + screenname = urllib.unquote_plus(match.group(3)) - tmp = match.group(7) + tmp = match.group(5) if (tmp): command = urllib.unquote_plus(tmp) else: command = "" - paramstring = match.group(9) + paramstring = match.group(7) params = {} if paramstring: for param in paramstring.split(";"):
--- a/libpurple/request.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/request.c Fri Apr 27 05:20:10 2007 +0000 @@ -1135,6 +1135,7 @@ gboolean multiline, gboolean masked, gchar *hint, const char *ok_text, GCallback ok_cb, const char *cancel_text, GCallback cancel_cb, + PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data) { PurpleRequestUiOps *ops; @@ -1155,6 +1156,7 @@ multiline, masked, hint, ok_text, ok_cb, cancel_text, cancel_cb, + account, who, conv, user_data); handles = g_list_append(handles, info); @@ -1170,6 +1172,7 @@ const char *secondary, unsigned int default_value, const char *ok_text, GCallback ok_cb, const char *cancel_text, GCallback cancel_cb, + PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data, ...) { void *ui_handle; @@ -1181,7 +1184,8 @@ va_start(args, user_data); ui_handle = purple_request_choice_varg(handle, title, primary, secondary, default_value, ok_text, ok_cb, - cancel_text, cancel_cb, user_data, args); + cancel_text, cancel_cb, + account, who, conv, user_data, args); va_end(args); return ui_handle; @@ -1193,6 +1197,7 @@ unsigned int default_value, const char *ok_text, GCallback ok_cb, const char *cancel_text, GCallback cancel_cb, + PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data, va_list choices) { PurpleRequestUiOps *ops; @@ -1212,6 +1217,7 @@ default_value, ok_text, ok_cb, cancel_text, cancel_cb, + account, who, conv, user_data, choices); handles = g_list_append(handles, info); @@ -1225,6 +1231,7 @@ void * purple_request_action(void *handle, const char *title, const char *primary, const char *secondary, unsigned int default_action, + PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data, size_t action_count, ...) { void *ui_handle; @@ -1234,8 +1241,8 @@ va_start(args, action_count); ui_handle = purple_request_action_varg(handle, title, primary, secondary, - default_action, user_data, - action_count, args); + default_action, account, who, conv, + user_data, action_count, args); va_end(args); return ui_handle; @@ -1244,8 +1251,9 @@ void * purple_request_action_varg(void *handle, const char *title, const char *primary, const char *secondary, - unsigned int default_action, void *user_data, - size_t action_count, va_list actions) + unsigned int default_action, + PurpleAccount *account, const char *who, PurpleConversation *conv, + void *user_data, size_t action_count, va_list actions) { PurpleRequestUiOps *ops; @@ -1260,8 +1268,8 @@ info->type = PURPLE_REQUEST_ACTION; info->handle = handle; info->ui_handle = ops->request_action(title, primary, secondary, - default_action, user_data, - action_count, actions); + default_action, account, who, conv, + user_data, action_count, actions); handles = g_list_append(handles, info); @@ -1276,6 +1284,7 @@ const char *secondary, PurpleRequestFields *fields, const char *ok_text, GCallback ok_cb, const char *cancel_text, GCallback cancel_cb, + PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data) { PurpleRequestUiOps *ops; @@ -1295,6 +1304,7 @@ info->ui_handle = ops->request_fields(title, primary, secondary, fields, ok_text, ok_cb, cancel_text, cancel_cb, + account, who, conv, user_data); handles = g_list_append(handles, info); @@ -1308,7 +1318,9 @@ void * purple_request_file(void *handle, const char *title, const char *filename, gboolean savedialog, - GCallback ok_cb, GCallback cancel_cb, void *user_data) + GCallback ok_cb, GCallback cancel_cb, + PurpleAccount *account, const char *who, PurpleConversation *conv, + void *user_data) { PurpleRequestUiOps *ops; @@ -1321,7 +1333,8 @@ info->type = PURPLE_REQUEST_FILE; info->handle = handle; info->ui_handle = ops->request_file(title, filename, savedialog, - ok_cb, cancel_cb, user_data); + ok_cb, cancel_cb, + account, who, conv, user_data); handles = g_list_append(handles, info); return info->ui_handle; } @@ -1331,7 +1344,9 @@ void * purple_request_folder(void *handle, const char *title, const char *dirname, - GCallback ok_cb, GCallback cancel_cb, void *user_data) + GCallback ok_cb, GCallback cancel_cb, + PurpleAccount *account, const char *who, PurpleConversation *conv, + void *user_data) { PurpleRequestUiOps *ops; @@ -1344,7 +1359,9 @@ info->type = PURPLE_REQUEST_FOLDER; info->handle = handle; info->ui_handle = ops->request_folder(title, dirname, - ok_cb, cancel_cb, user_data); + ok_cb, cancel_cb, + account, who, conv, + user_data); handles = g_list_append(handles, info); return info->ui_handle; }
--- a/libpurple/request.h Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/request.h Fri Apr 27 05:20:10 2007 +0000 @@ -187,28 +187,34 @@ gboolean multiline, gboolean masked, gchar *hint, const char *ok_text, GCallback ok_cb, const char *cancel_text, GCallback cancel_cb, + PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data); void *(*request_choice)(const char *title, const char *primary, const char *secondary, unsigned int default_value, const char *ok_text, GCallback ok_cb, const char *cancel_text, GCallback cancel_cb, + PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data, va_list choices); void *(*request_action)(const char *title, const char *primary, const char *secondary, unsigned int default_action, + PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data, size_t action_count, va_list actions); void *(*request_fields)(const char *title, const char *primary, const char *secondary, PurpleRequestFields *fields, const char *ok_text, GCallback ok_cb, const char *cancel_text, GCallback cancel_cb, + PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data); void *(*request_file)(const char *title, const char *filename, - gboolean savedialog, GCallback ok_cb, - GCallback cancel_cb, void *user_data); + gboolean savedialog, GCallback ok_cb, GCallback cancel_cb, + PurpleAccount *account, const char *who, PurpleConversation *conv, + void *user_data); void (*close_request)(PurpleRequestType type, void *ui_handle); void *(*request_folder)(const char *title, const char *dirname, - GCallback ok_cb, GCallback cancel_cb, - void *user_data); + GCallback ok_cb, GCallback cancel_cb, + PurpleAccount *account, const char *who, PurpleConversation *conv, + void *user_data); } PurpleRequestUiOps; typedef void (*PurpleRequestInputCb)(void *, const char *); @@ -1172,6 +1178,9 @@ * @param ok_cb The callback for the @c OK button. * @param cancel_text The text for the @c Cancel button. * @param cancel_cb The callback for the @c Cancel button. + * @param account The PurpleAccount associated with this request, or NULL if none is + * @param who The username of the buddy assocaited with this request, or NULL if none is + * @param conv The PurpleConversation associated with this request, or NULL if none is * @param user_data The data to pass to the callback. * * @return A UI-specific handle. @@ -1182,6 +1191,7 @@ gboolean multiline, gboolean masked, gchar *hint, const char *ok_text, GCallback ok_cb, const char *cancel_text, GCallback cancel_cb, + PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data); /** @@ -1198,6 +1208,9 @@ * @param ok_cb The callback for the @c OK button. * @param cancel_text The text for the @c Cancel button. * @param cancel_cb The callback for the @c Cancel button. + * @param account The PurpleAccount associated with this request, or NULL if none is + * @param who The username of the buddy assocaited with this request, or NULL if none is + * @param conv The PurpleConversation associated with this request, or NULL if none is * @param user_data The data to pass to the callback. * @param ... The choices. This argument list should be * terminated with a NULL parameter. @@ -1209,6 +1222,7 @@ unsigned int default_value, const char *ok_text, GCallback ok_cb, const char *cancel_text, GCallback cancel_cb, + PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data, ...); /** @@ -1225,6 +1239,9 @@ * @param ok_cb The callback for the @c OK button. * @param cancel_text The text for the @c Cancel button. * @param cancel_cb The callback for the @c Cancel button. + * @param account The PurpleAccount associated with this request, or NULL if none is + * @param who The username of the buddy assocaited with this request, or NULL if none is + * @param conv The PurpleConversation associated with this request, or NULL if none is * @param user_data The data to pass to the callback. * @param choices The choices. This argument list should be * terminated with a @c NULL parameter. @@ -1236,6 +1253,7 @@ unsigned int default_value, const char *ok_text, GCallback ok_cb, const char *cancel_text, GCallback cancel_cb, + PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data, va_list choices); /** @@ -1250,6 +1268,9 @@ * @param primary The main point of the message. * @param secondary The secondary information. * @param default_action The default value. + * @param account The PurpleAccount associated with this request, or NULL if none is + * @param who The username of the buddy assocaited with this request, or NULL if none is + * @param conv The PurpleConversation associated with this request, or NULL if none is * @param user_data The data to pass to the callback. * @param action_count The number of actions. * @param ... A list of actions. These are pairs of @@ -1265,6 +1286,7 @@ void *purple_request_action(void *handle, const char *title, const char *primary, const char *secondary, unsigned int default_action, + PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data, size_t action_count, ...); /** @@ -1279,6 +1301,9 @@ * @param primary The main point of the message. * @param secondary The secondary information. * @param default_action The default value. + * @param account The PurpleAccount associated with this request, or NULL if none is + * @param who The username of the buddy assocaited with this request, or NULL if none is + * @param conv The PurpleConversation associated with this request, or NULL if none is * @param user_data The data to pass to the callback. * @param action_count The number of actions. * @param actions A list of actions and callbacks. @@ -1288,6 +1313,7 @@ void *purple_request_action_varg(void *handle, const char *title, const char *primary, const char *secondary, unsigned int default_action, + PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data, size_t action_count, va_list actions); @@ -1305,6 +1331,9 @@ * @param ok_cb The callback for the @c OK button. * @param cancel_text The text for the @c Cancel button. * @param cancel_cb The callback for the @c Cancel button. + * @param account The PurpleAccount associated with this request, or NULL if none is + * @param who The username of the buddy assocaited with this request, or NULL if none is + * @param conv The PurpleConversation associated with this request, or NULL if none is * @param user_data The data to pass to the callback. * * @return A UI-specific handle. @@ -1314,6 +1343,7 @@ PurpleRequestFields *fields, const char *ok_text, GCallback ok_cb, const char *cancel_text, GCallback cancel_cb, + PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data); /** @@ -1335,28 +1365,30 @@ * A wrapper for purple_request_action() that uses @c Yes and @c No buttons. */ #define purple_request_yes_no(handle, title, primary, secondary, \ - default_action, user_data, yes_cb, no_cb) \ + default_action, account, who, conv, \ + user_data, yes_cb, no_cb) \ purple_request_action((handle), (title), (primary), (secondary), \ - (default_action), (user_data), 2, \ + (default_action), account, who, conv, (user_data), 2, \ _("_Yes"), (yes_cb), _("_No"), (no_cb)) /** * A wrapper for purple_request_action() that uses @c OK and @c Cancel buttons. */ #define purple_request_ok_cancel(handle, title, primary, secondary, \ - default_action, user_data, ok_cb, cancel_cb) \ + default_action, account, who, conv, \ + user_data, ok_cb, cancel_cb) \ purple_request_action((handle), (title), (primary), (secondary), \ - (default_action), (user_data), 2, \ + (default_action), account, who, conv, (user_data), 2, \ _("_OK"), (ok_cb), _("_Cancel"), (cancel_cb)) /** * A wrapper for purple_request_action() that uses Accept and Cancel buttons. */ #define purple_request_accept_cancel(handle, title, primary, secondary, \ - default_action, user_data, accept_cb, \ - cancel_cb) \ + default_action, account, who, conv, \ + user_data, accept_cb, cancel_cb) \ purple_request_action((handle), (title), (primary), (secondary), \ - (default_action), (user_data), 2, \ + (default_action), account, who, conv, (user_data), 2, \ _("_Accept"), (accept_cb), _("_Cancel"), (cancel_cb)) /** @@ -1372,6 +1404,9 @@ * False if it is being used to open a file. * @param ok_cb The callback for the @c OK button. * @param cancel_cb The callback for the @c Cancel button. + * @param account The PurpleAccount associated with this request, or NULL if none is + * @param who The username of the buddy assocaited with this request, or NULL if none is + * @param conv The PurpleConversation associated with this request, or NULL if none is * @param user_data The data to pass to the callback. * * @return A UI-specific handle. @@ -1379,6 +1414,7 @@ void *purple_request_file(void *handle, const char *title, const char *filename, gboolean savedialog, GCallback ok_cb, GCallback cancel_cb, + PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data); /** @@ -1392,12 +1428,16 @@ * @param dirname The default directory name (may be @c NULL) * @param ok_cb The callback for the @c OK button. * @param cancel_cb The callback for the @c Cancel button. + * @param account The PurpleAccount associated with this request, or NULL if none is + * @param who The username of the buddy assocaited with this request, or NULL if none is + * @param conv The PurpleConversation associated with this request, or NULL if none is * @param user_data The data to pass to the callback. * * @return A UI-specific handle. */ void *purple_request_folder(void *handle, const char *title, const char *dirname, GCallback ok_cb, GCallback cancel_cb, + PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data); /*@}*/
--- a/libpurple/savedstatuses.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/savedstatuses.c Fri Apr 27 05:20:10 2007 +0000 @@ -705,13 +705,13 @@ * If we just deleted our current status or our idleaway status, * then set the appropriate pref back to 0. */ - current = purple_prefs_get_int("/core/savedstatus/default"); + current = purple_prefs_get_int("/purple/savedstatus/default"); if (current == creation_time) - purple_prefs_set_int("/core/savedstatus/default", 0); + purple_prefs_set_int("/purple/savedstatus/default", 0); - idleaway = purple_prefs_get_int("/core/savedstatus/idleaway"); + idleaway = purple_prefs_get_int("/purple/savedstatus/idleaway"); if (idleaway == creation_time) - purple_prefs_set_int("/core/savedstatus/idleaway", 0); + purple_prefs_set_int("/purple/savedstatus/idleaway", 0); return TRUE; } @@ -765,7 +765,7 @@ int creation_time; PurpleSavedStatus *saved_status = NULL; - creation_time = purple_prefs_get_int("/core/savedstatus/default"); + creation_time = purple_prefs_get_int("/purple/savedstatus/default"); if (creation_time != 0) saved_status = g_hash_table_lookup(creation_times, &creation_time); @@ -779,7 +779,7 @@ * using? In any case, add a default status. */ saved_status = purple_savedstatus_new(NULL, PURPLE_STATUS_AVAILABLE); - purple_prefs_set_int("/core/savedstatus/default", + purple_prefs_set_int("/purple/savedstatus/default", purple_savedstatus_get_creation_time(saved_status)); } @@ -792,7 +792,7 @@ int creation_time; PurpleSavedStatus *saved_status = NULL; - creation_time = purple_prefs_get_int("/core/savedstatus/idleaway"); + creation_time = purple_prefs_get_int("/purple/savedstatus/idleaway"); if (creation_time != 0) saved_status = g_hash_table_lookup(creation_times, &creation_time); @@ -807,7 +807,7 @@ { saved_status = purple_savedstatus_new(NULL, PURPLE_STATUS_AWAY); purple_savedstatus_set_message(saved_status, DEFAULT_AUTOAWAY_MESSAGE); - purple_prefs_set_int("/core/savedstatus/idleaway", + purple_prefs_set_int("/purple/savedstatus/idleaway", purple_savedstatus_get_creation_time(saved_status)); } } @@ -818,7 +818,7 @@ gboolean purple_savedstatus_is_idleaway() { - return purple_prefs_get_bool("/core/savedstatus/isidleaway"); + return purple_prefs_get_bool("/purple/savedstatus/isidleaway"); } void @@ -836,7 +836,7 @@ purple_idle_touch(); old = purple_savedstatus_get_current(); - purple_prefs_set_bool("/core/savedstatus/isidleaway", idleaway); + purple_prefs_set_bool("/purple/savedstatus/isidleaway", idleaway); saved_status = idleaway ? purple_savedstatus_get_idleaway() : purple_savedstatus_get_default(); @@ -871,7 +871,7 @@ int creation_time; PurpleSavedStatus *saved_status = NULL; - creation_time = purple_prefs_get_int("/core/savedstatus/startup"); + creation_time = purple_prefs_get_int("/purple/savedstatus/startup"); if (creation_time != 0) saved_status = g_hash_table_lookup(creation_times, &creation_time); @@ -1074,7 +1074,7 @@ saved_status->usage_count++; saved_statuses = g_list_remove(saved_statuses, saved_status); saved_statuses = g_list_insert_sorted(saved_statuses, saved_status, saved_statuses_sort_func); - purple_prefs_set_int("/core/savedstatus/default", + purple_prefs_set_int("/purple/savedstatus/default", purple_savedstatus_get_creation_time(saved_status)); accounts = purple_accounts_get_all_active(); @@ -1155,12 +1155,12 @@ * sees a creation_time of 0, then it will create a default * saved status and return that to the user. */ - purple_prefs_add_none("/core/savedstatus"); - purple_prefs_add_int("/core/savedstatus/default", 0); - purple_prefs_add_int("/core/savedstatus/startup", 0); - purple_prefs_add_bool("/core/savedstatus/startup_current_status", TRUE); - purple_prefs_add_int("/core/savedstatus/idleaway", 0); - purple_prefs_add_bool("/core/savedstatus/isidleaway", FALSE); + purple_prefs_add_none("/purple/savedstatus"); + purple_prefs_add_int("/purple/savedstatus/default", 0); + purple_prefs_add_int("/purple/savedstatus/startup", 0); + purple_prefs_add_bool("/purple/savedstatus/startup_current_status", TRUE); + purple_prefs_add_int("/purple/savedstatus/idleaway", 0); + purple_prefs_add_bool("/purple/savedstatus/isidleaway", FALSE); load_statuses();
--- a/libpurple/server.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/server.c Fri Apr 27 05:20:10 2007 +0000 @@ -138,7 +138,7 @@ * XXX - If "only auto-reply when away & idle" is set, then shouldn't * this only reset lar->sent if we're away AND idle? */ - auto_reply_pref = purple_prefs_get_string("/core/away/auto_reply"); + auto_reply_pref = purple_prefs_get_string("/purple/away/auto_reply"); if ((gc->flags & PURPLE_CONNECTION_AUTO_RESP) && !purple_presence_is_available(presence) && strcmp(auto_reply_pref, "never")) { @@ -503,7 +503,7 @@ const gchar *auto_reply_pref; const char *away_msg = NULL; - auto_reply_pref = purple_prefs_get_string("/core/away/auto_reply"); + auto_reply_pref = purple_prefs_get_string("/purple/away/auto_reply"); presence = purple_account_get_presence(account); status = purple_presence_get_active_status(presence); @@ -677,8 +677,8 @@ purple_request_accept_cancel(gc, NULL, _("Accept chat invitation?"), buf2, - PURPLE_DEFAULT_ACTION_NONE, cid, - G_CALLBACK(chat_invite_accept), + PURPLE_DEFAULT_ACTION_NONE, account, who, NULL, + cid, G_CALLBACK(chat_invite_accept), G_CALLBACK(chat_invite_reject)); } else if (plugin_return > 0)
--- a/libpurple/sound.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/sound.c Fri Apr 27 05:20:10 2007 +0000 @@ -34,7 +34,7 @@ static gboolean purple_sound_play_required(const PurpleAccount *account) { - gint pref_status = purple_prefs_get_int("/core/sound/while_status"); + gint pref_status = purple_prefs_get_int("/purple/sound/while_status"); if (pref_status == 3) { @@ -125,8 +125,8 @@ purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_ACCOUNT)); - purple_prefs_add_none("/core/sound"); - purple_prefs_add_int("/core/sound/while_status", STATUS_AVAILABLE); + purple_prefs_add_none("/purple/sound"); + purple_prefs_add_int("/purple/sound/while_status", STATUS_AVAILABLE); } void
--- a/libpurple/status.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/status.c Fri Apr 27 05:20:10 2007 +0000 @@ -599,7 +599,7 @@ { PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); - if (purple_prefs_get_bool("/core/logging/log_system")) + if (purple_prefs_get_bool("/purple/logging/log_system")) { time_t current_time = time(NULL); const char *buddy_alias = purple_buddy_get_alias(buddy); @@ -1284,7 +1284,7 @@ if (!old_idle && idle) { - if (purple_prefs_get_bool("/core/logging/log_system")) + if (purple_prefs_get_bool("/purple/logging/log_system")) { PurpleLog *log = purple_account_get_log(buddy->account, FALSE); @@ -1301,7 +1301,7 @@ } else if (old_idle && !idle) { - if (purple_prefs_get_bool("/core/logging/log_system")) + if (purple_prefs_get_bool("/purple/logging/log_system")) { PurpleLog *log = purple_account_get_log(buddy->account, FALSE); @@ -1364,7 +1364,7 @@ account = purple_presence_get_account(presence); - if (purple_prefs_get_bool("/core/logging/log_system")) + if (purple_prefs_get_bool("/purple/logging/log_system")) { PurpleLog *log = purple_account_get_log(account, FALSE); @@ -1713,38 +1713,38 @@ { void *handle = purple_status_get_handle; - purple_prefs_add_none("/core/status"); - purple_prefs_add_none("/core/status/scores"); + purple_prefs_add_none("/purple/status"); + purple_prefs_add_none("/purple/status/scores"); - purple_prefs_add_int("/core/status/scores/offline", + purple_prefs_add_int("/purple/status/scores/offline", primitive_scores[PURPLE_STATUS_OFFLINE]); - purple_prefs_add_int("/core/status/scores/available", + purple_prefs_add_int("/purple/status/scores/available", primitive_scores[PURPLE_STATUS_AVAILABLE]); - purple_prefs_add_int("/core/status/scores/invisible", + purple_prefs_add_int("/purple/status/scores/invisible", primitive_scores[PURPLE_STATUS_INVISIBLE]); - purple_prefs_add_int("/core/status/scores/away", + purple_prefs_add_int("/purple/status/scores/away", primitive_scores[PURPLE_STATUS_AWAY]); - purple_prefs_add_int("/core/status/scores/extended_away", + purple_prefs_add_int("/purple/status/scores/extended_away", primitive_scores[PURPLE_STATUS_EXTENDED_AWAY]); - purple_prefs_add_int("/core/status/scores/idle", + purple_prefs_add_int("/purple/status/scores/idle", primitive_scores[SCORE_IDLE]); - purple_prefs_connect_callback(handle, "/core/status/scores/offline", + purple_prefs_connect_callback(handle, "/purple/status/scores/offline", score_pref_changed_cb, GINT_TO_POINTER(PURPLE_STATUS_OFFLINE)); - purple_prefs_connect_callback(handle, "/core/status/scores/available", + purple_prefs_connect_callback(handle, "/purple/status/scores/available", score_pref_changed_cb, GINT_TO_POINTER(PURPLE_STATUS_AVAILABLE)); - purple_prefs_connect_callback(handle, "/core/status/scores/invisible", + purple_prefs_connect_callback(handle, "/purple/status/scores/invisible", score_pref_changed_cb, GINT_TO_POINTER(PURPLE_STATUS_INVISIBLE)); - purple_prefs_connect_callback(handle, "/core/status/scores/away", + purple_prefs_connect_callback(handle, "/purple/status/scores/away", score_pref_changed_cb, GINT_TO_POINTER(PURPLE_STATUS_AWAY)); - purple_prefs_connect_callback(handle, "/core/status/scores/extended_away", + purple_prefs_connect_callback(handle, "/purple/status/scores/extended_away", score_pref_changed_cb, GINT_TO_POINTER(PURPLE_STATUS_EXTENDED_AWAY)); - purple_prefs_connect_callback(handle, "/core/status/scores/idle", + purple_prefs_connect_callback(handle, "/purple/status/scores/idle", score_pref_changed_cb, GINT_TO_POINTER(SCORE_IDLE));
--- a/libpurple/stun.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/stun.c Fri Apr 27 05:20:10 2007 +0000 @@ -371,7 +371,7 @@ } PurpleStunNatDiscovery *purple_stun_discover(StunCallback cb) { - const char *servername = purple_prefs_get_string("/core/network/stun_server"); + const char *servername = purple_prefs_get_string("/purple/network/stun_server"); purple_debug_info("stun", "using server %s\n", servername); @@ -428,6 +428,6 @@ } void purple_stun_init() { - purple_prefs_add_string("/core/network/stun_server", ""); + purple_prefs_add_string("/purple/network/stun_server", ""); purple_stun_discover(NULL); }
--- a/libpurple/util.c Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/util.c Fri Apr 27 05:20:10 2007 +0000 @@ -65,7 +65,7 @@ }; static char custom_home_dir[MAXPATHLEN]; -static char home_dir[MAXPATHLEN]; +static char home_dir[MAXPATHLEN] = ""; PurpleMenuAction * purple_menu_action_new(const char *label, PurpleCallback callback, gpointer data, @@ -2245,25 +2245,17 @@ #endif } -/* Returns the argument passed to -c IFF it was present, or ~/.gaim IFF it - * exists, else ~/.purple. */ +/* Returns the argument passed to -c IFF it was present, or ~/.purple. */ const char * purple_user_dir(void) { - if (custom_home_dir != NULL && strlen(custom_home_dir) > 0) { + if (custom_home_dir != NULL && *custom_home_dir) { strcpy ((char*) &home_dir, (char*) &custom_home_dir); - } else { + } else if (!*home_dir) { const gchar *hd = purple_home_dir(); if (hd) { g_strlcpy((char*) &home_dir, hd, sizeof(home_dir)); - g_strlcat((char*) &home_dir, G_DIR_SEPARATOR_S ".gaim", - sizeof(home_dir)); - - if (g_file_test(home_dir, G_FILE_TEST_EXISTS)) - return home_dir; - - g_strlcpy((char*) &home_dir, hd, sizeof(home_dir)); g_strlcat((char*) &home_dir, G_DIR_SEPARATOR_S ".purple", sizeof(home_dir)); } @@ -2577,6 +2569,27 @@ return fp; } +const char * +purple_util_get_image_extension(gconstpointer data, size_t len) +{ + g_return_val_if_fail(data != NULL, NULL); + g_return_val_if_fail(len > 0, NULL); + + if (len >= 4) + { + if (!strncmp((char *)data, "BM", 2)) + return "bmp"; + else if (!strncmp((char *)data, "GIF8", 4)) + return "gif"; + else if (!strncmp((char *)data, "\xff\xd8\xff\xe0", 4)) + return "jpg"; + else if (!strncmp((char *)data, "\x89PNG", 4)) + return "png"; + } + + return "icon"; +} + gboolean purple_program_is_valid(const char *program) { @@ -2654,7 +2667,7 @@ gboolean purple_running_osx(void) { -#if defined(__APPLE__) +#if defined(__APPLE__) return TRUE; #else return FALSE; @@ -3072,7 +3085,6 @@ char *cmd; GHashTable *params = NULL; int len; -printf("got handler uri \n"); if (!(tmp = strchr(uri, ':')) || tmp == uri) { purple_debug_error("util", "Malformed protocol handler message - missing protocol.\n"); return; @@ -4195,7 +4207,7 @@ signal(SIGABRT, SIG_DFL); /* 6: abort program */ #ifdef SIGPOLL - signal(SIGPOLL, SIG_DFL); /* 7: pollable event (POSIX) */ + signal(SIGPOLL, SIG_DFL); /* 7: pollable event (POSIX) */ #endif /* SIGPOLL */ #ifdef SIGEMT @@ -4211,7 +4223,7 @@ signal(SIGTERM, SIG_DFL); /* 15: software termination signal */ signal(SIGCHLD, SIG_DFL); /* 20: child status has changed */ signal(SIGXCPU, SIG_DFL); /* 24: exceeded CPU time limit */ - signal(SIGXFSZ, SIG_DFL); /* 25: exceeded file size limit */ + signal(SIGXFSZ, SIG_DFL); /* 25: exceeded file size limit */ #endif /* HAVE_SIGNAL_H */ #endif /* !_WIN32 */ }
--- a/libpurple/util.h Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/util.h Fri Apr 27 05:20:10 2007 +0000 @@ -469,7 +469,7 @@ * the first character of the entity. If given an unrecognized entity, the function * returns @c NULL. * - * Note that this function, unlike purple_unescape_html(), does not search + * Note that this function, unlike purple_unescape_html(), does not search * the string for the entity, does not replace the entity, and does not * return a newly allocated string. * @@ -598,6 +598,25 @@ FILE *purple_mkstemp(char **path, gboolean binary); /** + * Returns an extension corresponding to the image data's file type. + * + * @param data A pointer to the image data + * @param len The length of the image data + * + * @return The appropriate extension, or "icon" if unknown. + */ +const char * +purple_util_get_image_extension(gconstpointer data, size_t len); + +/*@}*/ + + +/**************************************************************************/ +/** @name Environment Detection Functions */ +/**************************************************************************/ +/*@{*/ + +/** * Checks if the given program name is valid and executable. * * @param program The file name of the application. @@ -1118,6 +1137,7 @@ * inherit the handlers of the parent. */ void purple_restore_default_signal_handlers(void); + #ifdef __cplusplus } #endif
--- a/libpurple/value.h Fri Apr 27 05:18:14 2007 +0000 +++ b/libpurple/value.h Fri Apr 27 05:20:10 2007 +0000 @@ -76,7 +76,8 @@ PURPLE_SUBTYPE_XFER, PURPLE_SUBTYPE_SAVEDSTATUS, PURPLE_SUBTYPE_XMLNODE, - PURPLE_SUBTYPE_USERINFO + PURPLE_SUBTYPE_USERINFO, + PURPLE_SUBTYPE_STORED_IMAGE } PurpleSubType; /**
--- a/pidgin.desktop.in Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin.desktop.in Fri Apr 27 05:20:10 2007 +0000 @@ -4,7 +4,7 @@ _GenericName=Internet Messenger _Comment=Send instant messages over multiple protocols Exec=pidgin -Icon=pidgin.png +Icon=pidgin StartupNotify=true Terminal=false Type=Application
--- a/pidgin.spec.in Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin.spec.in Fri Apr 27 05:20:10 2007 +0000 @@ -337,6 +337,7 @@ %{_bindir}/pidgin %{_datadir}/pixmaps/pidgin +%{_datadir}/icons/hicolor/*/apps/pidgin.png %dir %{_datadir}/sounds/pidgin %{_datadir}/sounds/pidgin/* %{_datadir}/applications/* @@ -347,7 +348,7 @@ %defattr(-, root, root) %{_libdir}/libpurple.so.* -%dir %{_libdir}/libpurple +%dir %{_libdir}/purple %attr(755, root, root) %{perl_vendorarch}/Purple.pm %dir %{perl_vendorarch}/auto/Purple %attr(755, root, root) %{perl_vendorarch}/auto/Purple/Purple.so @@ -433,6 +434,9 @@ %endif %changelog +* Wed Apr 25 2007 Stu Tomlinson <stu@nosnilmot.com> +- Update libpurple to pick up plugins in %%{_libdir}/purple + * Sun Apr 22 2007 Stu Tomlinson <stu@nosnilmot.com> - Remove Epoch because it's gone in Fedora now - Add virtual provides for gaim & gaim-devel
--- a/pidgin/gtkaccount.c Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/gtkaccount.c Fri Apr 27 05:20:10 2007 +0000 @@ -122,8 +122,7 @@ GtkWidget *icon_filesel; GtkWidget *icon_preview; GtkWidget *icon_text; - char *cached_icon_path; - char *icon_path; + PurpleStoredImage *icon_img; /* Protocol Options */ GtkWidget *protocol_frame; @@ -195,20 +194,25 @@ } static void -set_dialog_icon(AccountPrefsDialog *dialog, gchar *new_cached_icon_path, gchar *new_icon_path) +set_dialog_icon(AccountPrefsDialog *dialog, gpointer *data, size_t len, gchar *new_icon_path) { - char *filename; GdkPixbuf *pixbuf = NULL; - g_free(dialog->cached_icon_path); - g_free(dialog->icon_path); - dialog->cached_icon_path = new_cached_icon_path; - dialog->icon_path = new_icon_path; - - filename = purple_buddy_icons_get_full_path(dialog->cached_icon_path); - if (filename != NULL) { - pixbuf = gdk_pixbuf_new_from_file(filename, NULL); - g_free(filename); + purple_imgstore_unref(dialog->icon_img); + if (data != NULL) + { + if (len > 0) + dialog->icon_img = purple_imgstore_add(data, len, new_icon_path); + else + g_free(data); + } + + if (dialog->icon_img != NULL) { + GdkPixbufLoader *loader = gdk_pixbuf_loader_new(); + gdk_pixbuf_loader_write(loader, purple_imgstore_get_data(dialog->icon_img), + purple_imgstore_get_size(dialog->icon_img), NULL); + gdk_pixbuf_loader_close(loader, NULL); + pixbuf = gdk_pixbuf_loader_get_pixbuf(loader); } if (pixbuf && dialog->prpl_info && @@ -298,12 +302,14 @@ static void icon_filesel_choose_cb(const char *filename, gpointer data) { - AccountPrefsDialog *dialog; - - dialog = data; + AccountPrefsDialog *dialog = data; if (filename != NULL) - set_dialog_icon(dialog, pidgin_convert_buddy_icon(dialog->plugin, filename), g_strdup(filename)); + { + size_t len; + gpointer data = pidgin_convert_buddy_icon(dialog->plugin, filename, &len); + set_dialog_icon(dialog, data, len, g_strdup(filename)); + } dialog->icon_filesel = NULL; } @@ -318,7 +324,7 @@ static void icon_reset_cb(GtkWidget *button, AccountPrefsDialog *dialog) { - set_dialog_icon(dialog, NULL, NULL); + set_dialog_icon(dialog, NULL, 0, NULL); } static void @@ -333,6 +339,9 @@ if (!g_ascii_strncasecmp(name, "file://", 7)) { GError *converr = NULL; gchar *tmp, *rtmp; + gpointer data; + size_t len; + /* It looks like we're dealing with a local file. */ if(!(tmp = g_filename_from_uri(name, NULL, &converr))) { purple_debug(PURPLE_DEBUG_ERROR, "buddyicon", "%s\n", @@ -342,8 +351,10 @@ } if ((rtmp = strchr(tmp, '\r')) || (rtmp = strchr(tmp, '\n'))) *rtmp = '\0'; - set_dialog_icon(dialog, pidgin_convert_buddy_icon(dialog->plugin, tmp), g_strdup(tmp)); - g_free(tmp); + + data = pidgin_convert_buddy_icon(dialog->plugin, tmp, &len); + /* This takes ownership of tmp */ + set_dialog_icon(dialog, data, len, tmp); } gtk_drag_finish(dc, TRUE, FALSE, t); } @@ -591,8 +602,8 @@ gtk_widget_show(dialog->icon_entry); /* TODO: Uh, isn't this next line pretty useless? */ pidgin_set_accessible_label (dialog->icon_entry, label); - dialog->cached_icon_path = NULL; - dialog->icon_path = NULL; + purple_imgstore_unref(dialog->icon_img); + dialog->icon_img = NULL; vbox2 = gtk_vbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), vbox2, TRUE, TRUE, 0); @@ -617,19 +628,27 @@ } if (dialog->account != NULL) { + PurpleStoredImage *img; + gpointer data = NULL; + size_t len = 0; + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dialog->new_mail_check), purple_account_get_check_mail(dialog->account)); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dialog->icon_check), !purple_account_get_bool(dialog->account, "use-global-buddyicon", TRUE)); - set_dialog_icon(dialog, - g_strdup(purple_account_get_ui_string(dialog->account, - PIDGIN_UI, "non-global-buddyicon-cached-path", NULL)), - g_strdup(purple_account_get_ui_string(dialog->account, - PIDGIN_UI, "non-global-buddyicon-path", NULL))); + + img = purple_buddy_icons_find_account_icon(dialog->account); + if (img) + { + len = purple_imgstore_get_size(img); + data = g_memdup(purple_imgstore_get_data(img), len); + } + set_dialog_icon(dialog, data, len, + g_strdup(purple_account_get_buddy_icon_path(dialog->account))); } else { - set_dialog_icon(dialog, NULL, NULL); + set_dialog_icon(dialog, NULL, 0, NULL); } if (!dialog->prpl_info || @@ -1072,22 +1091,7 @@ g_list_free(dialog->protocol_opt_entries); g_free(dialog->protocol_id); - if (dialog->cached_icon_path != NULL) - { - const char *icon = purple_account_get_ui_string(dialog->account, PIDGIN_UI, "non-global-buddyicon-cached-path", NULL); - if (dialog->cached_icon_path != NULL && (icon == NULL || strcmp(dialog->cached_icon_path, icon))) - { - /* The user set an icon, which would've been cached by convert_buddy_icon, - * but didn't save the changes. Delete the cache file. */ - char *filename = g_build_filename(purple_buddy_icons_get_cache_dir(), dialog->cached_icon_path, NULL); - g_unlink(filename); - g_free(filename); - } - - g_free(dialog->cached_icon_path); - } - - g_free(dialog->icon_path); + purple_imgstore_unref(dialog->icon_img); if (dialog->icon_filesel) gtk_widget_destroy(dialog->icon_filesel); @@ -1143,26 +1147,37 @@ prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(dialog->plugin); if (prpl_info != NULL && prpl_info->icon_spec.format != NULL) { + const char *filename; + if (new || purple_account_get_bool(account, "use-global-buddyicon", TRUE) == gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialog->icon_check))) { icon_change = TRUE; } purple_account_set_bool(account, "use-global-buddyicon", !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialog->icon_check))); - purple_account_set_ui_string(account, PIDGIN_UI, "non-global-buddyicon-cached-path", dialog->cached_icon_path); - purple_account_set_ui_string(account, PIDGIN_UI, "non-global-buddyicon-path", dialog->icon_path); + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialog->icon_check))) { - purple_account_set_buddy_icon_path(account, dialog->icon_path); - purple_account_set_buddy_icon(account, dialog->cached_icon_path); + if (dialog->icon_img) + { + size_t len = purple_imgstore_get_size(dialog->icon_img); + purple_buddy_icons_set_account_icon(account, + g_memdup(purple_imgstore_get_data(dialog->icon_img), len), + len); + purple_account_set_buddy_icon_path(account, purple_imgstore_get_filename(dialog->icon_img)); + } + else + { + purple_buddy_icons_set_account_icon(account, NULL, 0); + purple_account_set_buddy_icon_path(account, NULL); + } } - else if (purple_prefs_get_path(PIDGIN_PREFS_ROOT "/accounts/buddyicon") && icon_change) + else if ((filename = purple_prefs_get_path(PIDGIN_PREFS_ROOT "/accounts/buddyicon")) && icon_change) { - const char *filename = purple_prefs_get_path(PIDGIN_PREFS_ROOT "/accounts/buddyicon"); - char *icon = pidgin_convert_buddy_icon(dialog->plugin, filename); + size_t len; + gpointer data = pidgin_convert_buddy_icon(dialog->plugin, filename, &len); purple_account_set_buddy_icon_path(account, filename); - purple_account_set_buddy_icon(account, icon); - g_free(icon); + purple_buddy_icons_set_account_icon(account, data, len); } } @@ -1858,7 +1873,9 @@ purple_account_get_username(account)); purple_request_close_with_handle(account); - purple_request_action(account, NULL, buf, NULL, 0, account, 2, + purple_request_action(account, NULL, buf, NULL, 0, + account, NULL, NULL, + account, 2, _("Delete"), delete_account_cb, _("Cancel"), NULL); g_free(buf); @@ -1975,7 +1992,7 @@ set_account(GtkListStore *store, GtkTreeIter *iter, PurpleAccount *account, GdkPixbuf *global_buddyicon) { GdkPixbuf *pixbuf, *buddyicon = NULL; - const char *path = NULL; + PurpleStoredImage *img = NULL; pixbuf = pidgin_create_prpl_icon(account, PIDGIN_PRPL_ICON_MEDIUM); if ((pixbuf != NULL) && purple_account_is_disconnected(account)) @@ -1986,12 +2003,22 @@ buddyicon = g_object_ref(G_OBJECT(global_buddyicon)); /* This is for when set_account() is called for a single account */ else - path = purple_prefs_get_path(PIDGIN_PREFS_ROOT "/accounts/buddyicon"); - } else - path = purple_account_get_ui_string(account, PIDGIN_UI, "non-global-buddyicon-path", NULL); - - if (path != NULL) { - GdkPixbuf *buddyicon_pixbuf = gdk_pixbuf_new_from_file(path, NULL); + img = purple_buddy_icons_find_account_icon(account); + } else { + img = purple_buddy_icons_find_account_icon(account); + } + + if (img != NULL) { + GdkPixbufLoader *loader = gdk_pixbuf_loader_new(); + GdkPixbuf *buddyicon_pixbuf; + + gdk_pixbuf_loader_write(loader, purple_imgstore_get_data(img), + purple_imgstore_get_size(img), NULL); + gdk_pixbuf_loader_close(loader, NULL); + buddyicon_pixbuf = gdk_pixbuf_loader_get_pixbuf(loader); + + purple_imgstore_unref(img); + if (buddyicon_pixbuf != NULL) { buddyicon = gdk_pixbuf_scale_simple(buddyicon_pixbuf, 22, 22, GDK_INTERP_HYPER); g_object_unref(G_OBJECT(buddyicon_pixbuf));
--- a/pidgin/gtkblist.c Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/gtkblist.c Fri Apr 27 05:20:10 2007 +0000 @@ -2155,7 +2155,7 @@ static GdkPixbuf *pidgin_blist_get_buddy_icon(PurpleBlistNode *node, - gboolean scaled, gboolean greyed, gboolean custom) + gboolean scaled, gboolean greyed) { GdkPixbuf *buf, *ret = NULL; GdkPixbufLoader *loader; @@ -2166,6 +2166,7 @@ PurpleChat *chat = NULL; PurpleAccount *account = NULL; PurplePluginProtocolInfo *prpl_info = NULL; + PurpleStoredImage *custom_img; if(PURPLE_BLIST_NODE_IS_CONTACT(node)) { buddy = purple_contact_get_priority_buddy((PurpleContact*)node); @@ -2190,19 +2191,11 @@ return NULL; #endif - if (custom) { - const char *file = purple_blist_node_get_string((PurpleBlistNode*)purple_buddy_get_contact(buddy), - "custom_buddy_icon"); - if (file && *file) { - char *contents; - GError *err = NULL; - if (!g_file_get_contents(file, &contents, &len, &err)) { - purple_debug_info("custom -icon", "Could not open custom-icon %s for %s\n", - file, purple_buddy_get_name(buddy), err->message); - g_error_free(err); - } else - data = (const guchar*)contents; - } + custom_img = purple_buddy_icons_find_custom_icon(purple_buddy_get_contact(buddy)); + if (custom_img) + { + data = purple_imgstore_get_data(custom_img); + len = purple_imgstore_get_size(custom_img); } if (data == NULL) { @@ -2211,8 +2204,9 @@ if (!(icon = purple_buddy_icons_find(buddy->account, buddy->name))) /* Not sure I like this...*/ return NULL; data = purple_buddy_icon_get_data(icon, &len); + if (data == NULL) + return NULL; } - custom = FALSE; /* We are not using the custom icon */ } if(data == NULL) @@ -2221,13 +2215,14 @@ loader = gdk_pixbuf_loader_new(); gdk_pixbuf_loader_write(loader, data, len, NULL); gdk_pixbuf_loader_close(loader, NULL); + + purple_imgstore_unref(custom_img); + buf = gdk_pixbuf_loader_get_pixbuf(loader); if (buf) g_object_ref(G_OBJECT(buf)); g_object_unref(G_OBJECT(loader)); - if (custom) - g_free((void*)data); if (buf) { int orig_width, orig_height; int scale_width, scale_height; @@ -2335,7 +2330,7 @@ } td->status_icon = pidgin_blist_get_status_icon(node, PIDGIN_STATUS_ICON_LARGE); - td->avatar = pidgin_blist_get_buddy_icon(node, !full, FALSE, TRUE); + td->avatar = pidgin_blist_get_buddy_icon(node, !full, FALSE); td->prpl_icon = pidgin_create_prpl_icon(account, PIDGIN_PRPL_ICON_SMALL); tooltip_text = pidgin_get_tooltip_text(node, full); td->layout = gtk_widget_create_pango_layout(gtkblist->tipwindow, NULL); @@ -3954,6 +3949,7 @@ enabled = purple_account_get_enabled(account, purple_core_get_ui()); purple_request_action(account, _("Connection Error"), primary, text, 2, + account, NULL, NULL, account, 3, _("OK"), NULL, _("Modify Account"), PURPLE_CALLBACK(ce_modify_account_cb), @@ -4893,7 +4889,7 @@ status = pidgin_blist_get_status_icon((PurpleBlistNode*)buddy, PIDGIN_STATUS_ICON_SMALL); - avatar = pidgin_blist_get_buddy_icon((PurpleBlistNode *)buddy, TRUE, TRUE, TRUE); + avatar = pidgin_blist_get_buddy_icon((PurpleBlistNode *)buddy, TRUE, TRUE); if (!avatar) { g_object_ref(G_OBJECT(gtkblist->empty_avatar)); avatar = gtkblist->empty_avatar; @@ -5078,7 +5074,7 @@ status = pidgin_blist_get_status_icon(node, PIDGIN_STATUS_ICON_SMALL); emblem = pidgin_blist_get_emblem(node); - avatar = pidgin_blist_get_buddy_icon(node, TRUE, FALSE, TRUE); + avatar = pidgin_blist_get_buddy_icon(node, TRUE, FALSE); mark = g_markup_escape_text(purple_chat_get_name(chat), -1); @@ -5805,7 +5801,9 @@ _("Please enter the name of the group to be added."), NULL, FALSE, FALSE, NULL, _("Add"), G_CALLBACK(add_group_cb), - _("Cancel"), NULL, NULL); + _("Cancel"), NULL, + NULL, NULL, NULL, + NULL); } void
--- a/pidgin/gtkconv.c Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/gtkconv.c Fri Apr 27 05:20:10 2007 +0000 @@ -1012,7 +1012,9 @@ purple_request_file(PIDGIN_CONVERSATION(conv), _("Save Conversation"), purple_escape_filename(buf), - TRUE, G_CALLBACK(savelog_writefile_cb), NULL, conv); + TRUE, G_CALLBACK(savelog_writefile_cb), NULL, + NULL, NULL, conv, + conv); g_free(buf); } @@ -2153,7 +2155,7 @@ conv = gtkconv->active_conv; - if (!purple_prefs_get_bool("/core/conversations/im/send_typing")) + if (!purple_prefs_get_bool("/purple/conversations/im/send_typing")) return; got_typing_keypress(gtkconv, (gtk_text_iter_is_start(position) && @@ -2172,7 +2174,7 @@ conv = gtkconv->active_conv; - if (!purple_prefs_get_bool("/core/conversations/im/send_typing")) + if (!purple_prefs_get_bool("/purple/conversations/im/send_typing")) return; im = PURPLE_CONV_IM(conv); @@ -2482,23 +2484,6 @@ fclose(fp); } -static const char * -custom_icon_pref_name(PidginConversation *gtkconv) -{ - PurpleConversation *conv; - PurpleAccount *account; - PurpleBuddy *buddy; - - conv = gtkconv->active_conv; - account = purple_conversation_get_account(conv); - buddy = purple_find_buddy(account, purple_conversation_get_name(conv)); - if (buddy) { - PurpleContact *contact = purple_buddy_get_contact(buddy); - return purple_blist_node_get_string((PurpleBlistNode*)contact, "custom_buddy_icon"); - } - return NULL; -} - static void custom_icon_sel_cb(const char *filename, gpointer data) { @@ -2538,14 +2523,14 @@ g_return_if_fail(conv != NULL); - ext = purple_buddy_icon_get_type(purple_conv_im_get_icon(PURPLE_CONV_IM(conv))); - if (ext == NULL) - ext = "icon"; + ext = purple_buddy_icon_get_extension(purple_conv_im_get_icon(PURPLE_CONV_IM(conv))); buf = g_strdup_printf("%s.%s", purple_normalize(conv->account, conv->name), ext); purple_request_file(gtkconv, _("Save Icon"), buf, TRUE, - G_CALLBACK(saveicon_writefile_cb), NULL, gtkconv); + G_CALLBACK(saveicon_writefile_cb), NULL, + conv->account, NULL, conv, + gtkconv); g_free(buf); } @@ -2576,7 +2561,8 @@ icon_menu(GtkObject *obj, GdkEventButton *e, PidginConversation *gtkconv) { static GtkWidget *menu = NULL; - const char *pref; + PurpleConversation *conv; + PurpleBuddy *buddy; if (e->button != 3 || e->type != GDK_BUTTON_PRESS) return FALSE; @@ -2610,11 +2596,18 @@ 0, 0, NULL); /* Is there a custom icon for this person? */ - pref = custom_icon_pref_name(gtkconv); - if (pref && *pref) { - pidgin_new_item_from_stock(menu, _("Remove Custom Icon"), NULL, - G_CALLBACK(remove_custom_icon_cb), gtkconv, - 0, 0, NULL); + conv = gtkconv->active_conv; + buddy = purple_find_buddy(purple_conversation_get_account(conv), + purple_conversation_get_name(conv)); + if (buddy) + { + PurpleContact *contact = purple_buddy_get_contact(buddy); + if (contact && purple_buddy_icons_has_custom_icon(contact)) + { + pidgin_new_item_from_stock(menu, _("Remove Custom Icon"), NULL, + G_CALLBACK(remove_custom_icon_cb), gtkconv, + 0, 0, NULL); + } } gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, e->button, e->time); @@ -6061,7 +6054,7 @@ else if (gtkconv->unseen_state == PIDGIN_UNSEEN_TEXT) { atk_object_set_description(accessibility_obj, _("Unread Messages")); - strncpy(style, "color=\"#a40000\" weight=\"bold\"", sizeof(style)); + strncpy(style, "color=\"#cc0000\" weight=\"bold\"", sizeof(style)); } else if (gtkconv->unseen_state == PIDGIN_UNSEEN_EVENT) { @@ -6177,12 +6170,14 @@ PidginConversation *gtkconv; PidginWindow *win; + PurpleBuddy *buddy; + GdkPixbufLoader *loader; GdkPixbufAnimation *anim; GError *err = NULL; - const char *custom = NULL; - const void *data = NULL; + PurpleStoredImage *custom_img = NULL; + gconstpointer data = NULL; size_t len; GdkPixbuf *buf; @@ -6239,17 +6234,18 @@ if (purple_conversation_get_gc(conv) == NULL) return; - custom = custom_icon_pref_name(gtkconv); - if (custom) { - /* There is a custom icon for this user */ - char *contents = NULL; - if (!g_file_get_contents(custom, &contents, &len, &err)) { - purple_debug_warning("custom icon", "could not load custom icon %s for %s\n", - custom, purple_conversation_get_name(conv)); - g_error_free(err); - err = NULL; - } else - data = contents; + buddy = purple_find_buddy(account, purple_conversation_get_name(conv)); + if (buddy) + { + PurpleContact *contact = purple_buddy_get_contact(buddy); + if (contact) { + custom_img = purple_buddy_icons_find_custom_icon(contact); + if (custom_img) { + /* There is a custom icon for this user */ + data = purple_imgstore_get_data(custom_img); + len = purple_imgstore_get_size(custom_img); + } + } } if (data == NULL) { @@ -6259,20 +6255,22 @@ return; data = purple_buddy_icon_get_data(icon, &len); - custom = NULL; + + if (data == NULL) + return; } loader = gdk_pixbuf_loader_new(); gdk_pixbuf_loader_write(loader, data, len, NULL); gdk_pixbuf_loader_close(loader, &err); + + purple_imgstore_unref(custom_img); + anim = gdk_pixbuf_loader_get_animation(loader); if (anim) g_object_ref(G_OBJECT(anim)); g_object_unref(loader); - if (custom) - g_free((void*)data); - if (!anim) return; gtkconv->u.im->anim = anim; @@ -6283,9 +6281,6 @@ g_error_free(err); } - if (!gtkconv->u.im->anim) - return; - if (gdk_pixbuf_animation_is_static_image(gtkconv->u.im->anim)) { gtkconv->u.im->iter = NULL; buf = gdk_pixbuf_animation_get_static_image(gtkconv->u.im->anim);
--- a/pidgin/gtkdebug.c Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/gtkdebug.c Fri Apr 27 05:20:10 2007 +0000 @@ -231,7 +231,9 @@ save_cb(GtkWidget *w, DebugWindow *win) { purple_request_file(win, _("Save Debug Log"), "purple-debug.log", TRUE, - G_CALLBACK(save_writefile_cb), NULL, win); + G_CALLBACK(save_writefile_cb), NULL, + NULL, NULL, NULL, + win); } static void @@ -264,7 +266,7 @@ { win->timestamps = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w)); - purple_prefs_set_bool("/core/debug/timestamps", win->timestamps); + purple_prefs_set_bool("/purple/debug/timestamps", win->timestamps); } static void @@ -786,9 +788,9 @@ win); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), - purple_prefs_get_bool("/core/debug/timestamps")); + purple_prefs_get_bool("/purple/debug/timestamps")); - purple_prefs_connect_callback(handle, "/core/debug/timestamps", + purple_prefs_connect_callback(handle, "/purple/debug/timestamps", timestamps_pref_cb, button); #ifdef HAVE_REGEX_H @@ -1052,7 +1054,7 @@ return; } - timestamps = purple_prefs_get_bool("/core/debug/timestamps"); + timestamps = purple_prefs_get_bool("/purple/debug/timestamps"); /* * For some reason we only print the timestamp if category is
--- a/pidgin/gtkdialogs.c Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/gtkdialogs.c Fri Apr 27 05:20:10 2007 +0000 @@ -107,7 +107,7 @@ static struct developer retired_developers[] = { {"Herman Bloggs", N_("win32 port"), "herman@bluedigits.com"}, {"Jim Duchek", N_("maintainer"), "jim@linuxpimps.com"}, - {"Rob Flynn", N_("maintainer"), "purple@robflynn.com"}, + {"Rob Flynn", N_("maintainer"), NULL}, {"Adam Fritzler", N_("libfaim maintainer"), NULL}, /* If "lazy bum" translates literally into a serious insult, use something else or omit it. */ {"Syd Logan", N_("hacker and designated driver [lazy bum]"), NULL}, @@ -264,7 +264,7 @@ } /* This function puts the version number onto the pixmap we use in the 'about' - * screen in Purple. */ + * screen in Pidgin. */ static void pidgin_logo_versionize(GdkPixbuf **original, GtkWidget *widget) { GdkPixmap *pixmap; @@ -719,6 +719,7 @@ fields, _("OK"), G_CALLBACK(pidgin_dialogs_im_cb), _("Cancel"), NULL, + NULL, NULL, NULL, NULL); } @@ -856,6 +857,7 @@ fields, _("OK"), G_CALLBACK(pidgin_dialogs_info_cb), _("Cancel"), NULL, + NULL, NULL, NULL, NULL); } @@ -947,6 +949,7 @@ fields, _("OK"), G_CALLBACK(pidgin_dialogs_log_cb), _("Cancel"), NULL, + NULL, NULL, NULL, NULL); } @@ -965,7 +968,9 @@ _("Enter an alias for this contact."), contact->alias, FALSE, FALSE, NULL, _("Alias"), G_CALLBACK(pidgin_dialogs_alias_contact_cb), - _("Cancel"), NULL, contact); + _("Cancel"), NULL, + NULL, purple_contact_get_alias(contact), NULL, + contact); } static void @@ -987,7 +992,9 @@ purple_request_input(NULL, _("Alias Buddy"), NULL, secondary, buddy->alias, FALSE, FALSE, NULL, _("Alias"), G_CALLBACK(pidgin_dialogs_alias_buddy_cb), - _("Cancel"), NULL, buddy); + _("Cancel"), NULL, + purple_buddy_get_account(buddy), purple_buddy_get_name(buddy), NULL, + buddy); g_free(secondary); } @@ -1007,7 +1014,9 @@ _("Enter an alias for this chat."), chat->alias, FALSE, FALSE, NULL, _("Alias"), G_CALLBACK(pidgin_dialogs_alias_chat_cb), - _("Cancel"), NULL, chat); + _("Cancel"), NULL, + chat->account, NULL, NULL, + chat); } static void @@ -1049,9 +1058,12 @@ "want to continue?", contact->totalsize - 1), buddy->name, contact->totalsize - 1); - purple_request_action(contact, NULL, _("Remove Contact"), text, 0, contact, 2, + purple_request_action(contact, NULL, _("Remove Contact"), text, 0, + NULL, purple_contact_get_alias(contact), NULL, + contact, 2, _("_Remove Contact"), G_CALLBACK(pidgin_dialogs_remove_contact_cb), - _("Cancel"), NULL); + _("Cancel"), + NULL); g_free(text); } @@ -1087,7 +1099,9 @@ ggp->parent = source; ggp->new_name = g_strdup(new_name); - purple_request_action(source, NULL, _("Merge Groups"), text, 0, ggp, 2, + purple_request_action(source, NULL, _("Merge Groups"), text, 0, + NULL, NULL, NULL, + ggp, 2, _("_Merge Groups"), G_CALLBACK(pidgin_dialogs_merge_groups_cb), _("Cancel"), G_CALLBACK(free_ggmo)); @@ -1141,7 +1155,9 @@ text = g_strdup_printf(_("You are about to remove the group %s and all its members from your buddy list. Do you want to continue?"), group->name); - purple_request_action(group, NULL, _("Remove Group"), text, 0, group, 2, + purple_request_action(group, NULL, _("Remove Group"), text, 0, + NULL, NULL, NULL, + group, 2, _("_Remove Group"), G_CALLBACK(pidgin_dialogs_remove_group_cb), _("Cancel"), NULL); @@ -1178,7 +1194,9 @@ text = g_strdup_printf(_("You are about to remove %s from your buddy list. Do you want to continue?"), buddy->name); - purple_request_action(buddy, NULL, _("Remove Buddy"), text, 0, buddy, 2, + purple_request_action(buddy, NULL, _("Remove Buddy"), text, 0, + purple_buddy_get_account(buddy), purple_buddy_get_name(buddy), NULL, + buddy, 2, _("_Remove Buddy"), G_CALLBACK(pidgin_dialogs_remove_buddy_cb), _("Cancel"), NULL); @@ -1203,7 +1221,9 @@ text = g_strdup_printf(_("You are about to remove the chat %s from your buddy list. Do you want to continue?"), name ? name : ""); - purple_request_action(chat, NULL, _("Remove Chat"), text, 0, chat, 2, + purple_request_action(chat, NULL, _("Remove Chat"), text, 0, + chat->account, NULL, NULL, + chat, 2, _("_Remove Chat"), G_CALLBACK(pidgin_dialogs_remove_chat_cb), _("Cancel"), NULL);
--- a/pidgin/gtkimhtmltoolbar.c Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/gtkimhtmltoolbar.c Fri Apr 27 05:20:10 2007 +0000 @@ -417,6 +417,7 @@ fields, _("_Insert"), G_CALLBACK(do_insert_link_cb), _("Cancel"), G_CALLBACK(cancel_link_cb), + NULL, NULL, NULL, toolbar); g_free(msg); g_free(desc); @@ -480,8 +481,7 @@ name = strrchr(filename, G_DIR_SEPARATOR) + 1; - id = purple_imgstore_add(filedata, size, name); - g_free(filedata); + id = purple_imgstore_add_with_id(filedata, size, name); if (id == 0) { buf = g_strdup_printf(_("Failed to store image: %s\n"), filename); @@ -499,7 +499,7 @@ gtk_text_buffer_get_iter_at_mark(gtk_text_view_get_buffer(GTK_TEXT_VIEW(toolbar->imhtml)), &iter, ins); gtk_imhtml_insert_image_at_iter(GTK_IMHTML(toolbar->imhtml), id, &iter); - purple_imgstore_unref(id); + purple_imgstore_unref_by_id(id); }
--- a/pidgin/gtklog.c Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/gtklog.c Fri Apr 27 05:20:10 2007 +0000 @@ -295,8 +295,11 @@ data2[0] = lv->treestore; data2[1] = data[3]; /* iter */ data2[2] = log; - purple_request_action(lv, NULL, "Delete Log?", tmp, - 0, data2, 2, _("Delete"), delete_log_cb, _("Cancel"), delete_log_cleanup_cb); + purple_request_action(lv, NULL, "Delete Log?", tmp, 0, + NULL, NULL, NULL, + data2, 2, + _("Delete"), delete_log_cb, + _("Cancel"), delete_log_cleanup_cb); g_free(tmp); } @@ -517,14 +520,14 @@ const char *log_preferences = NULL; if (ht == NULL) { - if (!purple_prefs_get_bool("/core/logging/log_system")) + if (!purple_prefs_get_bool("/purple/logging/log_system")) log_preferences = _("System events will only be logged if the \"Log all status changes to system log\" preference is enabled."); } else { if (ht->type == PURPLE_LOG_IM) { - if (!purple_prefs_get_bool("/core/logging/log_ims")) + if (!purple_prefs_get_bool("/purple/logging/log_ims")) log_preferences = _("Instant messages will only be logged if the \"Log all instant messages\" preference is enabled."); } else if (ht->type == PURPLE_LOG_CHAT) { - if (!purple_prefs_get_bool("/core/logging/log_chats")) + if (!purple_prefs_get_bool("/purple/logging/log_chats")) log_preferences = _("Chats will only be logged if the \"Log all chats\" preference is enabled."); } }
--- a/pidgin/gtkmain.c Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/gtkmain.c Fri Apr 27 05:20:10 2007 +0000 @@ -145,7 +145,7 @@ static void sighandler(int sig); /** - * Reap all our dead children. Sometimes Purple forks off a separate + * Reap all our dead children. Sometimes libpurple forks off a separate * process to do some stuff. When that process exits we are * informed about it so that we can call waitpid() and let it * stop being a zombie. @@ -160,7 +160,7 @@ * it continues with the initialization process. This means that * we have a race condition where GStreamer is waitpid()ing for its * child to die and we're catching the SIGCHLD signal. If GStreamer - * is awarded the zombied process then everything is ok. But if Purple + * is awarded the zombied process then everything is ok. But if libpurple * reaps the zombie process then the GStreamer initialization sequence * fails. * @@ -240,11 +240,15 @@ GdkPixbuf *icon = NULL; char *icon_path; int i; - const char *icon_sizes[] = { - "16", - "24", - "32", - "48" + struct { + const char *dir; + const char *filename; + } icon_sizes[] = { + {"16x16", "pidgin.png"}, + {"24x24", "pidgin.png"}, + {"32x32", "pidgin.png"}, + {"48x48", "pidgin.png"}, + {"scalable", "pidgin.svg"} }; #endif @@ -256,7 +260,7 @@ #ifndef _WIN32 /* use the nice PNG icon for all the windows */ for(i=0; i<G_N_ELEMENTS(icon_sizes); i++) { - icon_path = g_build_filename(DATADIR, "pixmaps", "pidgin", "icons", icon_sizes[i], "pidgin.png", NULL); + icon_path = g_build_filename(DATADIR, "icons", "hicolor", icon_sizes[i].dir, "apps", icon_sizes[i].filename, NULL); icon = gdk_pixbuf_new_from_file(icon_path, NULL); g_free(icon_path); if (icon) { @@ -446,6 +450,7 @@ int opt; gboolean gui_check; gboolean debug_enabled; + gboolean migration_failed = FALSE; struct option long_options[] = { {"config", required_argument, NULL, 'c'}, @@ -639,6 +644,15 @@ purple_debug_set_enabled(debug_enabled); + /* If we're using a custom configuration directory, we + * do NOT want to migrate, or weird things will happen. */ + if (opt_config_dir_arg == NULL) + { + if (!purple_core_migrate()) + { + migration_failed = TRUE; + } + } search_path = g_build_filename(purple_user_dir(), "gtkrc-2.0", NULL); gtk_rc_add_default_file(search_path); @@ -663,6 +677,37 @@ winpidgin_init(hint); #endif + if (migration_failed) + { + char *old = g_strconcat(purple_home_dir(), + G_DIR_SEPARATOR_S ".gaim", NULL); + const char *text = _( + "%s encountered errors migrating your settings " + "from %s to %s. Please investigate and complete the " + "migration by hand."); + GtkWidget *dialog; + + dialog = gtk_message_dialog_new(NULL, + 0, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_CLOSE, + text, PIDGIN_NAME, + old, purple_user_dir()); + g_free(old); + + g_signal_connect_swapped(dialog, "response", + G_CALLBACK(gtk_main_quit), NULL); + + gtk_widget_show_all(dialog); + + gtk_main(); + +#ifdef HAVE_SIGNAL_H + g_free(segfault_message); +#endif + return 0; + } + purple_core_set_ui_ops(pidgin_core_get_ui_ops()); purple_eventloop_set_ui_ops(pidgin_eventloop_get_ui_ops()); @@ -767,7 +812,7 @@ else { /* Everything is good to go--sign on already */ - if (!purple_prefs_get_bool("/core/savedstatus/startup_current_status")) + if (!purple_prefs_get_bool("/purple/savedstatus/startup_current_status")) purple_savedstatus_activate(purple_savedstatus_get_startup()); purple_accounts_restore_current_statuses(); }
--- a/pidgin/gtkplugin.c Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/gtkplugin.c Fri Apr 27 05:20:10 2007 +0000 @@ -281,7 +281,9 @@ purple_request_action(plugin_dialog, NULL, _("Multiple plugins will be unloaded."), - tmp->str, 0, cb_data, 2, + tmp->str, 0, + NULL, NULL, NULL, + cb_data, 2, _("Unload Plugins"), G_CALLBACK(plugin_unload_confirm_cb), _("Cancel"), g_free); g_string_free(tmp, TRUE);
--- a/pidgin/gtkpounce.c Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/gtkpounce.c Fri Apr 27 05:20:10 2007 +0000 @@ -153,7 +153,9 @@ name = gtk_entry_get_text(GTK_ENTRY(entry)); purple_request_file(entry, _("Select a file"), name, FALSE, - G_CALLBACK(pounce_update_entry_fields), NULL, entry); + G_CALLBACK(pounce_update_entry_fields), NULL, + NULL, NULL, NULL, + entry); g_signal_connect_swapped(G_OBJECT(entry), "destroy", G_CALLBACK(purple_request_close_with_handle), entry); } @@ -1093,7 +1095,9 @@ pouncee = purple_pounce_get_pouncee(pounce); buf = g_strdup_printf(_("Are you sure you want to delete the pounce on %s for %s?"), pouncee, pouncer); - purple_request_action(pounce, NULL, buf, NULL, 0, pounce, 2, + purple_request_action(pounce, NULL, buf, NULL, 0, + account, pouncee, NULL, + pounce, 2, _("Delete"), pounces_manager_delete_confirm_cb, _("Cancel"), NULL); g_free(buf);
--- a/pidgin/gtkprefs.c Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/gtkprefs.c Fri Apr 27 05:20:10 2007 +0000 @@ -910,7 +910,7 @@ G_CALLBACK(pidgin_toggle_sensitive), iconpref2); pidgin_prefs_checkbox(_("_Notify buddies that you are typing to them"), - "/core/conversations/im/send_typing", vbox); + "/purple/conversations/im/send_typing", vbox); #ifdef USE_GTKSPELL pidgin_prefs_checkbox(_("Highlight _misspelled words"), PIDGIN_PREFS_ROOT "/conversations/spellcheck", vbox); @@ -991,13 +991,13 @@ static void proxy_print_option(GtkEntry *entry, int entrynum) { if (entrynum == PROXYHOST) - purple_prefs_set_string("/core/proxy/host", gtk_entry_get_text(entry)); + purple_prefs_set_string("/purple/proxy/host", gtk_entry_get_text(entry)); else if (entrynum == PROXYPORT) - purple_prefs_set_int("/core/proxy/port", atoi(gtk_entry_get_text(entry))); + purple_prefs_set_int("/purple/proxy/port", atoi(gtk_entry_get_text(entry))); else if (entrynum == PROXYUSER) - purple_prefs_set_string("/core/proxy/username", gtk_entry_get_text(entry)); + purple_prefs_set_string("/purple/proxy/username", gtk_entry_get_text(entry)); else if (entrynum == PROXYPASS) - purple_prefs_set_string("/core/proxy/password", gtk_entry_get_text(entry)); + purple_prefs_set_string("/purple/proxy/password", gtk_entry_get_text(entry)); } static GtkWidget * @@ -1015,7 +1015,7 @@ vbox = pidgin_make_frame (ret, _("IP Address")); sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); pidgin_prefs_labeled_entry(vbox,_("ST_UN server:"), - "/core/network/stun_server", sg); + "/purple/network/stun_server", sg); hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); gtk_container_add(GTK_CONTAINER(vbox), hbox); @@ -1031,7 +1031,7 @@ gtk_container_add(GTK_CONTAINER(hbox), label); auto_ip_checkbox = pidgin_prefs_checkbox(_("_Autodetect IP address"), - "/core/network/auto_ip", vbox); + "/purple/network/auto_ip", vbox); table = gtk_table_new(2, 2, FALSE); gtk_container_set_border_width(GTK_CONTAINER(table), 0); @@ -1061,7 +1061,7 @@ pidgin_set_accessible_label (entry, label); - if (purple_prefs_get_bool("/core/network/auto_ip")) { + if (purple_prefs_get_bool("/purple/network/auto_ip")) { gtk_widget_set_sensitive(GTK_WIDGET(table), FALSE); } @@ -1072,18 +1072,18 @@ sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); ports_checkbox = pidgin_prefs_checkbox(_("_Manually specify range of ports to listen on"), - "/core/network/ports_range_use", vbox); + "/purple/network/ports_range_use", vbox); spin_button = pidgin_prefs_labeled_spin_button(vbox, _("_Start port:"), - "/core/network/ports_range_start", 0, 65535, sg); - if (!purple_prefs_get_bool("/core/network/ports_range_use")) + "/purple/network/ports_range_start", 0, 65535, sg); + if (!purple_prefs_get_bool("/purple/network/ports_range_use")) gtk_widget_set_sensitive(GTK_WIDGET(spin_button), FALSE); g_signal_connect(G_OBJECT(ports_checkbox), "clicked", G_CALLBACK(pidgin_toggle_sensitive), spin_button); spin_button = pidgin_prefs_labeled_spin_button(vbox, _("_End port:"), - "/core/network/ports_range_end", 0, 65535, sg); - if (!purple_prefs_get_bool("/core/network/ports_range_use")) + "/purple/network/ports_range_end", 0, 65535, sg); + if (!purple_prefs_get_bool("/purple/network/ports_range_use")) gtk_widget_set_sensitive(GTK_WIDGET(spin_button), FALSE); g_signal_connect(G_OBJECT(ports_checkbox), "clicked", G_CALLBACK(pidgin_toggle_sensitive), spin_button); @@ -1092,7 +1092,7 @@ vbox = pidgin_make_frame(ret, _("Proxy Server")); prefs_proxy_frame = gtk_vbox_new(FALSE, 0); pidgin_prefs_dropdown(vbox, _("Proxy _type:"), PURPLE_PREF_STRING, - "/core/proxy/type", + "/purple/proxy/type", _("No proxy"), "none", "SOCKS 4", "socks4", "SOCKS 5", "socks5", @@ -1102,7 +1102,7 @@ gtk_box_pack_start(GTK_BOX(vbox), prefs_proxy_frame, 0, 0, 0); proxy_info = purple_global_proxy_get_info(); - purple_prefs_connect_callback(prefs, "/core/proxy/type", + purple_prefs_connect_callback(prefs, "/purple/proxy/type", proxy_changed_cb, prefs_proxy_frame); table = gtk_table_new(4, 2, FALSE); @@ -1356,16 +1356,16 @@ names = purple_log_logger_get_options(); pidgin_prefs_dropdown_from_list(vbox, _("Log _format:"), PURPLE_PREF_STRING, - "/core/logging/format", names); + "/purple/logging/format", names); g_list_free(names); pidgin_prefs_checkbox(_("Log all _instant messages"), - "/core/logging/log_ims", vbox); + "/purple/logging/log_ims", vbox); pidgin_prefs_checkbox(_("Log all c_hats"), - "/core/logging/log_chats", vbox); + "/purple/logging/log_chats", vbox); pidgin_prefs_checkbox(_("Log all _status changes to system log"), - "/core/logging/log_system", vbox); + "/purple/logging/log_system", vbox); gtk_widget_show_all(ret); @@ -1511,7 +1511,9 @@ filename = NULL; purple_request_file(prefs, _("Sound Selection"), filename, FALSE, - G_CALLBACK(sound_chosen_cb), NULL, GINT_TO_POINTER(sound_row_sel)); + G_CALLBACK(sound_chosen_cb), NULL, + NULL, NULL, NULL, + GINT_TO_POINTER(sound_row_sel)); } #ifdef USE_GSTREAMER @@ -1640,7 +1642,7 @@ pidgin_prefs_checkbox(_("Sounds when conversation has _focus"), PIDGIN_PREFS_ROOT "/sound/conv_focus", vbox); pidgin_prefs_dropdown(vbox, _("Enable sounds:"), - PURPLE_PREF_INT, "/core/sound/while_status", + PURPLE_PREF_INT, "/purple/sound/while_status", _("Only when available"), 1, _("Only when not available"), 2, _("Always"), 3, @@ -1776,13 +1778,13 @@ static void set_idle_away(PurpleSavedStatus *status) { - purple_prefs_set_int("/core/savedstatus/idleaway", purple_savedstatus_get_creation_time(status)); + purple_prefs_set_int("/purple/savedstatus/idleaway", purple_savedstatus_get_creation_time(status)); } static void set_startupstatus(PurpleSavedStatus *status) { - purple_prefs_set_int("/core/savedstatus/startup", purple_savedstatus_get_creation_time(status)); + purple_prefs_set_int("/purple/savedstatus/startup", purple_savedstatus_get_creation_time(status)); } static GtkWidget * @@ -1807,7 +1809,7 @@ vbox = pidgin_make_frame(ret, _("Idle")); dd = pidgin_prefs_dropdown(vbox, _("_Report idle time:"), - PURPLE_PREF_STRING, "/core/away/idle_reporting", + PURPLE_PREF_STRING, "/purple/away/idle_reporting", _("Never"), "none", _("From last sent message"), "purple", #if defined(USE_SCREENSAVER) || defined(HAVE_IOKIT) @@ -1821,7 +1823,7 @@ vbox = pidgin_make_frame(ret, _("Away")); dd = pidgin_prefs_dropdown(vbox, _("_Auto-reply:"), - PURPLE_PREF_STRING, "/core/away/auto_reply", + PURPLE_PREF_STRING, "/purple/away/auto_reply", _("Never"), "never", _("When away"), "away", _("When both away and idle"), "awayidle", @@ -1833,10 +1835,10 @@ vbox = pidgin_make_frame(ret, _("Auto-away")); button = pidgin_prefs_checkbox(_("Change status when _idle"), - "/core/away/away_when_idle", vbox); + "/purple/away/away_when_idle", vbox); select = pidgin_prefs_labeled_spin_button(vbox, - _("_Minutes before changing status:"), "/core/away/mins_before_away", + _("_Minutes before changing status:"), "/purple/away/mins_before_away", 1, 24 * 60, sg); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(pidgin_toggle_sensitive), select); @@ -1858,7 +1860,7 @@ G_CALLBACK(pidgin_toggle_sensitive), menu); gtk_label_set_mnemonic_widget(GTK_LABEL(label), menu); - if (!purple_prefs_get_bool("/core/away/away_when_idle")) { + if (!purple_prefs_get_bool("/purple/away/away_when_idle")) { gtk_widget_set_sensitive(GTK_WIDGET(menu), FALSE); gtk_widget_set_sensitive(GTK_WIDGET(select), FALSE); gtk_widget_set_sensitive(GTK_WIDGET(label), FALSE); @@ -1868,7 +1870,7 @@ vbox = pidgin_make_frame(ret, _("Status at Startup")); button = pidgin_prefs_checkbox(_("Use status from last _exit at startup"), - "/core/savedstatus/startup_current_status", vbox); + "/purple/savedstatus/startup_current_status", vbox); hbox = gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(vbox), hbox); @@ -1887,7 +1889,7 @@ G_CALLBACK(pidgin_toggle_sensitive), menu); gtk_label_set_mnemonic_widget(GTK_LABEL(label), menu); - if (purple_prefs_get_bool("/core/savedstatus/startup_current_status")) { + if (purple_prefs_get_bool("/purple/savedstatus/startup_current_status")) { gtk_widget_set_sensitive(GTK_WIDGET(menu), FALSE); gtk_widget_set_sensitive(GTK_WIDGET(label), FALSE); } @@ -2061,19 +2063,19 @@ void pidgin_prefs_update_old() { /* Rename some old prefs */ - purple_prefs_rename(PIDGIN_PREFS_ROOT "/logging/log_ims", "/core/logging/log_ims"); - purple_prefs_rename(PIDGIN_PREFS_ROOT "/logging/log_chats", "/core/logging/log_chats"); - purple_prefs_rename("/core/conversations/placement", + purple_prefs_rename(PIDGIN_PREFS_ROOT "/logging/log_ims", "/purple/logging/log_ims"); + purple_prefs_rename(PIDGIN_PREFS_ROOT "/logging/log_chats", "/purple/logging/log_chats"); + purple_prefs_rename("/purple/conversations/placement", PIDGIN_PREFS_ROOT "/conversations/placement"); - purple_prefs_rename(PIDGIN_PREFS_ROOT "/debug/timestamps", "/core/debug/timestamps"); + purple_prefs_rename(PIDGIN_PREFS_ROOT "/debug/timestamps", "/purple/debug/timestamps"); purple_prefs_rename(PIDGIN_PREFS_ROOT "/conversations/im/raise_on_events", "/plugins/gtk/X11/notify/method_raise"); purple_prefs_rename_boolean_toggle(PIDGIN_PREFS_ROOT "/conversations/ignore_colors", PIDGIN_PREFS_ROOT "/conversations/show_incoming_formatting"); /* this string pref moved into the core, try to be friendly */ - purple_prefs_rename(PIDGIN_PREFS_ROOT "/idle/reporting_method", "/core/away/idle_reporting"); + purple_prefs_rename(PIDGIN_PREFS_ROOT "/idle/reporting_method", "/purple/away/idle_reporting"); /* Remove some no-longer-used prefs */ purple_prefs_remove(PIDGIN_PREFS_ROOT "/blist/auto_expand_contacts"); @@ -2123,4 +2125,5 @@ purple_prefs_remove(PIDGIN_PREFS_ROOT "/away/queue_messages"); purple_prefs_remove(PIDGIN_PREFS_ROOT "/away"); purple_prefs_remove("/plugins/gtk/docklet/queue_messages"); + purple_prefs_rename("/gaim/gtk", "/pidgin"); }
--- a/pidgin/gtkprivacy.c Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/gtkprivacy.c Fri Apr 27 05:20:10 2007 +0000 @@ -564,6 +564,7 @@ NULL, FALSE, FALSE, NULL, _("_Permit"), G_CALLBACK(add_permit_block_cb), _("Cancel"), G_CALLBACK(destroy_request_data), + account, name, NULL, data); } else { @@ -574,7 +575,9 @@ purple_request_action(account, _("Permit User"), primary, secondary, - 0, data, 2, + 0, + account, name, NULL, + data, 2, _("_Permit"), G_CALLBACK(confirm_permit_block_cb), _("Cancel"), G_CALLBACK(destroy_request_data)); @@ -602,6 +605,7 @@ NULL, FALSE, FALSE, NULL, _("_Block"), G_CALLBACK(add_permit_block_cb), _("Cancel"), G_CALLBACK(destroy_request_data), + account, name, NULL, data); } else { @@ -610,7 +614,9 @@ g_strdup_printf(_("Are you sure you want to block %s?"), name); purple_request_action(account, _("Block User"), primary, secondary, - 0, data, 2, + 0, + account, name, NULL, + data, 2, _("_Block"), G_CALLBACK(confirm_permit_block_cb), _("Cancel"), G_CALLBACK(destroy_request_data));
--- a/pidgin/gtkrequest.c Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/gtkrequest.c Fri Apr 27 05:20:10 2007 +0000 @@ -285,6 +285,7 @@ gboolean multiline, gboolean masked, gchar *hint, const char *ok_text, GCallback ok_cb, const char *cancel_text, GCallback cancel_cb, + PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data) { PidginRequestData *data; @@ -443,6 +444,7 @@ const char *secondary, unsigned int default_value, const char *ok_text, GCallback ok_cb, const char *cancel_text, GCallback cancel_cb, + PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data, va_list args) { PidginRequestData *data; @@ -544,6 +546,7 @@ static void * pidgin_request_action(const char *title, const char *primary, const char *secondary, unsigned int default_action, + PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data, size_t action_count, va_list actions) { PidginRequestData *data; @@ -1025,6 +1028,7 @@ const char *secondary, PurpleRequestFields *fields, const char *ok_text, GCallback ok_cb, const char *cancel_text, GCallback cancel_cb, + PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data) { PidginRequestData *data; @@ -1467,7 +1471,9 @@ if ((data->u.file.savedialog == TRUE) && (g_file_test(data->u.file.name, G_FILE_TEST_EXISTS))) { purple_request_action(data, NULL, _("That file already exists"), - _("Would you like to overwrite it?"), 0, data, 2, + _("Would you like to overwrite it?"), 0, + NULL, NULL, NULL, + data, 2, _("Overwrite"), G_CALLBACK(file_yes_no_cb), _("Choose New Name"), G_CALLBACK(file_yes_no_cb)); } else @@ -1491,6 +1497,7 @@ pidgin_request_file(const char *title, const char *filename, gboolean savedialog, GCallback ok_cb, GCallback cancel_cb, + PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data) { PidginRequestData *data; @@ -1588,6 +1595,7 @@ static void * pidgin_request_folder(const char *title, const char *dirname, GCallback ok_cb, GCallback cancel_cb, + PurpleAccount *account, const char *who, PurpleConversation *conv, void *user_data) { PidginRequestData *data;
--- a/pidgin/gtksavedstatuses.c Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/gtksavedstatuses.c Fri Apr 27 05:20:10 2007 +0000 @@ -330,8 +330,9 @@ else title = g_strdup(_("Are you sure you want to delete the selected saved statuses?")); - purple_request_action(dialog, NULL, title, - NULL, 0, sel_titles, 2, + purple_request_action(dialog, NULL, title, NULL, 0, + NULL, NULL, NULL, + sel_titles, 2, _("Delete"), status_window_delete_confirm_cb, _("Cancel"), status_window_delete_cancel_cb); @@ -1585,13 +1586,23 @@ /** The text displayed on the status box. This column is visible. */ SS_MENU_TEXT_COLUMN, - /* + /** * This value depends on SS_MENU_TYPE_COLUMN. For _SAVEDSTATUS types, * this is the creation time. For _PRIMITIVE types, * this is the PurpleStatusPrimitive. */ SS_MENU_DATA_COLUMN, + /** + * This is the emblem to use for this status + */ + SS_MENU_EMBLEM_COLUMN, + + /** + * And whether or not that emblem is visible + */ + SS_MENU_EMBLEM_VISIBLE_COLUMN, + SS_MENU_NUM_COLUMNS }; @@ -1646,6 +1657,7 @@ SS_MENU_ICON_COLUMN, pixbuf, SS_MENU_TEXT_COLUMN, purple_primitive_get_name_from_type(primitive), SS_MENU_DATA_COLUMN, GINT_TO_POINTER(primitive), + SS_MENU_EMBLEM_VISIBLE_COLUMN, FALSE, -1); if (pixbuf != NULL) g_object_unref(pixbuf); @@ -1669,8 +1681,10 @@ GtkTreeIter iter; GtkCellRenderer *text_rend; GtkCellRenderer *icon_rend; + GtkCellRenderer *emblem_rend; - model = gtk_list_store_new(SS_MENU_NUM_COLUMNS, G_TYPE_INT, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_POINTER); + model = gtk_list_store_new(SS_MENU_NUM_COLUMNS, G_TYPE_INT, GDK_TYPE_PIXBUF, + G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_STRING, G_TYPE_BOOLEAN); combobox = gtk_combo_box_new(); @@ -1697,35 +1711,16 @@ PurpleSavedStatus *status = (PurpleSavedStatus *) cur->data; if (!purple_savedstatus_is_transient(status)) { - /* Get an appropriate status icon */ pixbuf = pidgin_create_status_icon(purple_savedstatus_get_type(status), combobox, PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL); - - /* Overlay a disk in the bottom left corner */ - emblem = gtk_widget_render_icon(GTK_WIDGET(combobox), - GTK_STOCK_SAVE, GTK_ICON_SIZE_MENU, "PidginStatusMenu"); - if (emblem != NULL) - { - /* copy the pixbuf so we're not modifying the stock image data when we overlay the disk */ - GdkPixbuf *pixbuf2 = gdk_pixbuf_copy(pixbuf); - int width = gdk_pixbuf_get_width(pixbuf) / 2; - int height = gdk_pixbuf_get_height(pixbuf) / 2; - - g_object_unref(G_OBJECT(pixbuf)); - pixbuf = pixbuf2; - - gdk_pixbuf_composite(emblem, pixbuf, 0, height, - width, height, 0, height, - 0.5, 0.5, GDK_INTERP_BILINEAR, 255); - g_object_unref(G_OBJECT(emblem)); - } - gtk_list_store_append(model, &iter); gtk_list_store_set(model, &iter, SS_MENU_TYPE_COLUMN, SS_MENU_ENTRY_TYPE_SAVEDSTATUS, SS_MENU_ICON_COLUMN, pixbuf, SS_MENU_TEXT_COLUMN, purple_savedstatus_get_title(status), SS_MENU_DATA_COLUMN, GINT_TO_POINTER(purple_savedstatus_get_creation_time(status)), + SS_MENU_EMBLEM_COLUMN, GTK_STOCK_SAVE, + SS_MENU_EMBLEM_VISIBLE_COLUMN, TRUE, -1); g_object_unref(G_OBJECT(pixbuf)); @@ -1740,11 +1735,14 @@ text_rend = gtk_cell_renderer_text_new(); icon_rend = gtk_cell_renderer_pixbuf_new(); + emblem_rend = gtk_cell_renderer_pixbuf_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combobox), icon_rend, FALSE); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combobox), text_rend, TRUE); + gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combobox), emblem_rend, FALSE); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combobox), icon_rend, "pixbuf", SS_MENU_ICON_COLUMN, NULL); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combobox), text_rend, "markup", SS_MENU_TEXT_COLUMN, NULL); - + gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combobox), emblem_rend, + "stock-id", SS_MENU_EMBLEM_COLUMN, "visible", SS_MENU_EMBLEM_VISIBLE_COLUMN, NULL); gtk_combo_box_set_active(GTK_COMBO_BOX(combobox), index); g_signal_connect(G_OBJECT(combobox), "changed", G_CALLBACK(status_menu_cb), callback);
--- a/pidgin/gtkstatusbox.c Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/gtkstatusbox.c Fri Apr 27 05:20:10 2007 +0000 @@ -42,8 +42,10 @@ #include <gdk/gdkkeysyms.h> #include "account.h" +#include "buddyicon.h" #include "core.h" #include "internal.h" +#include "imgstore.h" #include "network.h" #include "savedstatuses.h" #include "status.h" @@ -383,13 +385,26 @@ if (status_box->account && !purple_account_get_bool(status_box->account, "use-global-buddyicon", TRUE)) { - char *string = purple_buddy_icons_get_full_path(purple_account_get_buddy_icon(status_box->account)); - pidgin_status_box_set_buddy_icon(status_box, string); - g_free(string); + PurpleStoredImage *img = purple_buddy_icons_find_account_icon(status_box->account); + pidgin_status_box_set_buddy_icon(status_box, img); + purple_imgstore_unref(img); } else { - pidgin_status_box_set_buddy_icon(status_box, purple_prefs_get_path(PIDGIN_PREFS_ROOT "/accounts/buddyicon")); + const char *filename = purple_prefs_get_path(PIDGIN_PREFS_ROOT "/accounts/buddyicon"); + PurpleStoredImage *img = NULL; + + if (filename != NULL) + { + gchar *contents; + gsize size; + if (g_file_get_contents(filename, &contents, &size, NULL)) + { + img = purple_imgstore_add(contents, size, filename); + } + } + + pidgin_status_box_set_buddy_icon(status_box, img); } status_box->hand_cursor = gdk_cursor_new (GDK_HAND2); @@ -422,6 +437,8 @@ gdk_cursor_unref(statusbox->hand_cursor); gdk_cursor_unref(statusbox->arrow_cursor); + purple_imgstore_unref(statusbox->buddy_icon_img); + g_object_unref(G_OBJECT(statusbox->buddy_icon)); g_object_unref(G_OBJECT(statusbox->buddy_icon_hover)); @@ -431,12 +448,10 @@ if (statusbox->icon_box_menu) gtk_widget_destroy(statusbox->icon_box_menu); - g_free(statusbox->buddy_icon_path); - statusbox->icon = NULL; statusbox->icon_box = NULL; statusbox->icon_box_menu = NULL; - statusbox->buddy_icon_path = NULL; + statusbox->buddy_icon_img = NULL; statusbox->buddy_icon = NULL; statusbox->buddy_icon_hover = NULL; statusbox->hand_cursor = NULL; @@ -489,14 +504,13 @@ gdk_cursor_unref(statusbox->hand_cursor); gdk_cursor_unref(statusbox->arrow_cursor); + purple_imgstore_unref(statusbox->buddy_icon_img); g_object_unref(G_OBJECT(statusbox->buddy_icon)); g_object_unref(G_OBJECT(statusbox->buddy_icon_hover)); if (statusbox->buddy_icon_sel) gtk_widget_destroy(statusbox->buddy_icon_sel); - g_free(statusbox->buddy_icon_path); - G_OBJECT_CLASS(parent_class)->finalize(obj); } @@ -680,36 +694,6 @@ } pixbuf = pidgin_status_box_get_pixbuf(status_box, prim); -#if 0 - if (account_status) - pixbuf = pidgin_create_prpl_icon_with_status(acct, - purple_status_get_type(purple_account_get_active_status(acct)), - 0.5); - else - pixbuf = pidgin_create_purple_icon_with_status( - purple_savedstatus_get_type(saved_status), - 0.5); - - if (!purple_savedstatus_is_transient(saved_status)) - { - GdkPixbuf *emblem; - - /* Overlay a disk in the bottom left corner */ - emblem = gtk_widget_render_icon(GTK_WIDGET(status_box->vbox), - GTK_STOCK_SAVE, icon_size, "PidginStatusBox"); - if (emblem != NULL) - { - int width, height; - width = gdk_pixbuf_get_width(pixbuf) / 2; - height = gdk_pixbuf_get_height(pixbuf) / 2; - gdk_pixbuf_composite(emblem, pixbuf, 0, height, - width, height, 0, height, - 0.5, 0.5, GDK_INTERP_BILINEAR, 255); - g_object_unref(G_OBJECT(emblem)); - } - } -#endif - } if (status_box->account != NULL) { @@ -899,7 +883,6 @@ { GList *list, *cur; GdkPixbuf *pixbuf; - PidginStatusBoxItemType type = PIDGIN_STATUS_BOX_TYPE_POPULAR; list = purple_savedstatuses_get_popular(6); if (list == NULL) @@ -914,6 +897,7 @@ const gchar *message; gchar *stripped = NULL; PurpleStatusPrimitive prim; + PidginStatusBoxItemType type = PIDGIN_STATUS_BOX_TYPE_POPULAR; /* Get an appropriate status icon */ prim = purple_savedstatus_get_type(saved); @@ -1432,20 +1416,21 @@ static void buddy_icon_set_cb(const char *filename, PidginStatusBox *box) { + PurpleStoredImage *img = NULL; if (box->account) { PurplePlugin *plug = purple_find_prpl(purple_account_get_protocol_id(box->account)); if (plug) { PurplePluginProtocolInfo *prplinfo = PURPLE_PLUGIN_PROTOCOL_INFO(plug); if (prplinfo && prplinfo->icon_spec.format) { - char *icon = NULL; + gpointer data = NULL; + size_t len = 0; if (filename) - icon = pidgin_convert_buddy_icon(plug, filename); + data = pidgin_convert_buddy_icon(plug, filename, &len); + img = purple_buddy_icons_set_account_icon(box->account, data, len); + purple_account_set_buddy_icon_path(box->account, filename); + purple_account_set_bool(box->account, "use-global-buddyicon", (filename != NULL)); - purple_account_set_ui_string(box->account, PIDGIN_UI, "non-global-buddyicon-cached-path", icon); - purple_account_set_buddy_icon_path(box->account, filename); - purple_account_set_buddy_icon(box->account, icon); - g_free(icon); } } } else { @@ -1458,17 +1443,20 @@ if (prplinfo != NULL && purple_account_get_bool(account, "use-global-buddyicon", TRUE) && prplinfo->icon_spec.format) { - char *icon = NULL; + gpointer data = NULL; + size_t len = 0; if (filename) - icon = pidgin_convert_buddy_icon(plug, filename); - purple_account_set_buddy_icon_path(account, filename); - purple_account_set_buddy_icon(account, icon); - g_free(icon); + data = pidgin_convert_buddy_icon(plug, filename, &len); + img = purple_buddy_icons_set_account_icon(box->account, data, len); + purple_account_set_buddy_icon_path(box->account, filename); + + purple_account_set_bool(box->account, "use-global-buddyicon", (filename != NULL)); } } } } - pidgin_status_box_set_buddy_icon(box, filename); + + pidgin_status_box_set_buddy_icon(box, img); } static void @@ -2040,10 +2028,14 @@ status_box->buddy_icon = NULL; status_box->buddy_icon_hover = NULL; - if ((status_box->buddy_icon_path != NULL) && - (*status_box->buddy_icon_path != '\0')) - status_box->buddy_icon = gdk_pixbuf_new_from_file_at_scale(status_box->buddy_icon_path, - status_box->icon_size, status_box->icon_size, FALSE, NULL); + if (status_box->buddy_icon_img != NULL) + { + GdkPixbufLoader *loader = gdk_pixbuf_loader_new(); + gdk_pixbuf_loader_write(loader, purple_imgstore_get_data(status_box->buddy_icon_img), + purple_imgstore_get_size(status_box->buddy_icon_img), NULL); + gdk_pixbuf_loader_close(loader, NULL); + status_box->buddy_icon = gdk_pixbuf_loader_get_pixbuf(loader); + } if (status_box->buddy_icon == NULL) { @@ -2064,20 +2056,14 @@ } void -pidgin_status_box_set_buddy_icon(PidginStatusBox *status_box, const char *filename) +pidgin_status_box_set_buddy_icon(PidginStatusBox *status_box, PurpleStoredImage *img) { - g_free(status_box->buddy_icon_path); - status_box->buddy_icon_path = g_strdup(filename); + purple_imgstore_unref(status_box->buddy_icon_img); + status_box->buddy_icon_img = purple_imgstore_ref(img); pidgin_status_box_redisplay_buddy_icon(status_box); } -const char* -pidgin_status_box_get_buddy_icon(PidginStatusBox *box) -{ - return box->buddy_icon_path; -} - void pidgin_status_box_pulse_connecting(PidginStatusBox *status_box) {
--- a/pidgin/gtkstatusbox.h Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/gtkstatusbox.h Fri Apr 27 05:20:10 2007 +0000 @@ -30,6 +30,7 @@ #include <gtk/gtk.h> #include "gtkimhtml.h" #include "account.h" +#include "imgstore.h" #include "savedstatuses.h" #include "status.h" #include <gtk/gtktreemodel.h> @@ -89,7 +90,7 @@ GtkWidget *vbox, *sw; GtkWidget *imhtml; - char *buddy_icon_path; + PurpleStoredImage *buddy_icon_img; GdkPixbuf *buddy_icon; GdkPixbuf *buddy_icon_hover; GtkWidget *buddy_icon_sel; @@ -176,10 +177,7 @@ pidgin_status_box_pulse_connecting(PidginStatusBox *status_box); void -pidgin_status_box_set_buddy_icon(PidginStatusBox *status_box, const char *filename); - -const char * -pidgin_status_box_get_buddy_icon(PidginStatusBox *status_box); +pidgin_status_box_set_buddy_icon(PidginStatusBox *status_box, PurpleStoredImage *img); char *pidgin_status_box_get_message(PidginStatusBox *status_box);
--- a/pidgin/gtkutils.c Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/gtkutils.c Fri Apr 27 05:20:10 2007 +0000 @@ -78,12 +78,12 @@ } static GtkIMHtmlFuncs gtkimhtml_cbs = { - (GtkIMHtmlGetImageFunc)purple_imgstore_get, + (GtkIMHtmlGetImageFunc)purple_imgstore_find_by_id, (GtkIMHtmlGetImageDataFunc)purple_imgstore_get_data, (GtkIMHtmlGetImageSizeFunc)purple_imgstore_get_size, (GtkIMHtmlGetImageFilenameFunc)purple_imgstore_get_filename, - purple_imgstore_ref, - purple_imgstore_unref, + purple_imgstore_ref_by_id, + purple_imgstore_unref_by_id, }; void @@ -1350,13 +1350,12 @@ return; } - id = purple_imgstore_add(filedata, size, data->filename); - g_free(filedata); + id = purple_imgstore_add_with_id(filedata, size, data->filename); gtk_text_buffer_get_iter_at_mark(GTK_IMHTML(gtkconv->entry)->text_buffer, &iter, gtk_text_buffer_get_insert(GTK_IMHTML(gtkconv->entry)->text_buffer)); gtk_imhtml_insert_image_at_iter(GTK_IMHTML(gtkconv->entry), id, &iter); - purple_imgstore_unref(id); + purple_imgstore_unref_by_id(id); break; } @@ -1454,24 +1453,33 @@ _("You can send this image as a file transfer, " "embed it into this message, or use it as the buddy icon for this user."), DND_FILE_TRANSFER, "OK", (GCallback)dnd_image_ok_callback, - "Cancel", (GCallback)dnd_image_cancel_callback, data, - _("Set as buddy icon"), DND_BUDDY_ICON, + "Cancel", (GCallback)dnd_image_cancel_callback, + account, who, NULL, + data, + _("Set as buddy icon"), DND_BUDDY_ICON, _("Send image file"), DND_FILE_TRANSFER, - _("Insert in message"), DND_IM_IMAGE, NULL); + _("Insert in message"), DND_IM_IMAGE, + NULL); else if (!(im || ft)) purple_request_yes_no(NULL, NULL, _("You have dragged an image"), - _("Would you like to set it as the buddy icon for this user?"), - 0, data, (GCallback)dnd_set_icon_ok_cb, (GCallback)dnd_set_icon_cancel_cb); + _("Would you like to set it as the buddy icon for this user?"), + 0, + account, who, NULL, + data, (GCallback)dnd_set_icon_ok_cb, (GCallback)dnd_set_icon_cancel_cb); else purple_request_choice(NULL, NULL, _("You have dragged an image"), - ft ? _("You can send this image as a file transfer or " + (ft ? _("You can send this image as a file transfer or " "embed it into this message, or use it as the buddy icon for this user.") : - _("You can insert this image into this message, or use it as the buddy icon for this user"), - ft ? DND_FILE_TRANSFER : DND_IM_IMAGE, "OK", (GCallback)dnd_image_ok_callback, - "Cancel", (GCallback)dnd_image_cancel_callback, data, + _("You can insert this image into this message, or use it as the buddy icon for this user")), + (ft ? DND_FILE_TRANSFER : DND_IM_IMAGE), + "OK", (GCallback)dnd_image_ok_callback, + "Cancel", (GCallback)dnd_image_cancel_callback, + account, who, NULL, + data, _("Set as buddy icon"), DND_BUDDY_ICON, - ft ? _("Send image file") : _("Insert in message"), ft ? DND_FILE_TRANSFER : DND_IM_IMAGE, NULL); + (ft ? _("Send image file") : _("Insert in message")), (ft ? DND_FILE_TRANSFER : DND_IM_IMAGE), + NULL); return; } @@ -2409,15 +2417,14 @@ } #endif -char * -pidgin_convert_buddy_icon(PurplePlugin *plugin, const char *path) +gpointer +pidgin_convert_buddy_icon(PurplePlugin *plugin, const char *path, size_t *len) { PurplePluginProtocolInfo *prpl_info; #if GTK_CHECK_VERSION(2,2,0) char **prpl_formats; int width, height; char **pixbuf_formats = NULL; - struct stat st; GdkPixbufFormat *format; GdkPixbuf *pixbuf; #if !GTK_CHECK_VERSION(2,4,0) @@ -2426,28 +2433,11 @@ #endif gchar *contents; gsize length; - const char *dirname; - char *random; - char *filename; prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(plugin); g_return_val_if_fail(prpl_info->icon_spec.format != NULL, NULL); - dirname = purple_buddy_icons_get_cache_dir(); - if (!g_file_test(dirname, G_FILE_TEST_IS_DIR)) { - purple_debug_info("buddyicon", "Creating icon cache directory.\n"); - - if (g_mkdir(dirname, S_IRUSR | S_IWUSR | S_IXUSR) < 0) { - purple_debug_error("buddyicon", - "Unable to create directory %s: %s\n", - dirname, strerror(errno)); - return NULL; - } - } - - random = g_strdup_printf("%x", g_random_int()); - filename = g_build_filename(dirname, random, NULL); #if GTK_CHECK_VERSION(2,2,0) #if GTK_CHECK_VERSION(2,4,0) @@ -2478,47 +2468,21 @@ prpl_info->icon_spec.max_height >= height))) /* The icon is the correct size */ #endif { - FILE *image; - #if GTK_CHECK_VERSION(2,2,0) g_strfreev(prpl_formats); g_strfreev(pixbuf_formats); #endif - - /* We don't need to scale the image, so copy it to the cache folder verbatim */ + /* We don't need to scale the image. */ contents = NULL; - if (!g_file_get_contents(path, &contents, &length, NULL) || - (image = g_fopen(filename, "wb")) == NULL) + if (!g_file_get_contents(path, &contents, &length, NULL)) { - g_free(random); - g_free(filename); g_free(contents); #if GTK_CHECK_VERSION(2,2,0) && !GTK_CHECK_VERSION(2,4,0) - g_object_unref(G_OBJECT(pixbuf)); + g_object_unref(G_OBJECT(pixbuf)); #endif return NULL; } - - if (fwrite(contents, 1, length, image) != length) - { - fclose(image); - g_unlink(filename); - - g_free(random); - g_free(filename); - g_free(contents); -#if GTK_CHECK_VERSION(2,2,0) && !GTK_CHECK_VERSION(2,4,0) - g_object_unref(G_OBJECT(pixbuf)); -#endif - return NULL; - } - fclose(image); - g_free(contents); - -#if GTK_CHECK_VERSION(2,2,0) && !GTK_CHECK_VERSION(2,4,0) - g_object_unref(G_OBJECT(pixbuf)); -#endif } #if GTK_CHECK_VERSION(2,2,0) else @@ -2527,6 +2491,7 @@ GError *error = NULL; GdkPixbuf *scale; gboolean success = FALSE; + char *filename = NULL; g_strfreev(pixbuf_formats); @@ -2534,8 +2499,6 @@ if (error) { purple_debug_error("buddyicon", "Could not open icon for conversion: %s\n", error->message); g_error_free(error); - g_free(random); - g_free(filename); g_strfreev(prpl_formats); return NULL; } @@ -2558,6 +2521,17 @@ } for (i = 0; prpl_formats[i]; i++) { + FILE *fp; + + g_free(filename); + fp = purple_mkstemp(&filename, TRUE); + if (!fp) + { + g_free(filename); + return NULL; + } + fclose(fp); + purple_debug_info("buddyicon", "Converting buddy icon to %s as %s\n", prpl_formats[i], filename); /* The "compression" param wasn't supported until gdk-pixbuf 2.8. * Using it in previous versions causes the save to fail (and an assert message). */ @@ -2586,29 +2560,33 @@ g_object_unref(G_OBJECT(pixbuf)); if (!success) { purple_debug_error("buddyicon", "Could not convert icon to usable format.\n"); - g_free(random); + return NULL; + } + + contents = NULL; + if (!g_file_get_contents(filename, &contents, &length, NULL)) + { + purple_debug_error("buddyicon", + "Could not read '%s', which we just wrote to disk.\n", + filename); + + g_free(contents); g_free(filename); return NULL; } + + g_unlink(filename); + g_free(filename); } - if (g_stat(filename, &st) != 0) { - purple_debug_error("buddyicon", - "Could not stat '%s', which we just wrote to disk: %s\n", - filename, strerror(errno)); - g_free(random); - g_free(filename); - return NULL; - } - - /* Check the file size */ + /* Check the image size */ /* * TODO: If the file is too big, it would be cool if we checked if * the prpl supported jpeg, and then we could convert to that * and use a lower quality setting. */ if ((prpl_info->icon_spec.max_filesize != 0) && - (st.st_size > prpl_info->icon_spec.max_filesize)) + (length > prpl_info->icon_spec.max_filesize)) { gchar *tmp; tmp = g_strdup_printf(_("The file '%s' is too large for %s. Please try a smaller image.\n"), @@ -2618,16 +2596,15 @@ purple_debug_info("buddyicon", "'%s' was converted to an image which is %" G_GSIZE_FORMAT " bytes, but the maximum icon size for %s is %" G_GSIZE_FORMAT - " bytes\n", path, st.st_size, plugin->info->name, + " bytes\n", path, length, plugin->info->name, prpl_info->icon_spec.max_filesize); g_free(tmp); - g_free(random); - g_free(filename); return NULL; } - g_free(filename); - return random; + if (len) + *len = length; + return contents; #else /* * The chosen icon wasn't the right size, and we're using @@ -2780,10 +2757,10 @@ void pidgin_set_custom_buddy_icon(PurpleAccount *account, const char *who, const char *filename) { - PurpleConversation *conv; PurpleBuddy *buddy; - PurpleBlistNode *node; - char *path = NULL; + PurpleContact *contact; + gpointer data = NULL; + size_t len = 0; buddy = purple_find_buddy(account, who); if (!buddy) { @@ -2791,35 +2768,20 @@ return; } - node = (PurpleBlistNode*)purple_buddy_get_contact(buddy); - path = (char*)purple_blist_node_get_string(node, "custom_buddy_icon"); - if (path) { - struct stat st; - if (g_stat(path, &st) == 0) - g_unlink(path); - path = NULL; - } + contact = purple_buddy_get_contact(buddy); if (filename) { - char *newfile; - - newfile = pidgin_convert_buddy_icon(purple_find_prpl(purple_account_get_protocol_id(account)), - filename); - path = purple_buddy_icons_get_full_path(newfile); - g_free(newfile); + const char *prpl_id = purple_account_get_protocol_id(account); + PurplePlugin *prpl = purple_find_prpl(prpl_id); + + data = pidgin_convert_buddy_icon(prpl, filename, &len); + + /* We don't want to delete the old icon if the new one didn't load. */ + if (data == NULL) + return; } - purple_blist_node_set_string(node, "custom_buddy_icon", path); - g_free(path); - - /* Update the conversation */ - conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, who, account); - if (conv) - purple_conversation_update(conv, PURPLE_CONV_UPDATE_ICON); - - /* Update the buddylist */ - if (buddy) - purple_blist_update_buddy_icon(buddy); + purple_buddy_icons_set_custom_icon(contact, data, len); } char *pidgin_make_pretty_arrows(const char *str)
--- a/pidgin/gtkutils.h Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/gtkutils.h Fri Apr 27 05:20:10 2007 +0000 @@ -445,11 +445,13 @@ /** * Converts a buddy icon to the required size and format * - * @param plugin The prpl to conver the icon - * @param path The path of a buddy icon to convert - * @return The name of a new buddy icon + * @param plugin The prpl to convert the icon + * @param path The path of a file to convert + * @param len If not @c NULL, the length of the returned data will be set here. + * + * @return The converted image data, or @c NULL if an error occurred. */ -char* pidgin_convert_buddy_icon(PurplePlugin *plugin, const char *path); +gpointer pidgin_convert_buddy_icon(PurplePlugin *plugin, const char *path, size_t *len); #if !GTK_CHECK_VERSION(2,6,0) /**
--- a/pidgin/pidgin.h Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/pidgin.h Fri Apr 27 05:20:10 2007 +0000 @@ -43,7 +43,7 @@ #define PIDGIN_UI "gtk-gaim" /* change this only when we have a sane upgrade path for old prefs */ -#define PIDGIN_PREFS_ROOT "/gaim/gtk" +#define PIDGIN_PREFS_ROOT "/pidgin" #ifndef _WIN32 # define PIDGIN_ALERT_TITLE ""
--- a/pidgin/pidginstock.c Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/pidginstock.c Fri Apr 27 05:20:10 2007 +0000 @@ -101,76 +101,73 @@ gboolean large; gboolean huge; gboolean rtl; + const char *translucent_name; } const sized_stock_icons [] = { - { PIDGIN_STOCK_STATUS_AVAILABLE, "status", "available.png", TRUE, TRUE, TRUE, TRUE, FALSE, FALSE }, - { PIDGIN_STOCK_STATUS_AVAILABLE_I, "status", "available_i.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_STATUS_AWAY, "status", "away.png", TRUE, TRUE, TRUE, TRUE, FALSE, FALSE }, - { PIDGIN_STOCK_STATUS_AWAY_I, "status", "away_i.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_STATUS_BUSY, "status", "busy.png", TRUE, TRUE, TRUE, TRUE, FALSE, FALSE }, - { PIDGIN_STOCK_STATUS_BUSY_I, "status", "busy_i.png", TRUE, FALSE, FALSE, FALSE, FALSE,FALSE }, - { PIDGIN_STOCK_STATUS_CHAT, "status", "chat.png", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE }, - { PIDGIN_STOCK_STATUS_INVISIBLE,"status", "invisible.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_STATUS_XA, "status", "extended-away.png", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE }, - { PIDGIN_STOCK_STATUS_XA_I, "status", "extended-away_i.png",TRUE, FALSE, FALSE, FALSE, FALSE, TRUE }, - { PIDGIN_STOCK_STATUS_LOGIN, "status", "log-in.png", TRUE, TRUE, TRUE, TRUE, FALSE, FALSE }, - { PIDGIN_STOCK_STATUS_LOGOUT, "status", "log-out.png", TRUE, TRUE, TRUE, TRUE, FALSE, FALSE }, - { PIDGIN_STOCK_STATUS_OFFLINE, "status", "offline.png", TRUE, TRUE, TRUE, TRUE, FALSE, FALSE }, - { PIDGIN_STOCK_STATUS_PERSON, "status", "person.png", TRUE, TRUE, TRUE, TRUE, FALSE, FALSE }, - { PIDGIN_STOCK_STATUS_MESSAGE, "status", "message-pending.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_STATUS_AVAILABLE, "status", "available.png", TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_AVAILABLE_I }, + { PIDGIN_STOCK_STATUS_AWAY, "status", "away.png", TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_AWAY_I }, + { PIDGIN_STOCK_STATUS_BUSY, "status", "busy.png", TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_BUSY_I }, + { PIDGIN_STOCK_STATUS_CHAT, "status", "chat.png", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL }, + { PIDGIN_STOCK_STATUS_INVISIBLE,"status", "invisible.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_STATUS_XA, "status", "extended-away.png", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, PIDGIN_STOCK_STATUS_XA_I }, + { PIDGIN_STOCK_STATUS_LOGIN, "status", "log-in.png", TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_STATUS_LOGOUT, "status", "log-out.png", TRUE, TRUE, TRUE, TRUE, FALSE, FALSE , NULL }, + { PIDGIN_STOCK_STATUS_OFFLINE, "status", "offline.png", TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_STATUS_PERSON, "status", "person.png", TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_STATUS_MESSAGE, "status", "message-pending.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_STATUS_IGNORED, "emblems", "blocked.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_STATUS_FOUNDER, "emblems", "founder.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_STATUS_OPERATOR, "emblems", "operator.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_STATUS_HALFOP, "emblems", "half-operator.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_STATUS_VOICE, "emblems", "voice.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_STATUS_IGNORED, "emblems", "blocked.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_STATUS_FOUNDER, "emblems", "founder.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_STATUS_OPERATOR, "emblems", "operator.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_STATUS_HALFOP, "emblems", "half-operator.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_STATUS_VOICE, "emblems", "voice.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_DIALOG_AUTH, "dialogs", "auth.png", TRUE, FALSE, FALSE, FALSE, TRUE, FALSE }, - { PIDGIN_STOCK_DIALOG_COOL, "dialogs", "cool.png", FALSE, FALSE, FALSE, FALSE, TRUE, FALSE }, - { PIDGIN_STOCK_DIALOG_ERROR, "dialogs", "error.png", TRUE, FALSE, FALSE, FALSE, TRUE, FALSE }, - { PIDGIN_STOCK_DIALOG_INFO, "dialogs", "info.png", TRUE, FALSE, FALSE, FALSE, TRUE, FALSE }, - { PIDGIN_STOCK_DIALOG_MAIL, "dialogs", "mail.png", TRUE, FALSE, FALSE, FALSE, TRUE, FALSE }, - { PIDGIN_STOCK_DIALOG_QUESTION, "dialogs", "question.png", TRUE, FALSE, FALSE, FALSE, TRUE, FALSE }, - { PIDGIN_STOCK_DIALOG_WARNING, "dialogs", "warning.png", FALSE, FALSE, FALSE, FALSE, TRUE, FALSE }, + { PIDGIN_STOCK_DIALOG_AUTH, "dialogs", "auth.png", TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, NULL }, + { PIDGIN_STOCK_DIALOG_COOL, "dialogs", "cool.png", FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, NULL }, + { PIDGIN_STOCK_DIALOG_ERROR, "dialogs", "error.png", TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, NULL }, + { PIDGIN_STOCK_DIALOG_INFO, "dialogs", "info.png", TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, NULL }, + { PIDGIN_STOCK_DIALOG_MAIL, "dialogs", "mail.png", TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, NULL }, + { PIDGIN_STOCK_DIALOG_QUESTION, "dialogs", "question.png", TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, NULL }, + { PIDGIN_STOCK_DIALOG_WARNING, "dialogs", "warning.png", FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, NULL }, - { PIDGIN_STOCK_ANIMATION_CONNECT0, "animations", "connect0.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_ANIMATION_CONNECT1, "animations", "connect1.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_ANIMATION_CONNECT2, "animations", "connect2.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_ANIMATION_CONNECT3, "animations", "connect3.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_ANIMATION_CONNECT4, "animations", "connect4.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_ANIMATION_CONNECT5, "animations", "connect5.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_ANIMATION_CONNECT6, "animations", "connect6.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_ANIMATION_CONNECT7, "animations", "connect7.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_ANIMATION_CONNECT8, "animations", "connect8.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_ANIMATION_TYPING0, "animations", "typing0.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_ANIMATION_TYPING1, "animations", "typing1.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_ANIMATION_TYPING2, "animations", "typing2.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_ANIMATION_TYPING3, "animations", "typing3.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_ANIMATION_TYPING4, "animations", "typing4.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_ANIMATION_CONNECT0, "animations", "connect0.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT1, "animations", "connect1.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT2, "animations", "connect2.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT3, "animations", "connect3.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT4, "animations", "connect4.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT5, "animations", "connect5.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT6, "animations", "connect6.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT7, "animations", "connect7.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_CONNECT8, "animations", "connect8.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_TYPING0, "animations", "typing0.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_TYPING1, "animations", "typing1.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_TYPING2, "animations", "typing2.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_TYPING3, "animations", "typing3.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_ANIMATION_TYPING4, "animations", "typing4.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TOOLBAR_ACCOUNTS, "toolbar", "accounts.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TOOLBAR_BGCOLOR, "toolbar", "change-bgcolor.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TOOLBAR_BLOCK, "emblems", "blocked.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TOOLBAR_FGCOLOR, "toolbar", "change-fgcolor.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TOOLBAR_SMILEY, "toolbar", "emote-select.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TOOLBAR_FONT_FACE, "toolbar", "font-face.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TOOLBAR_TEXT_SMALLER, "toolbar", "font-size-down.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TOOLBAR_TEXT_LARGER, "toolbar", "font-size-up.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TOOLBAR_INSERT_IMAGE, "toolbar", "insert-image.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TOOLBAR_INSERT_LINK, "toolbar", "insert-link.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TOOLBAR_MESSAGE_NEW, "toolbar", "message-new.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TOOLBAR_PENDING, "status", "message-pending.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TOOLBAR_PLUGINS, "toolbar", "plugins.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TOOLBAR_TYPING, "toolbar", "typing.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TOOLBAR_UNBLOCK, "toolbar", "unblock.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TOOLBAR_SELECT_AVATAR, "toolbar", "select-avatar.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_TOOLBAR_ACCOUNTS, "toolbar", "accounts.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_BGCOLOR, "toolbar", "change-bgcolor.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_BLOCK, "emblems", "blocked.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_FGCOLOR, "toolbar", "change-fgcolor.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_SMILEY, "toolbar", "emote-select.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_FONT_FACE, "toolbar", "font-face.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_TEXT_SMALLER, "toolbar", "font-size-down.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_TEXT_LARGER, "toolbar", "font-size-up.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_INSERT_IMAGE, "toolbar", "insert-image.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_INSERT_LINK, "toolbar", "insert-link.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_MESSAGE_NEW, "toolbar", "message-new.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_PENDING, "status", "message-pending.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_PLUGINS, "toolbar", "plugins.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_TYPING, "toolbar", "typing.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_UNBLOCK, "toolbar", "unblock.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_SELECT_AVATAR, "toolbar", "select-avatar.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_TRAY_AVAILABLE, "tray", "tray-online.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TRAY_AWAY, "tray", "tray-away.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TRAY_BUSY, "tray", "tray-busy.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TRAY_XA, "tray", "tray-extended-away.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TRAY_OFFLINE, "tray", "tray-offline.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TRAY_CONNECT, "tray", "tray-connecting.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TRAY_PENDING, "tray", "tray-message.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE } + { PIDGIN_STOCK_TRAY_AVAILABLE, "tray", "tray-online.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TRAY_AWAY, "tray", "tray-away.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TRAY_BUSY, "tray", "tray-busy.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TRAY_XA, "tray", "tray-extended-away.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TRAY_OFFLINE, "tray", "tray-offline.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TRAY_CONNECT, "tray", "tray-connecting.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TRAY_PENDING, "tray", "tray-message.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, NULL } }; static gchar * @@ -238,6 +235,102 @@ } +/* Altered from do_colorshift in gnome-panel */ +static void +do_alphashift (GdkPixbuf *dest, GdkPixbuf *src, int shift) +{ + gint i, j; + gint width, height, has_alpha, srcrowstride, destrowstride; + guchar *target_pixels; + guchar *original_pixels; + guchar *pixsrc; + guchar *pixdest; + int val; + guchar a; + + has_alpha = gdk_pixbuf_get_has_alpha (src); + if (!has_alpha) + return; + + width = gdk_pixbuf_get_width (src); + height = gdk_pixbuf_get_height (src); + srcrowstride = gdk_pixbuf_get_rowstride (src); + destrowstride = gdk_pixbuf_get_rowstride (dest); + target_pixels = gdk_pixbuf_get_pixels (dest); + original_pixels = gdk_pixbuf_get_pixels (src); + + for (i = 0; i < height; i++) { + pixdest = target_pixels + i*destrowstride; + pixsrc = original_pixels + i*srcrowstride; + for (j = 0; j < width; j++) { + *(pixdest++) = *(pixsrc++); + *(pixdest++) = *(pixsrc++); + *(pixdest++) = *(pixsrc++); + a = *(pixsrc++); + val = a - shift; + *(pixdest++) = CLAMP(val, 0, 255); + } + } +} + +/* TODO: This is almost certainly not the best way to do this, but it's late, I'm tired, + * we're a few hours from getting this thing out, and copy/paste is EASY. + */ +static void +add_translucent_sized_icon(GtkIconSet *iconset, GtkIconSize sizeid, const char *dir, + gboolean rtl, const char *size, const char *file) +{ + char *filename; + GtkIconSource *source; + GdkPixbuf *pixbuf; + + filename = g_build_filename(DATADIR, "pixmaps", "pidgin", dir, size, file, NULL); + pixbuf = gdk_pixbuf_new_from_file(filename, NULL); + do_alphashift(pixbuf, pixbuf, 128); + + source = gtk_icon_source_new(); + gtk_icon_source_set_pixbuf(source, pixbuf); + gtk_icon_source_set_direction(source, GTK_TEXT_DIR_LTR); + gtk_icon_source_set_direction_wildcarded(source, !rtl); + gtk_icon_source_set_size(source, sizeid); + gtk_icon_source_set_size_wildcarded(source, FALSE); + gtk_icon_source_set_state_wildcarded(source, TRUE); + gtk_icon_set_add_source(iconset, source); + gtk_icon_source_free(source); + + if (sizeid == gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL)) { + source = gtk_icon_source_new(); + gtk_icon_source_set_pixbuf(source, pixbuf); + gtk_icon_source_set_direction_wildcarded(source, TRUE); + gtk_icon_source_set_size(source, GTK_ICON_SIZE_MENU); + gtk_icon_source_set_size_wildcarded(source, FALSE); + gtk_icon_source_set_state_wildcarded(source, TRUE); + gtk_icon_set_add_source(iconset, source); + gtk_icon_source_free(source); + } + g_free(filename); + g_object_unref(pixbuf); + + if (rtl) { + filename = g_build_filename(DATADIR, "pixmaps", "pidgin", dir, size, "rtl", file, NULL); + pixbuf = gdk_pixbuf_new_from_file(filename, NULL); + do_alphashift(pixbuf, pixbuf, 128); + source = gtk_icon_source_new(); + gtk_icon_source_set_pixbuf(source, pixbuf); + gtk_icon_source_set_direction(source, GTK_TEXT_DIR_RTL); + gtk_icon_source_set_size(source, sizeid); + gtk_icon_source_set_size_wildcarded(source, FALSE); + gtk_icon_source_set_state_wildcarded(source, TRUE); + gtk_icon_set_add_source(iconset, source); + g_free(filename); + g_object_unref(pixbuf); + gtk_icon_source_free(source); + } + + +} + + void pidgin_stock_init(void) { @@ -334,6 +427,33 @@ gtk_icon_factory_add(icon_factory, sized_stock_icons[i].name, iconset); gtk_icon_set_unref(iconset); + + if (sized_stock_icons[i].translucent_name) { + iconset = gtk_icon_set_new(); + if (sized_stock_icons[i].extra_small) + add_translucent_sized_icon(iconset, extra_small, + sized_stock_icons[i].dir, sized_stock_icons[i].rtl, + "16", sized_stock_icons[i].filename); + if (sized_stock_icons[i].small) + add_translucent_sized_icon(iconset, small, + sized_stock_icons[i].dir, sized_stock_icons[i].rtl, + "22", sized_stock_icons[i].filename); + if (sized_stock_icons[i].medium) + add_translucent_sized_icon(iconset, medium, + sized_stock_icons[i].dir, sized_stock_icons[i].rtl, + "32", sized_stock_icons[i].filename); + if (sized_stock_icons[i].large) + add_translucent_sized_icon(iconset, large, + sized_stock_icons[i].dir, sized_stock_icons[i].rtl, + "48", sized_stock_icons[i].filename); + if (sized_stock_icons[i].huge) + add_translucent_sized_icon(iconset, huge, + sized_stock_icons[i].dir, sized_stock_icons[i].rtl, + "64", sized_stock_icons[i].filename); + + gtk_icon_factory_add(icon_factory, sized_stock_icons[i].translucent_name, iconset); + gtk_icon_set_unref(iconset); + } } gtk_widget_destroy(win);
--- a/pidgin/pixmaps/emotes/default/22/Makefile.am Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/pixmaps/emotes/default/22/Makefile.am Fri Apr 27 05:20:10 2007 +0000 @@ -62,6 +62,7 @@ foot-in-mouth.png \ freaked-out.png \ ghost.png \ + giggle.png \ girl.png \ glasses-cool.png \ glasses-nerdy.png \ @@ -87,6 +88,7 @@ love-over.png \ love.png \ lying.png \ + mad-tongue.png \ mail.png \ mean.png \ meeting.png \ @@ -99,6 +101,7 @@ msn_online.png \ msn.png \ musical-note.png \ + nailbiting.png \ neutral.png \ party.png \ peace.png \ @@ -158,10 +161,12 @@ umbrella.png \ vampire.png \ victory.png \ + waiting.png \ watermelon.png \ weep.png \ wilt.png \ wink.png \ + worship.png \ yawn.png \ yin-yang.png
--- a/pidgin/pixmaps/emotes/default/22/theme Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/pixmaps/emotes/default/22/theme Fri Apr 27 05:20:10 2007 +0000 @@ -273,7 +273,7 @@ bye.png =; arrogant.png [-( thinking.png :-? -waiting.png :-w :-W +waiting.png :-w :-W #at_wits_end ~x( ~X( MISSING: "Why.Does.This.Not.Work.AAAAARGH!!" => angry smily shouting and pulling hair off smile-big.png :D :-D :d :-d tongue.png :-P :P :-p :p @@ -322,8 +322,8 @@ clover.png %%- musical-note.png :-" nailbiting.png :-SS :-ss -giggle.png ;)) -worship.png ^:)^ +giggle.png ;)) +worship.png ^:)^ star.png (*) mad-tongue.png >:p #yahoo_waving.gif >:/ TODO
--- a/pidgin/pixmaps/icons/16/Makefile.am Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/pixmaps/icons/16/Makefile.am Fri Apr 27 05:20:10 2007 +0000 @@ -2,7 +2,7 @@ EXTRA_DIST = pidgin.png -pidginiconspixdir = $(datadir)/pixmaps/pidgin/icons/16 +pidginiconspixdir = $(datadir)/icons/hicolor/16x16/apps pidginiconspix_DATA = $(EXTRA_DIST)
--- a/pidgin/pixmaps/icons/16/scalable/pidgin.svg Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/pixmaps/icons/16/scalable/pidgin.svg Fri Apr 27 05:20:10 2007 +0000 @@ -14,15 +14,87 @@ id="svg4345" sodipodi:version="0.32" inkscape:version="0.44.1" - sodipodi:docbase="/home/hbons/Desktop" - sodipodi:docname="pidgin-16.svg" - inkscape:export-filename="/home/hbons/Desktop/pidgin.png" + sodipodi:docbase="/home/hbons/Desktop/icons/16/scalable" + sodipodi:docname="pidgin.svg" + inkscape:export-filename="/home/hbons/Desktop/pidgin16.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" version="1.0"> <defs id="defs4347"> <linearGradient + inkscape:collect="always" + id="linearGradient5438"> + <stop + style="stop-color:white;stop-opacity:1;" + offset="0" + id="stop5440" /> + <stop + style="stop-color:white;stop-opacity:0;" + offset="1" + id="stop5442" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient6817"> + <stop + style="stop-color:white;stop-opacity:1;" + offset="0" + id="stop6819" /> + <stop + style="stop-color:white;stop-opacity:0;" + offset="1" + id="stop6821" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient6537"> + <stop + style="stop-color:white;stop-opacity:1;" + offset="0" + id="stop6539" /> + <stop + style="stop-color:white;stop-opacity:0;" + offset="1" + id="stop6541" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient6506"> + <stop + style="stop-color:#eeeeec;stop-opacity:1;" + offset="0" + id="stop6508" /> + <stop + style="stop-color:#eeeeec;stop-opacity:0;" + offset="1" + id="stop6510" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient5304"> + <stop + style="stop-color:#2e3436;stop-opacity:1;" + offset="0" + id="stop5306" /> + <stop + style="stop-color:#2e3436;stop-opacity:0;" + offset="1" + id="stop5308" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient5280"> + <stop + style="stop-color:#82508e;stop-opacity:1;" + offset="0" + id="stop5282" /> + <stop + style="stop-color:#82508e;stop-opacity:0;" + offset="1" + id="stop5284" /> + </linearGradient> + <linearGradient id="linearGradient2804"> <stop style="stop-color:black;stop-opacity:0;" @@ -37,61 +109,6 @@ offset="1" id="stop2808" /> </linearGradient> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient2804" - id="linearGradient1516" - gradientUnits="userSpaceOnUse" - x1="21.875" - y1="48.000977" - x2="21.875" - y2="40" /> - <radialGradient - inkscape:collect="always" - xlink:href="#linearGradient2781" - id="radialGradient1514" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(2,0,0,0.8,36,8.8)" - cx="1" - cy="44" - fx="1" - fy="44" - r="5" /> - <linearGradient - inkscape:collect="always" - id="linearGradient2781"> - <stop - style="stop-color:black;stop-opacity:1;" - offset="0" - id="stop2783" /> - <stop - style="stop-color:black;stop-opacity:0;" - offset="1" - id="stop2785" /> - </linearGradient> - <radialGradient - inkscape:collect="always" - xlink:href="#linearGradient2781" - id="radialGradient1512" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(2,0,0,0.8,-13,-79.2)" - cx="1" - cy="44" - fx="1" - fy="44" - r="5" /> - <linearGradient - inkscape:collect="always" - id="linearGradient5235"> - <stop - style="stop-color:#2e3436;stop-opacity:1;" - offset="0" - id="stop5237" /> - <stop - style="stop-color:#2e3436;stop-opacity:0;" - offset="1" - id="stop5239" /> - </linearGradient> <radialGradient inkscape:collect="always" xlink:href="#linearGradient25546" @@ -148,38 +165,61 @@ offset="1.0000000" id="stop3804" /> </linearGradient> - <linearGradient - inkscape:collect="always" - id="linearGradient3816"> - <stop - style="stop-color:#000000;stop-opacity:1;" - offset="0" - id="stop3818" /> - <stop - style="stop-color:#000000;stop-opacity:0;" - offset="1" - id="stop3820" /> - </linearGradient> <radialGradient inkscape:collect="always" - xlink:href="#linearGradient3816" - id="radialGradient4179" - gradientUnits="userSpaceOnUse" - cx="31.112698" - cy="19.008621" - fx="31.112698" - fy="19.008621" - r="8.6620579" /> - <radialGradient + xlink:href="#linearGradient5280" + id="radialGradient5286" + cx="15.004828" + cy="39.80859" + fx="15.004828" + fy="39.80859" + r="9.7225161" + gradientTransform="matrix(1,0,0,0.732283,0,10.65742)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5304" + id="linearGradient5310" + x1="12.606371" + y1="15.069461" + x2="12.606371" + y2="21.152372" + gradientUnits="userSpaceOnUse" /> + <linearGradient inkscape:collect="always" - xlink:href="#linearGradient5235" - id="radialGradient5241" - cx="23.234518" - cy="40.688972" - fx="23.234518" - fy="40.688972" - r="16.956987" - gradientTransform="matrix(1,0,0,0.133183,0,35.2699)" + xlink:href="#linearGradient6506" + id="linearGradient6512" + x1="15.645709" + y1="39.743458" + x2="15.645709" + y2="53.502155" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6537" + id="linearGradient6543" + x1="30.5" + y1="0.033532728" + x2="30.5" + y2="23.559282" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6817" + id="linearGradient6823" + x1="0.23931108" + y1="38.950283" + x2="5.7089725" + y2="42.982571" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5438" + id="linearGradient5444" + x1="30.152058" + y1="-0.86487341" + x2="30.152058" + y2="23.011967" gradientUnits="userSpaceOnUse" /> </defs> <sodipodi:namedview @@ -190,8 +230,8 @@ inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="42.440064" - inkscape:cx="12.433319" - inkscape:cy="6.6578459" + inkscape:cx="13.087113" + inkscape:cy="8.5298663" inkscape:current-layer="layer1" showgrid="true" inkscape:grid-bbox="true" @@ -200,8 +240,12 @@ inkscape:window-height="966" inkscape:window-x="3" inkscape:window-y="25" + showguides="true" + inkscape:guide-bbox="true" + inkscape:grid-points="false" width="16px" - height="16px" /> + height="16px" + inkscape:object-bbox="true" /> <metadata id="metadata4350"> <rdf:RDF> @@ -218,48 +262,110 @@ inkscape:label="Layer 1" inkscape:groupmode="layer"> <path - style="opacity:1;fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:2.37280941;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 2.875,7.5 C 2.1210885,7.5 1.5,8.1265217 1.5,8.90625 L 1.5,15.71875 L 1.5,18.46875 L 1.5,26.613999 C 1.5,27.393727 2.1210885,28.02025 2.875,28.020249 L 5.8475934,28.020249 L 5.8475934,32.22122 L 11.690916,27.991218 L 22.125,28.020249 C 22.878911,28.020249 23.5,27.393726 23.5,26.613999 L 23.5,18.46875 L 23.5,15.71875 L 23.5,8.90625 C 23.5,8.1265221 22.878912,7.5000001 22.125,7.5 L 16.15625,7.5 L 8.375,7.5 L 2.875,7.5 z " - id="path5540" - transform="matrix(-0.454545,0,0,0.390748,16.18182,-2.43061)" - sodipodi:nodetypes="cccccccccccccccccc" /> + style="opacity:1;fill:#75507b;fill-opacity:1" + d="M 36.0625,8 C 33.978257,8 33.334928,10.523086 34.78125,12.9375 C 35.250389,13.720651 36.674297,15.15311 36.86722,15.15311 L 36.878267,14.508325 C 36.288194,13.580567 35.517363,12.502064 35.686987,12.281543 C 37.835781,12.281543 38,11.491782 38,10.027674 C 38,8.7542399 37.228501,8 36.0625,8 z " + id="path6521" + transform="matrix(1.148904,0,0,0.920169,-34.28919,-3.241212)" + sodipodi:nodetypes="csccccc" /> <path - transform="matrix(-0.397516,0,0,0.329862,15.46895,-1.283212)" - style="fill:none;fill-opacity:1;stroke:white;stroke-width:2.76157022;stroke-miterlimit:4;stroke-opacity:1" - d="M 2.875,8.4375 C 2.6469872,8.4375 2.4375,8.6305983 2.4375,8.90625 L 2.4375,15.71875 L 2.4375,18.46875 L 2.4375,26.1875 C 2.4375,26.46315 2.6469898,26.65625 2.875,26.65625 L 7.1914464,26.68945 C 7.7065457,26.695834 7.4705404,28.897647 7.4769247,29.412746 L 11.299413,26.8125 L 22.125,26.65625 C 22.353012,26.65625 22.5625,26.463149 22.5625,26.1875 L 22.5625,18.46875 L 22.5625,15.71875 L 22.5625,8.90625 C 22.5625,8.6305986 22.353013,8.4375 22.125,8.4375 L 16.15625,8.4375 L 8.375,8.4375 L 2.875,8.4375 z " - id="path5542" - sodipodi:nodetypes="cccccccccccccccccc" /> + style="opacity:1;fill:#82508e;fill-opacity:1;stroke:#3b1941;stroke-width:2.30209565;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 15,13 C 8.3759979,13 3,18.600001 3,25.5 C 3,31.153143 2.9750563,38.402618 2.9750563,45.572826 C 4.1625449,45.572826 27.946366,45.600605 30.637365,45.600605 C 32.751492,45.600605 32.586331,43.541005 32.586331,43.541005 C 32.586331,40.875594 27.597902,38.639057 25.813453,36.682531 C 23.985035,34.68151 26,30.884078 26,30.884078 C 26.641306,29.354278 28.01889,26.891006 28.01889,25.115922 C 28.01889,18.215923 21.624002,13 15,13 z " + id="path5176" + sodipodi:nodetypes="ccccszcsc" + transform="matrix(0.43939,0,0,0.42944,-0.819445,-4.082726)" /> + <rect + style="opacity:1;fill:white;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect6331" + width="2.6154532" + height="1.1545694" + x="5.513658" + y="6.4806929" + rx="0.48532724" + ry="0.32910046" + transform="matrix(1.147027,0,0,0.866113,-0.324314,2.386999)" /> <path sodipodi:type="arc" - style="opacity:0.52838428;fill:url(#radialGradient5241);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path4340" - sodipodi:cx="23.234518" - sodipodi:cy="40.688972" - sodipodi:rx="16.956987" - sodipodi:ry="2.2583797" - d="M 40.191505 40.688972 A 16.956987 2.2583797 0 1 1 6.2775307,40.688972 A 16.956987 2.2583797 0 1 1 40.191505 40.688972 z" - transform="matrix(1.208941,0,0,1.980928,-1.589159,5.924394)" /> + style="opacity:1;fill:url(#radialGradient5286);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path5273" + sodipodi:cx="15.004828" + sodipodi:cy="39.80859" + sodipodi:rx="9.7225161" + sodipodi:ry="7.119638" + d="M 24.727345 39.80859 A 9.7225161 7.119638 0 1 1 5.2823124,39.80859 A 9.7225161 7.119638 0 1 1 24.727345 39.80859 z" + transform="matrix(0.434788,0,0,0.500648,-1.130366,-6.547801)" /> + <path + style="opacity:0.5152838;fill:#5c3466;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M -42.833794,49.038847 C -42.833794,49.038847 -42.815855,44.709724 -42.815855,37.951005 C -42.815855,37.951005 -39.03087,40.509965 -38.631892,41.678764 C -39.153711,41.596001 -40.372039,41.685633 -40.372039,41.685633 C -40.038351,42.463101 -38.163796,45.952105 -36.121045,48.058218 C -37.780497,47.329365 -39.471111,47.196178 -39.471111,47.196178 C -39.009636,48.111847 -37.250115,48.69173 -36.943887,49.110993 C -36.943887,49.110993 -41.348464,49.038847 -42.833794,49.038847 z " + id="rect5312" + sodipodi:nodetypes="cccccccc" + transform="matrix(0.446908,0,0,0.358425,20.14277,-2.602607)" /> <path - transform="matrix(2.539812,0,0,0.410815,-57.0204,65.80212)" + style="opacity:0.5152838;fill:#5c3466;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M -49.441852,47.4154 C -47.112614,42.001764 -42.19329,43.469796 -40.961409,37.951005 C -40.961409,37.951005 -39.025024,40.280009 -38.974466,41.581367 C -39.496285,41.498604 -39.881988,41.516405 -39.881988,41.516405 C -39.5483,42.293873 -38.196948,45.748112 -36.154197,47.854225 C -37.813649,47.125372 -38.925816,46.898039 -38.925816,46.898039 C -38.847603,47.794771 -38.376224,47.369394 -38.122982,48.215235 C -42.942294,48.046898 -46.252916,49.195571 -49.441852,47.4154 z " + id="path5317" + sodipodi:nodetypes="cccccccc" + transform="matrix(-0.376289,0,0,0.381853,-5.604413,-3.491724)" /> + <path + transform="matrix(0.399589,0,0,0.393554,-5.973603e-2,-3.038964)" + style="opacity:0.31004363;fill:url(#linearGradient5310);fill-opacity:1;stroke:url(#linearGradient6512);stroke-width:2.5216887;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 15,14.0625 C 8.9877035,14.0625 4.0789961,19.13808 4.0625,25.46875 C 4.0624722,25.479427 4.0617033,25.489349 4.0625,25.5 C 4.0625,32.787473 3.9033639,38.26012 3.9033639,44.499878 C 5.8399452,44.499878 24.86993,44.470084 30.695903,44.470084 C 29.746978,42.549359 26.273076,40.711023 23.972608,38.78763 C 23.362603,37.973536 23.023697,35.459892 22.969233,34.418473 C 23.611113,31.359155 25.129532,28.401757 26.527172,25.440129 C 26.527172,19.094533 21.022436,14.0625 15,14.0625 z " + id="path5241" + sodipodi:nodetypes="csccccccc" /> + <path + transform="matrix(0.626764,0,0,0.689441,-3.309086,-9.833164)" + style="opacity:1;fill:white;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M 13.257119,24.626053 C 13.257119,26.227351 11.8279,27.316574 10.863875,27.316574 C 9.5428049,27.316574 8.4706318,26.01697 8.4706318,24.415672 C 8.4706318,23.024119 9.2055946,21.514771 10.526665,21.514771 C 11.847736,21.514771 13.257119,23.360971 13.257119,24.626053 z " + id="path5157" + sodipodi:nodetypes="csssc" /> + <path sodipodi:type="arc" - style="opacity:1;color:black;fill:url(#radialGradient4179);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" - id="path4306" - sodipodi:cx="31.112698" - sodipodi:cy="19.008621" - sodipodi:rx="8.6620579" - sodipodi:ry="8.6620579" - d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1 22.45064,19.008621 A 8.6620579 8.6620579 0 1 1 39.774755 19.008621 z" /> + style="opacity:1;fill:#5c3566;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path5162" + sodipodi:cx="10.169642" + sodipodi:cy="24.3125" + sodipodi:rx="1.2410715" + sodipodi:ry="1.2946428" + d="M 11.410714 24.3125 A 1.2410715 1.2946428 0 1 1 8.928571,24.3125 A 1.2410715 1.2946428 0 1 1 11.410714 24.3125 z" + transform="matrix(0.805756,0,0,0.772414,-5.19425,-11.77932)" /> + <path + transform="matrix(0.29055,-0.412361,-0.273947,-0.388798,13.58792,20.45445)" + style="opacity:1;fill:white;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M 13.257119,24.626053 C 13.257119,26.227351 11.8279,27.316574 10.863875,27.316574 C 9.5428049,27.316574 8.4706318,26.01697 8.4706318,24.415672 C 8.4706318,23.024119 9.2055946,21.514771 10.526665,21.514771 C 11.847736,21.514771 13.257119,23.360971 13.257119,24.626053 z " + id="path5169" + sodipodi:nodetypes="csssc" /> <path - style="opacity:1;fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:2.37280941;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 2.875,7.5 C 2.1210885,7.5 1.5,8.1265217 1.5,8.90625 L 1.5,15.71875 L 1.5,18.46875 L 1.5,26.613999 C 1.5,27.393727 2.1210885,28.02025 2.875,28.020249 L 5.8475934,28.020249 L 5.8475934,32.22122 L 11.690916,27.991218 L 22.125,28.020249 C 22.878911,28.020249 23.5,27.393726 23.5,26.613999 L 23.5,18.46875 L 23.5,15.71875 L 23.5,8.90625 C 23.5,8.1265221 22.878912,7.5000001 22.125,7.5 L 16.15625,7.5 L 8.375,7.5 L 2.875,7.5 z " - id="path5534" - transform="matrix(0.454545,0,0,0.390748,-0.181807,2.56939)" - sodipodi:nodetypes="cccccccccccccccccc" /> + sodipodi:type="arc" + style="opacity:1;fill:#5c3566;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path5171" + sodipodi:cx="10.169642" + sodipodi:cy="24.3125" + sodipodi:rx="1.2410715" + sodipodi:ry="1.2946428" + d="M 11.410714 24.3125 A 1.2410715 1.2946428 0 1 1 8.928571,24.3125 A 1.2410715 1.2946428 0 1 1 11.410714 24.3125 z" + transform="matrix(0.805755,0,0,0.772417,0.805755,-11.77938)" /> + <path + transform="matrix(0.63556,0,0,0.371992,4.635114,-6.489142)" + style="fill:#f9751a;fill-opacity:1;stroke:none;stroke-width:1.0283047;stroke-miterlimit:4;stroke-opacity:1" + d="M -0.99929609,42.004237 C 2.9290204,42.117701 4.1278823,38.950282 4.9828709,38.950282 C 5.8260957,38.950282 7.1161651,42.240122 10.014606,42.007796 C 9.2074596,43.955072 6.7265914,47.014858 5.6807127,47.014858 C 4.6230593,47.014858 0.31231911,44.880662 -0.99929609,42.004237 z " + id="rect5187" + sodipodi:nodetypes="ccczc" /> <path - transform="matrix(0.397516,0,0,0.329862,0.531062,3.716788)" - style="fill:none;fill-opacity:1;stroke:white;stroke-width:2.76157022;stroke-miterlimit:4;stroke-opacity:1" - d="M 2.875,8.4375 C 2.6469872,8.4375 2.4375,8.6305983 2.4375,8.90625 L 2.4375,15.71875 L 2.4375,18.46875 L 2.4375,26.1875 C 2.4375,26.46315 2.6469898,26.65625 2.875,26.65625 L 7.1914464,26.68945 C 7.7065457,26.695834 7.4705404,28.897647 7.4769247,29.412746 L 11.299413,26.8125 L 22.125,26.65625 C 22.353012,26.65625 22.5625,26.463149 22.5625,26.1875 L 22.5625,18.46875 L 22.5625,15.71875 L 22.5625,8.90625 C 22.5625,8.6305986 22.353013,8.4375 22.125,8.4375 L 16.15625,8.4375 L 8.375,8.4375 L 2.875,8.4375 z " - id="path5536" - sodipodi:nodetypes="cccccccccccccccccc" /> + transform="matrix(0.743268,0,0,0.267357,-7.659906,-1.671861)" + style="fill:#3b1941;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M 11.651119,11.193815 C 13.577759,8.2509126 16.249277,11.481501 17.614226,12.804399 L 14.761306,13.747613 L 11.651119,11.193815 z " + id="path5192" + sodipodi:nodetypes="cccc" /> + <path + transform="matrix(0.686065,0,0,0.46633,-5.019573,-4.365629)" + style="fill:#3b1941;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M 11.689238,9.8218679 C 13.591296,8.0161941 17.174576,11.994261 17.519594,13.650486 L 14.543472,12.891665 L 11.689238,9.8218679 z " + id="rect5189" + sodipodi:nodetypes="cccc" /> + <path + transform="matrix(0.63556,0,0,0.371995,4.635112,-6.489295)" + style="fill:url(#linearGradient6823);fill-opacity:1;stroke:none;stroke-width:1.0283047;stroke-miterlimit:4;stroke-opacity:1" + d="M -0.99929609,42.004237 C 2.9290204,42.117701 4.1278823,38.950282 4.9828709,38.950282 C 5.8260957,38.950282 7.1161651,42.240122 10.014606,42.007796 C 9.2074596,43.955072 6.7265914,47.014858 5.6807127,47.014858 C 4.6230593,47.014858 0.31231911,44.880662 -0.99929609,42.004237 z " + id="path6815" + sodipodi:nodetypes="ccczc" /> </g> </svg>
--- a/pidgin/pixmaps/icons/24/Makefile.am Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/pixmaps/icons/24/Makefile.am Fri Apr 27 05:20:10 2007 +0000 @@ -2,7 +2,7 @@ EXTRA_DIST = pidgin.png -pidginiconspixdir = $(datadir)/pixmaps/pidgin/icons/24 +pidginiconspixdir = $(datadir)/icons/hicolor/24x24/apps pidginiconspix_DATA = $(EXTRA_DIST)
--- a/pidgin/pixmaps/icons/24/scalable/pidgin.svg Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/pixmaps/icons/24/scalable/pidgin.svg Fri Apr 27 05:20:10 2007 +0000 @@ -14,15 +14,87 @@ id="svg4345" sodipodi:version="0.32" inkscape:version="0.44.1" - sodipodi:docbase="/home/hbons/Desktop" - sodipodi:docname="pidgin-24.svg" - inkscape:export-filename="/home/hbons/Desktop/pidgin.png" + sodipodi:docbase="/home/hbons/Desktop/icons/24/scalable" + sodipodi:docname="pidgin.svg" + inkscape:export-filename="/home/hbons/Desktop/pidgin24-2.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" version="1.0"> <defs id="defs4347"> <linearGradient + inkscape:collect="always" + id="linearGradient5438"> + <stop + style="stop-color:white;stop-opacity:1;" + offset="0" + id="stop5440" /> + <stop + style="stop-color:white;stop-opacity:0;" + offset="1" + id="stop5442" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient6817"> + <stop + style="stop-color:white;stop-opacity:1;" + offset="0" + id="stop6819" /> + <stop + style="stop-color:white;stop-opacity:0;" + offset="1" + id="stop6821" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient6537"> + <stop + style="stop-color:white;stop-opacity:1;" + offset="0" + id="stop6539" /> + <stop + style="stop-color:white;stop-opacity:0;" + offset="1" + id="stop6541" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient6506"> + <stop + style="stop-color:#eeeeec;stop-opacity:1;" + offset="0" + id="stop6508" /> + <stop + style="stop-color:#eeeeec;stop-opacity:0;" + offset="1" + id="stop6510" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient5304"> + <stop + style="stop-color:#2e3436;stop-opacity:1;" + offset="0" + id="stop5306" /> + <stop + style="stop-color:#2e3436;stop-opacity:0;" + offset="1" + id="stop5308" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient5280"> + <stop + style="stop-color:#82508e;stop-opacity:1;" + offset="0" + id="stop5282" /> + <stop + style="stop-color:#82508e;stop-opacity:0;" + offset="1" + id="stop5284" /> + </linearGradient> + <linearGradient id="linearGradient2804"> <stop style="stop-color:black;stop-opacity:0;" @@ -37,61 +109,6 @@ offset="1" id="stop2808" /> </linearGradient> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient2804" - id="linearGradient1516" - gradientUnits="userSpaceOnUse" - x1="21.875" - y1="48.000977" - x2="21.875" - y2="40" /> - <radialGradient - inkscape:collect="always" - xlink:href="#linearGradient2781" - id="radialGradient1514" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(2,0,0,0.8,36,8.8)" - cx="1" - cy="44" - fx="1" - fy="44" - r="5" /> - <linearGradient - inkscape:collect="always" - id="linearGradient2781"> - <stop - style="stop-color:black;stop-opacity:1;" - offset="0" - id="stop2783" /> - <stop - style="stop-color:black;stop-opacity:0;" - offset="1" - id="stop2785" /> - </linearGradient> - <radialGradient - inkscape:collect="always" - xlink:href="#linearGradient2781" - id="radialGradient1512" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(2,0,0,0.8,-13,-79.2)" - cx="1" - cy="44" - fx="1" - fy="44" - r="5" /> - <linearGradient - inkscape:collect="always" - id="linearGradient5235"> - <stop - style="stop-color:#2e3436;stop-opacity:1;" - offset="0" - id="stop5237" /> - <stop - style="stop-color:#2e3436;stop-opacity:0;" - offset="1" - id="stop5239" /> - </linearGradient> <radialGradient inkscape:collect="always" xlink:href="#linearGradient25546" @@ -148,38 +165,61 @@ offset="1.0000000" id="stop3804" /> </linearGradient> - <linearGradient - inkscape:collect="always" - id="linearGradient3816"> - <stop - style="stop-color:#000000;stop-opacity:1;" - offset="0" - id="stop3818" /> - <stop - style="stop-color:#000000;stop-opacity:0;" - offset="1" - id="stop3820" /> - </linearGradient> <radialGradient inkscape:collect="always" - xlink:href="#linearGradient3816" - id="radialGradient4179" - gradientUnits="userSpaceOnUse" - cx="31.112698" - cy="19.008621" - fx="31.112698" - fy="19.008621" - r="8.6620579" /> - <radialGradient + xlink:href="#linearGradient5280" + id="radialGradient5286" + cx="15.004828" + cy="39.80859" + fx="15.004828" + fy="39.80859" + r="9.7225161" + gradientTransform="matrix(1,0,0,0.732283,0,10.65742)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5304" + id="linearGradient5310" + x1="12.606371" + y1="15.069461" + x2="12.606371" + y2="21.152372" + gradientUnits="userSpaceOnUse" /> + <linearGradient inkscape:collect="always" - xlink:href="#linearGradient5235" - id="radialGradient5241" - cx="23.234518" - cy="40.688972" - fx="23.234518" - fy="40.688972" - r="16.956987" - gradientTransform="matrix(1,0,0,0.133183,0,35.2699)" + xlink:href="#linearGradient6506" + id="linearGradient6512" + x1="15.645709" + y1="39.743458" + x2="15.645709" + y2="53.502155" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6537" + id="linearGradient6543" + x1="30.5" + y1="0.033532728" + x2="30.5" + y2="23.559282" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6817" + id="linearGradient6823" + x1="0.23931108" + y1="38.950283" + x2="5.7089725" + y2="42.982571" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5438" + id="linearGradient5444" + x1="30.152058" + y1="-0.86487341" + x2="30.152058" + y2="23.011967" gradientUnits="userSpaceOnUse" /> </defs> <sodipodi:namedview @@ -189,9 +229,9 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="28" - inkscape:cx="17.768242" - inkscape:cy="11.945133" + inkscape:zoom="26.124924" + inkscape:cx="19.621039" + inkscape:cy="12.735051" inkscape:current-layer="layer1" showgrid="true" inkscape:grid-bbox="true" @@ -200,8 +240,12 @@ inkscape:window-height="966" inkscape:window-x="3" inkscape:window-y="25" + showguides="true" + inkscape:guide-bbox="true" + inkscape:grid-points="false" width="24px" - height="24px" /> + height="24px" + inkscape:object-bbox="true" /> <metadata id="metadata4350"> <rdf:RDF> @@ -217,76 +261,137 @@ id="layer1" inkscape:label="Layer 1" inkscape:groupmode="layer"> - <g - id="g1504" - style="opacity:0.12663754" - transform="matrix(0.496192,0,0,0.581846,-0.128303,-4.772994)"> - <rect - transform="scale(-1,-1)" - y="-48" - x="-11" - height="8" - width="10" - id="rect1506" - style="opacity:1;color:black;fill:url(#radialGradient1512);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> - <rect - y="40" - x="38" - height="8" - width="10" - id="rect1508" - style="opacity:1;color:black;fill:url(#radialGradient1514);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> - <rect - y="40" - x="11" - height="8" - width="27" - id="rect1510" - style="opacity:1;color:black;fill:url(#linearGradient1516);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> - </g> + <path + style="fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:2.68207097;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 17.892492,1.5 C 14.553935,1.5 11.861242,4.611235 11.861242,8.46875 L 11.861242,20.53125 C 11.861242,24.388765 14.790157,28.553306 18.128714,28.553306 L 33.206307,28.454853 L 33.212431,35.359517 L 40.550287,28.59293 C 46.237519,28.59293 46.5,25.478162 46.5,20.728157 L 46.5,8.46875 C 46.5,4.6112353 43.807307,1.5 40.46875,1.5 L 17.892492,1.5 z " + id="path4547" + sodipodi:nodetypes="ccccccccccc" + transform="matrix(0.375302,0,0,0.370406,6.048447,-5.560909e-2)" /> + <path + sodipodi:type="inkscape:offset" + inkscape:radius="-2.6972473" + inkscape:original="M 17.90625 1.5 C 14.567693 1.5 11.875 4.611235 11.875 8.46875 L 11.875 20.53125 C 11.875 24.388765 14.786443 28.5625 18.125 28.5625 L 33.21875 28.46875 L 33.21875 35.375 L 40.5625 28.59375 C 46.249734 28.59375 46.5 25.468755 46.5 20.71875 L 46.5 8.46875 C 46.5 4.6112353 43.807307 1.5 40.46875 1.5 L 17.90625 1.5 z " + style="fill:url(#linearGradient5444);fill-opacity:1.0;stroke:white;stroke-width:2.68207097;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path5436" + d="M 17.90625,4.1875 C 16.243421,4.1875 14.5625,5.8664228 14.5625,8.46875 L 14.5625,20.53125 C 14.5625,21.781429 15.113741,23.319209 15.90625,24.375 C 16.698759,25.430791 17.57972,25.875 18.125,25.875 L 33.1875,25.78125 C 33.904865,25.775598 34.594934,26.055928 35.105127,26.560257 C 35.61532,27.064586 35.903608,27.751368 35.90625,28.46875 L 35.90625,29.21875 L 38.71875,26.625 C 39.22009,26.160499 39.879056,25.903614 40.5625,25.90625 C 42.912093,25.90625 43.047945,25.595299 43.3125,25.125 C 43.577055,24.654701 43.8125,23.046382 43.8125,20.71875 L 43.8125,8.46875 C 43.8125,5.8664232 42.131579,4.1875 40.46875,4.1875 L 17.90625,4.1875 z " + transform="matrix(0.375302,0,0,0.370406,6.048447,-5.560909e-2)" /> + <path + style="opacity:1;fill:#75507b;fill-opacity:1" + d="M 36.0625,8 C 33.978257,8 33.334928,10.523086 34.78125,12.9375 C 35.250389,13.720651 36.674297,15.15311 36.86722,15.15311 L 36.878267,14.508325 C 36.288194,13.580567 35.517363,12.502064 35.686987,12.281543 C 37.835781,12.281543 38,11.491782 38,10.027674 C 38,8.7542399 37.228501,8 36.0625,8 z " + id="path6521" + transform="matrix(1.747787,0,0,1.397993,-52.41719,-5.183942)" + sodipodi:nodetypes="csccccc" /> + <path + style="opacity:1;fill:#82508e;fill-opacity:1;stroke:#3b1941;stroke-width:1.51128328;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 15,13 C 8.3759979,13 3,18.600001 3,25.5 C 3,31.153143 2.9750563,38.402618 2.9750563,45.572826 C 4.1625449,45.572826 27.946366,45.600605 30.637365,45.600605 C 32.751492,45.600605 32.586331,43.541005 32.586331,43.541005 C 32.586331,40.875594 27.597902,38.639057 25.813453,36.682531 C 23.985035,34.68151 26,30.5 26,30.5 C 26.641306,28.9702 27,27.275084 27,25.5 C 27,18.600001 21.624002,13 15,13 z " + id="path5176" + sodipodi:nodetypes="ccccszcsc" + transform="matrix(0.67692,0,0,0.646801,-1.52611,-5.949693)" /> <path sodipodi:type="arc" - style="opacity:0.52838428;fill:url(#radialGradient5241);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path4340" - sodipodi:cx="23.234518" - sodipodi:cy="40.688972" - sodipodi:rx="16.956987" - sodipodi:ry="2.2583797" - d="M 40.191505 40.688972 A 16.956987 2.2583797 0 1 1 6.2775307,40.688972 A 16.956987 2.2583797 0 1 1 40.191505 40.688972 z" - transform="matrix(1.208941,0,0,1.980928,-0.589159,7.924396)" /> + style="opacity:1;fill:url(#radialGradient5286);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path5273" + sodipodi:cx="15.004828" + sodipodi:cy="39.80859" + sodipodi:rx="9.7225161" + sodipodi:ry="7.119638" + d="M 24.727345 39.80859 A 9.7225161 7.119638 0 1 1 5.2823124,39.80859 A 9.7225161 7.119638 0 1 1 24.727345 39.80859 z" + transform="matrix(0.661428,0,0,0.760624,-1.973841,-10.20757)" /> + <path + style="opacity:0.5152838;fill:#5c3466;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M -42.833794,49.038847 C -42.833794,49.038847 -42.815855,44.709724 -42.815855,37.951005 C -42.815855,37.951005 -39.03087,40.509965 -38.631892,41.678764 C -39.153711,41.596001 -40.372039,41.685633 -40.372039,41.685633 C -40.038351,42.463101 -38.163796,45.952105 -36.121045,48.058218 C -37.780497,47.329365 -39.471111,47.196178 -39.471111,47.196178 C -39.009636,48.111847 -37.250115,48.69173 -36.943887,49.110993 C -36.943887,49.110993 -41.348464,49.038847 -42.833794,49.038847 z " + id="rect5312" + sodipodi:nodetypes="cccccccc" + transform="matrix(0.799568,0,0,0.627241,35.24855,-7.804428)" /> + <path + style="opacity:0.5152838;fill:#5c3466;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M -49.441852,47.4154 C -48.364983,40.273995 -40.690447,44.765623 -40.961409,37.951005 C -40.961409,37.951005 -39.025024,40.280009 -38.974466,41.581367 C -39.496285,41.498604 -39.881988,41.516405 -39.881988,41.516405 C -39.5483,42.293873 -38.196948,45.748112 -36.154197,47.854225 C -37.813649,47.125372 -38.925816,46.898039 -38.925816,46.898039 C -38.847603,47.794771 -38.376224,47.369394 -38.122982,48.215235 C -42.942294,48.046898 -46.252916,49.195571 -49.441852,47.4154 z " + id="path5317" + sodipodi:nodetypes="cccccccc" + transform="matrix(-0.602064,0,0,0.572779,-9.767144,-4.737575)" /> <path - style="opacity:1;fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:1.69608581;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 2.875,7.5 C 2.1210885,7.5 1.5,8.1265217 1.5,8.90625 L 1.5,15.71875 L 1.5,18.46875 L 1.5,26.613999 C 1.5,27.393727 2.1210885,28.02025 2.875,28.020249 L 4.9145119,28.020249 L 4.9145119,30.532781 L 8.1141033,27.991218 L 22.125,28.020249 C 22.878911,28.020249 23.5,27.393726 23.5,26.613999 L 23.5,18.46875 L 23.5,15.71875 L 23.5,8.90625 C 23.5,8.1265221 22.878912,7.5000001 22.125,7.5 L 16.15625,7.5 L 8.375,7.5 L 2.875,7.5 z " - id="path4334" - transform="matrix(-0.590909,0,0,0.588279,23.38636,-1.912091)" - sodipodi:nodetypes="cccccccccccccccccc" /> + transform="matrix(0.660903,0,0,0.627207,-1.258953,-5.361383)" + style="opacity:0.31004363;fill:url(#linearGradient5310);fill-opacity:1;stroke:url(#linearGradient6512);stroke-width:1.55319395;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="M 15,14.0625 C 8.9877035,14.0625 4.0789961,19.13808 4.0625,25.46875 C 4.0624722,25.479427 4.0617033,25.489349 4.0625,25.5 C 4.0625,32.787473 3.9033639,38.26012 3.9033639,44.499878 C 5.8399452,44.499878 22.452275,44.470084 28.278248,44.470084 C 29.445455,44.470084 31.431654,44.974157 31.431654,43.509594 C 31.431654,43.287851 31.231903,42.870917 30.681654,42.353344 C 30.131405,41.835771 29.308414,41.280003 28.400404,40.728344 C 26.665321,39.858723 25.411769,39.090553 24.621247,37.290844 C 24.011242,36.47675 23.731303,35.519763 23.676839,34.478344 C 23.622375,33.436925 24.107721,32.319635 24.224561,31.259594 C 24.458241,29.139511 24.96875,30.28125 24.96875,30.28125 C 24.98374,30.216952 25.004663,30.154183 25.03125,30.09375 C 25.618731,28.692346 25.9375,27.131297 25.9375,25.5 C 25.9375,19.154404 21.022436,14.0625 15,14.0625 z " + id="path5241" + sodipodi:nodetypes="cscccssccsscssc" /> + <path + transform="matrix(-0.861857,-0.809791,0.812609,-0.76352,-5.667036,37.33378)" + style="opacity:1;fill:#a46bb0;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M 13.257119,24.626053 C 13.257119,26.227351 11.8279,27.316574 10.863875,27.316574 C 9.5428049,27.316574 8.4706318,26.01697 8.4706318,24.415672 C 8.4706318,23.024119 9.2055946,21.514771 10.526665,21.514771 C 11.847736,21.514771 13.257119,23.360971 13.257119,24.626053 z " + id="path5160" + sodipodi:nodetypes="csssc" /> <path - transform="matrix(-0.546584,0,0,0.546584,22.8323,-1.111803)" - style="fill:none;fill-opacity:1;stroke:white;stroke-width:1.82954407;stroke-miterlimit:4;stroke-opacity:1" - d="M 2.875,8.4375 C 2.6469872,8.4375 2.4375,8.6305983 2.4375,8.90625 L 2.4375,15.71875 L 2.4375,18.46875 L 2.4375,26.1875 C 2.4375,26.46315 2.6469898,26.65625 2.875,26.65625 L 5.0575572,26.65625 C 5.5726565,26.662634 5.9886729,27.078651 5.9950572,27.59375 L 7.0909095,26.8125 C 7.2621189,26.685027 8.9741324,26.618972 9.1875,26.625 L 22.125,26.65625 C 22.353012,26.65625 22.5625,26.463149 22.5625,26.1875 L 22.5625,18.46875 L 22.5625,15.71875 L 22.5625,8.90625 C 22.5625,8.6305986 22.353013,8.4375 22.125,8.4375 L 16.15625,8.4375 L 8.375,8.4375 L 2.875,8.4375 z " - id="path4336" - sodipodi:nodetypes="ccccccccccccccccccc" /> + transform="matrix(1.010846,0,0,1.029732,-5.552971,-15.17001)" + style="opacity:1;fill:white;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M 13.257119,24.626053 C 13.257119,26.227351 11.8279,27.316574 10.863875,27.316574 C 9.5428049,27.316574 8.4706318,26.01697 8.4706318,24.415672 C 8.4706318,23.024119 9.2055946,21.514771 10.526665,21.514771 C 11.847736,21.514771 13.257119,23.360971 13.257119,24.626053 z " + id="path5157" + sodipodi:nodetypes="csssc" /> + <path + sodipodi:type="arc" + style="opacity:1;fill:#5c3566;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path5162" + sodipodi:cx="10.169642" + sodipodi:cy="24.3125" + sodipodi:rx="1.2410715" + sodipodi:ry="1.2946428" + d="M 11.410714 24.3125 A 1.2410715 1.2946428 0 1 1 8.928571,24.3125 A 1.2410715 1.2946428 0 1 1 11.410714 24.3125 z" + transform="matrix(0.805757,0,0,0.772415,-3.184731,-8.820615)" /> <path - transform="matrix(2.539812,0,0,0.410815,-56.0204,67.80212)" - sodipodi:type="arc" - style="opacity:1;color:black;fill:url(#radialGradient4179);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" - id="path4306" - sodipodi:cx="31.112698" - sodipodi:cy="19.008621" - sodipodi:rx="8.6620579" - sodipodi:ry="8.6620579" - d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1 22.45064,19.008621 A 8.6620579 8.6620579 0 1 1 39.774755 19.008621 z" /> + transform="matrix(0.596326,-0.813274,-0.562251,-0.766804,22.42583,37.43862)" + style="opacity:1;fill:#975fa3;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M 13.257119,24.626053 C 13.257119,26.227351 11.8279,27.316574 10.863875,27.316574 C 9.5428049,27.316574 8.4706318,26.01697 8.4706318,24.415672 C 8.4706318,23.024119 9.2055946,21.514771 10.526665,21.514771 C 11.847736,21.514771 13.257119,23.360971 13.257119,24.626053 z " + id="path5167" + sodipodi:nodetypes="csssc" /> + <path + transform="matrix(0.447398,-0.672135,-0.421833,-0.633728,21.07418,32.19024)" + style="opacity:1;fill:white;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M 13.257119,24.626053 C 13.257119,26.227351 11.8279,27.316574 10.863875,27.316574 C 9.5428049,27.316574 8.4706318,26.01697 8.4706318,24.415672 C 8.4706318,23.024119 9.2055946,21.514771 10.526665,21.514771 C 11.847736,21.514771 13.257119,23.360971 13.257119,24.626053 z " + id="path5169" + sodipodi:nodetypes="csssc" /> <path - style="opacity:1;fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:1.69608581;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 2.875,7.5 C 2.1210885,7.5 1.5,8.1265217 1.5,8.90625 L 1.5,15.71875 L 1.5,18.46875 L 1.5,26.613999 C 1.5,27.393727 2.1210885,28.02025 2.875,28.020249 L 4.9145119,28.020249 L 4.9145119,30.532781 L 8.1141033,27.991218 L 22.125,28.020249 C 22.878911,28.020249 23.5,27.393726 23.5,26.613999 L 23.5,18.46875 L 23.5,15.71875 L 23.5,8.90625 C 23.5,8.1265221 22.878912,7.5000001 22.125,7.5 L 16.15625,7.5 L 8.375,7.5 L 2.875,7.5 z " - id="path5534" - transform="matrix(0.590909,0,0,0.588279,0.613639,3.087907)" - sodipodi:nodetypes="cccccccccccccccccc" /> + sodipodi:type="arc" + style="opacity:1;fill:#5c3566;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path5171" + sodipodi:cx="10.169642" + sodipodi:cy="24.3125" + sodipodi:rx="1.2410715" + sodipodi:ry="1.2946428" + d="M 11.410714 24.3125 A 1.2410715 1.2946428 0 1 1 8.928571,24.3125 A 1.2410715 1.2946428 0 1 1 11.410714 24.3125 z" + transform="matrix(0.805756,0,0,0.784291,6.815275,-9.124735)" /> + <rect + style="opacity:1;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect5215" + width="5.6071429" + height="2.1785715" + x="16" + y="27" + transform="matrix(0.724348,0,0,0.459012,-2.641559,0.565398)" + rx="0.87366539" + ry="1.0892857" /> <path - transform="matrix(0.546584,0,0,0.546584,1.167699,3.888195)" - style="fill:none;fill-opacity:1;stroke:white;stroke-width:1.82954407;stroke-miterlimit:4;stroke-opacity:1" - d="M 2.875,8.4375 C 2.6469872,8.4375 2.4375,8.6305983 2.4375,8.90625 L 2.4375,15.71875 L 2.4375,18.46875 L 2.4375,26.1875 C 2.4375,26.46315 2.6469898,26.65625 2.875,26.65625 L 5.0575572,26.65625 C 5.5726565,26.662634 5.9886729,27.078651 5.9950572,27.59375 L 7.0909095,26.8125 C 7.2621189,26.685027 8.9741324,26.618972 9.1875,26.625 L 22.125,26.65625 C 22.353012,26.65625 22.5625,26.463149 22.5625,26.1875 L 22.5625,18.46875 L 22.5625,15.71875 L 22.5625,8.90625 C 22.5625,8.6305986 22.353013,8.4375 22.125,8.4375 L 16.15625,8.4375 L 8.375,8.4375 L 2.875,8.4375 z " - id="path5536" - sodipodi:nodetypes="ccccccccccccccccccc" /> + transform="matrix(0.798987,0,0,0.495994,7.007995,-6.360384)" + style="fill:#f9751a;fill-opacity:1;stroke:none;stroke-width:1.0283047;stroke-miterlimit:4;stroke-opacity:1" + d="M -0.99929609,42.004237 C 2.9290204,42.117701 4.1278823,38.950282 4.9828709,38.950282 C 5.8260957,38.950282 7.1161651,42.240122 10.014606,42.007796 C 9.2074596,43.955072 6.7265914,47.014858 5.6807127,47.014858 C 4.6230593,47.014858 0.31231911,44.880662 -0.99929609,42.004237 z " + id="rect5187" + sodipodi:nodetypes="ccczc" /> + <path + transform="matrix(0.670792,0,0,0.486348,-3.805943,-3.90166)" + style="fill:#3b1941;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M 11.651119,11.193815 C 13.577759,8.2509126 16.249277,11.481501 17.614226,12.804399 L 14.761306,13.747613 L 11.651119,11.193815 z " + id="path5192" + sodipodi:nodetypes="cccc" /> + <path + transform="matrix(0.851014,0,0,0.554879,-3.938174,-5.194599)" + style="fill:#3b1941;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M 11.689238,9.8218679 C 13.591296,8.0161941 17.174576,11.994261 17.519594,13.650486 L 14.543472,12.891665 L 11.689238,9.8218679 z " + id="rect5189" + sodipodi:nodetypes="cccc" /> + <path + transform="matrix(0.798987,0,0,0.495994,7.007995,-6.360384)" + style="fill:url(#linearGradient6823);fill-opacity:1;stroke:none;stroke-width:1.0283047;stroke-miterlimit:4;stroke-opacity:1" + d="M -0.99929609,42.004237 C 2.9290204,42.117701 4.1278823,38.950282 4.9828709,38.950282 C 5.8260957,38.950282 7.1161651,42.240122 10.014606,42.007796 C 9.2074596,43.955072 6.7265914,47.014858 5.6807127,47.014858 C 4.6230593,47.014858 0.31231911,44.880662 -0.99929609,42.004237 z " + id="path6815" + sodipodi:nodetypes="ccczc" /> </g> </svg>
--- a/pidgin/pixmaps/icons/32/Makefile.am Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/pixmaps/icons/32/Makefile.am Fri Apr 27 05:20:10 2007 +0000 @@ -2,7 +2,7 @@ EXTRA_DIST = pidgin.png -pidginiconspixdir = $(datadir)/pixmaps/pidgin/icons/32 +pidginiconspixdir = $(datadir)/icons/hicolor/32x32/apps pidginiconspix_DATA = $(EXTRA_DIST)
--- a/pidgin/pixmaps/icons/32/scalable/pidgin.svg Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/pixmaps/icons/32/scalable/pidgin.svg Fri Apr 27 05:20:10 2007 +0000 @@ -14,15 +14,87 @@ id="svg4345" sodipodi:version="0.32" inkscape:version="0.44.1" - sodipodi:docbase="/home/hbons/Desktop" - sodipodi:docname="pidgin-321.svg" - inkscape:export-filename="/home/hbons/Desktop/pidgin.png" + sodipodi:docbase="/home/hbons/Desktop/icons/32/scalable" + sodipodi:docname="pidgin.svg" + inkscape:export-filename="/home/hbons/Desktop/pidgin32.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" version="1.0"> <defs id="defs4347"> <linearGradient + inkscape:collect="always" + id="linearGradient6817"> + <stop + style="stop-color:white;stop-opacity:1;" + offset="0" + id="stop6819" /> + <stop + style="stop-color:white;stop-opacity:0;" + offset="1" + id="stop6821" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient6563"> + <stop + style="stop-color:white;stop-opacity:1;" + offset="0" + id="stop6565" /> + <stop + style="stop-color:white;stop-opacity:0;" + offset="1" + id="stop6567" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient6537"> + <stop + style="stop-color:white;stop-opacity:1;" + offset="0" + id="stop6539" /> + <stop + style="stop-color:white;stop-opacity:0;" + offset="1" + id="stop6541" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient6506"> + <stop + style="stop-color:#eeeeec;stop-opacity:1;" + offset="0" + id="stop6508" /> + <stop + style="stop-color:#eeeeec;stop-opacity:0;" + offset="1" + id="stop6510" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient5304"> + <stop + style="stop-color:#2e3436;stop-opacity:1;" + offset="0" + id="stop5306" /> + <stop + style="stop-color:#2e3436;stop-opacity:0;" + offset="1" + id="stop5308" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient5280"> + <stop + style="stop-color:#82508e;stop-opacity:1;" + offset="0" + id="stop5282" /> + <stop + style="stop-color:#82508e;stop-opacity:0;" + offset="1" + id="stop5284" /> + </linearGradient> + <linearGradient id="linearGradient2804"> <stop style="stop-color:black;stop-opacity:0;" @@ -37,61 +109,6 @@ offset="1" id="stop2808" /> </linearGradient> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient2804" - id="linearGradient1516" - gradientUnits="userSpaceOnUse" - x1="21.875" - y1="48.000977" - x2="21.875" - y2="40" /> - <radialGradient - inkscape:collect="always" - xlink:href="#linearGradient2781" - id="radialGradient1514" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(2,0,0,0.8,36,8.8)" - cx="1" - cy="44" - fx="1" - fy="44" - r="5" /> - <linearGradient - inkscape:collect="always" - id="linearGradient2781"> - <stop - style="stop-color:black;stop-opacity:1;" - offset="0" - id="stop2783" /> - <stop - style="stop-color:black;stop-opacity:0;" - offset="1" - id="stop2785" /> - </linearGradient> - <radialGradient - inkscape:collect="always" - xlink:href="#linearGradient2781" - id="radialGradient1512" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(2,0,0,0.8,-13,-79.2)" - cx="1" - cy="44" - fx="1" - fy="44" - r="5" /> - <linearGradient - inkscape:collect="always" - id="linearGradient5235"> - <stop - style="stop-color:#2e3436;stop-opacity:1;" - offset="0" - id="stop5237" /> - <stop - style="stop-color:#2e3436;stop-opacity:0;" - offset="1" - id="stop5239" /> - </linearGradient> <radialGradient inkscape:collect="always" xlink:href="#linearGradient25546" @@ -148,38 +165,61 @@ offset="1.0000000" id="stop3804" /> </linearGradient> - <linearGradient - inkscape:collect="always" - id="linearGradient3816"> - <stop - style="stop-color:#000000;stop-opacity:1;" - offset="0" - id="stop3818" /> - <stop - style="stop-color:#000000;stop-opacity:0;" - offset="1" - id="stop3820" /> - </linearGradient> <radialGradient inkscape:collect="always" - xlink:href="#linearGradient3816" - id="radialGradient4179" - gradientUnits="userSpaceOnUse" - cx="31.112698" - cy="19.008621" - fx="31.112698" - fy="19.008621" - r="8.6620579" /> - <radialGradient + xlink:href="#linearGradient5280" + id="radialGradient5286" + cx="15.004828" + cy="39.80859" + fx="15.004828" + fy="39.80859" + r="9.7225161" + gradientTransform="matrix(1,0,0,0.732283,0,10.65742)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5304" + id="linearGradient5310" + x1="12.606371" + y1="15.069461" + x2="12.606371" + y2="21.152372" + gradientUnits="userSpaceOnUse" /> + <linearGradient inkscape:collect="always" - xlink:href="#linearGradient5235" - id="radialGradient5241" - cx="23.234518" - cy="40.688972" - fx="23.234518" - fy="40.688972" - r="16.956987" - gradientTransform="matrix(1,0,0,0.133183,0,35.2699)" + xlink:href="#linearGradient6506" + id="linearGradient6512" + x1="15.645709" + y1="39.743458" + x2="15.645709" + y2="53.502155" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6537" + id="linearGradient6543" + x1="30.5" + y1="0.033532728" + x2="30.5" + y2="23.559282" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6563" + id="linearGradient6569" + x1="-1.6841649" + y1="39.902092" + x2="5.5366187" + y2="44.272076" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6817" + id="linearGradient6823" + x1="0.23931108" + y1="38.950283" + x2="5.7089725" + y2="42.982571" gradientUnits="userSpaceOnUse" /> </defs> <sodipodi:namedview @@ -189,9 +229,9 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="17.236022" - inkscape:cx="24.250455" - inkscape:cy="19.077116" + inkscape:zoom="21.220032" + inkscape:cx="25.558911" + inkscape:cy="16.938593" inkscape:current-layer="layer1" showgrid="true" inkscape:grid-bbox="true" @@ -200,8 +240,12 @@ inkscape:window-height="966" inkscape:window-x="3" inkscape:window-y="25" + showguides="true" + inkscape:guide-bbox="true" + inkscape:grid-points="false" width="32px" - height="32px" /> + height="32px" + inkscape:object-bbox="true" /> <metadata id="metadata4350"> <rdf:RDF> @@ -217,76 +261,153 @@ id="layer1" inkscape:label="Layer 1" inkscape:groupmode="layer"> - <g - id="g1504" - style="opacity:0.12663754" - transform="matrix(0.697369,0,0,0.818888,-1.473712,-7.73599)"> - <rect - transform="scale(-1,-1)" - y="-48" - x="-11" - height="8" - width="10" - id="rect1506" - style="opacity:1;color:black;fill:url(#radialGradient1512);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> - <rect - y="40" - x="38" - height="8" - width="10" - id="rect1508" - style="opacity:1;color:black;fill:url(#radialGradient1514);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> - <rect - y="40" - x="11" - height="8" - width="27" - id="rect1510" - style="opacity:1;color:black;fill:url(#linearGradient1516);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> - </g> + <rect + style="opacity:0.23144106;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect6514" + width="5.0217423" + height="5.2252574" + x="42.978256" + y="44" + rx="0.28473777" + ry="2.6126287" + transform="matrix(4.779203,0,0,0.382753,-205.4017,13.15888)" /> + <path + sodipodi:type="inkscape:offset" + inkscape:radius="-1.0057179" + inkscape:original="M 20.53125 1.5 C 17.192693 1.5 14.5 4.611235 14.5 8.46875 L 14.5 20.53125 C 14.5 24.388765 17.192693 27.5 20.53125 27.5 L 34.53125 27.5 L 34.53125 31.09375 L 39.34375 27.5 L 41.5 27.5 C 45.512737 27.5 46.5 24.38319 46.5 20.53125 L 46.5 8.46875 C 46.5 4.6112353 43.807307 1.5 40.46875 1.5 L 20.53125 1.5 z " + style="fill:none;fill-opacity:1;stroke:white;stroke-width:1.47727883;stroke-miterlimit:4;stroke-opacity:1" + id="path6504" + d="M 20.53125,2.5 C 17.817519,2.5 15.5,5.0792547 15.5,8.46875 L 15.5,20.53125 C 15.5,23.920745 17.817519,26.5 20.53125,26.5 L 34.53125,26.5 C 35.082213,26.503178 35.528072,26.949037 35.53125,27.5 L 35.53125,29.09375 L 38.75,26.6875 C 38.923102,26.563771 39.130983,26.498125 39.34375,26.5 L 41.5,26.5 C 43.245978,26.5 44.034662,25.931926 44.625,24.9375 C 45.215338,23.943074 45.5,22.371297 45.5,20.53125 L 45.5,8.46875 C 45.5,5.079255 43.182481,2.5 40.46875,2.5 L 20.53125,2.5 z " + transform="matrix(0.67692,0,0,0.67692,0.161535,-0.515354)" /> + <path + style="fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:1.46586692;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 20.53125,1.5 C 17.192693,1.5 14.5,4.611235 14.5,8.46875 L 14.5,20.53125 C 14.5,24.388765 17.428915,28.139948 20.767472,28.139948 L 33.409288,28.041495 L 33.415412,31.845969 L 38.723454,28.076231 L 42.130099,28.139948 C 46.142836,28.139948 46.5,24.580097 46.5,20.728157 L 46.5,8.46875 C 46.5,4.6112353 43.807307,1.5 40.46875,1.5 L 20.53125,1.5 z " + id="rect5498" + sodipodi:nodetypes="cccccccccccc" + transform="matrix(0.687501,0,0,0.67692,-0.468758,-0.515381)" /> + <path + transform="matrix(0.668893,0,0,0.668627,8.626692e-2,-0.192463)" + style="fill:url(#linearGradient6543);fill-opacity:1;stroke:white;stroke-width:1.49530375;stroke-miterlimit:4;stroke-opacity:1" + d="M 20.53125,2.53125 C 17.841732,2.53125 15.53125,5.0973912 15.53125,8.46875 L 15.53125,20.53125 C 15.53125,23.902609 17.841732,26.46875 20.53125,26.46875 L 33.967629,26.46875 C 34.534122,26.476048 34.991581,26.933507 34.998879,27.5 L 34.998879,29 L 38.71875,26.65625 C 38.901723,26.528628 39.120742,26.462922 39.34375,26.46875 L 42.415884,26.46875 C 45.139435,26.46875 45.46875,24.282574 45.46875,20.53125 L 45.46875,8.46875 C 45.46875,5.0973915 43.158268,2.53125 40.46875,2.53125 L 20.53125,2.53125 z " + id="path6535" + sodipodi:nodetypes="cccccccccccccc" /> + <path + style="opacity:1;fill:#82508e;fill-opacity:1;stroke:#3b1941;stroke-width:1.51128328;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 15,13 C 8.3759979,13 3,18.600001 3,25.5 C 4.8460021,40.483064 0.49299658,38.484005 0.052646307,45.33795 C 0.052646307,47.422072 1.0380664,48.413461 3.1446965,48.413461 C 4.3321851,48.413461 29.360035,48.5596 32.051034,48.5596 C 34.165161,48.5596 34,46.5 34,46.5 C 34,43.834589 27.597902,41.598052 25.813453,39.641526 C 23.985035,37.640505 26,30.5 26,30.5 C 26.641306,28.9702 27,27.275084 27,25.5 C 27,18.600001 21.624002,13 15,13 z " + id="path5176" + sodipodi:nodetypes="cccccszcsc" + transform="matrix(0.67692,0,0,0.646801,0.464358,-0.908413)" /> <path sodipodi:type="arc" - style="opacity:0.52838428;fill:url(#radialGradient5241);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path4340" - sodipodi:cx="23.234518" - sodipodi:cy="40.688972" - sodipodi:rx="16.956987" - sodipodi:ry="2.2583797" - d="M 40.191505 40.688972 A 16.956987 2.2583797 0 1 1 6.2775307,40.688972 A 16.956987 2.2583797 0 1 1 40.191505 40.688972 z" - transform="matrix(1.208941,0,0,1.980928,-1.589151,7.924388)" /> + style="opacity:1;fill:url(#radialGradient5286);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path5273" + sodipodi:cx="15.004828" + sodipodi:cy="39.80859" + sodipodi:rx="9.7225161" + sodipodi:ry="7.119638" + d="M 24.727345 39.80859 A 9.7225161 7.119638 0 1 1 5.2823124,39.80859 A 9.7225161 7.119638 0 1 1 24.727345 39.80859 z" + transform="matrix(0.661428,0,0,0.760624,1.662895e-2,-5.166292)" /> + <path + style="opacity:0.5152838;fill:#5c3466;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M -42.833794,47.629347 C -42.833794,47.629347 -43.26687,44.687985 -40.223294,37.951005 C -40.223294,37.951005 -39.03087,40.509965 -38.631892,41.678764 C -39.153711,41.596001 -40.372039,41.685633 -40.372039,41.685633 C -40.038351,42.463101 -38.163796,45.952105 -36.121045,48.058218 C -37.780497,47.329365 -39.471111,47.196178 -39.471111,47.196178 C -39.009636,48.111847 -37.250115,48.69173 -36.943887,49.110993 C -36.943887,49.110993 -42.597127,49.864236 -42.833794,47.629347 z " + id="rect5312" + sodipodi:nodetypes="cccccccc" + transform="matrix(0.797045,0,0,0.733236,35.01127,-5.421684)" /> + <path + style="opacity:0.5152838;fill:#5c3466;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M -49.441852,47.4154 C -48.364983,40.273995 -40.690447,44.765623 -40.961409,37.951005 C -40.961409,37.951005 -39.025024,40.280009 -38.974466,41.581367 C -39.496285,41.498604 -39.881988,41.516405 -39.881988,41.516405 C -39.5483,42.293873 -38.196948,45.748112 -36.154197,47.854225 C -37.813649,47.125372 -38.925816,46.898039 -38.925816,46.898039 C -38.847603,47.794771 -38.376224,47.369394 -38.122982,48.215235 C -42.942294,48.046898 -46.252916,49.195571 -49.441852,47.4154 z " + id="path5317" + sodipodi:nodetypes="cccccccc" + transform="matrix(-0.724368,0,0,0.660383,-12.52413,-1.979892)" /> + <path + transform="matrix(0.660903,0,0,0.627207,0.731515,-0.320103)" + style="opacity:0.31004363;fill:url(#linearGradient5310);fill-opacity:1;stroke:url(#linearGradient6512);stroke-width:1.55319357;stroke-miterlimit:4;stroke-opacity:1" + d="M 15,14.0625 C 8.9877035,14.0625 4.0789961,19.13808 4.0625,25.46875 C 4.0624722,25.479427 4.0625,25.489316 4.0625,25.5 C 4.9744187,33.020507 4.3062656,37.469969 2.59375,40.59375 C -0.19778709,46.24536 1.5610206,47.490284 3.9033639,47.490284 C 5.8399452,47.490284 23.958121,47.46049 29.784094,47.46049 C 30.951301,47.46049 32.9375,47.964563 32.9375,46.5 C 32.9375,46.278257 32.737749,45.861323 32.1875,45.34375 C 31.637251,44.826177 30.81426,44.270409 29.90625,43.71875 C 28.99824,43.167091 28.02821,42.609033 27.15625,42.0625 C 26.28429,41.515967 25.511654,41.005793 24.96875,40.28125 C 24.358745,39.467156 24.078806,38.510169 24.024342,37.46875 C 23.969878,36.427331 24.107721,35.310041 24.224561,34.25 C 24.458241,32.129917 24.96875,30.28125 24.96875,30.28125 C 24.98374,30.216952 25.004663,30.154183 25.03125,30.09375 C 25.618731,28.692346 25.9375,27.131297 25.9375,25.5 C 25.9375,19.154404 21.022436,14.0625 15,14.0625 z " + id="path5241" + sodipodi:nodetypes="csscccssssssscssc" /> <path - style="opacity:1;fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:1.16880918;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 2.875,7.5 C 2.1210885,7.5 1.5,8.1265217 1.5,8.90625 L 1.5,15.71875 L 1.5,18.46875 L 1.5,26.189031 C 1.5,26.968759 2.1210885,27.595282 2.875,27.595281 L 4.9145119,27.595281 L 4.9145119,30.532781 L 9.2020155,27.56625 L 22.125,27.595281 C 22.878911,27.595281 23.5,26.968758 23.5,26.189031 L 23.5,18.46875 L 23.5,15.71875 L 23.5,8.90625 C 23.5,8.1265221 22.878912,7.5000001 22.125,7.5 L 16.15625,7.5 L 8.375,7.5 L 2.875,7.5 z " - id="path4334" - transform="matrix(-0.863636,0,0,0.847582,31.79545,-3.856871)" - sodipodi:nodetypes="cccccccccccccccccc" /> + transform="matrix(-0.861857,-0.809791,0.812609,-0.76352,-3.676568,42.37505)" + style="opacity:1;fill:#a46bb0;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M 13.257119,24.626053 C 13.257119,26.227351 11.8279,27.316574 10.863875,27.316574 C 9.5428049,27.316574 8.4706318,26.01697 8.4706318,24.415672 C 8.4706318,23.024119 9.2055946,21.514771 10.526665,21.514771 C 11.847736,21.514771 13.257119,23.360971 13.257119,24.626053 z " + id="path5160" + sodipodi:nodetypes="csssc" /> + <path + transform="matrix(1.010846,0,0,1.029732,-3.562503,-10.12874)" + style="opacity:1;fill:white;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M 13.257119,24.626053 C 13.257119,26.227351 11.8279,27.316574 10.863875,27.316574 C 9.5428049,27.316574 8.4706318,26.01697 8.4706318,24.415672 C 8.4706318,23.024119 9.2055946,21.514771 10.526665,21.514771 C 11.847736,21.514771 13.257119,23.360971 13.257119,24.626053 z " + id="path5157" + sodipodi:nodetypes="csssc" /> <path - transform="matrix(-0.84472,0,0,0.822913,31.55901,-3.443332)" - style="fill:none;fill-opacity:1;stroke:white;stroke-width:1.19940674;stroke-miterlimit:4;stroke-opacity:1" - d="M 2.875,8.4375 C 2.6469872,8.4375 2.4375,8.6305983 2.4375,8.90625 L 2.4375,15.71875 L 2.4375,18.46875 L 2.4375,26.1875 C 2.4375,26.46315 2.6469898,26.65625 2.875,26.65625 L 5.0575572,26.65625 C 5.5726565,26.662634 5.9886729,27.078651 5.9950572,27.59375 L 5.9950572,28.5625 L 8.59375,26.8125 C 8.7649594,26.685027 8.9741324,26.618972 9.1875,26.625 L 22.125,26.65625 C 22.353012,26.65625 22.5625,26.463149 22.5625,26.1875 L 22.5625,18.46875 L 22.5625,15.71875 L 22.5625,8.90625 C 22.5625,8.6305986 22.353013,8.4375 22.125,8.4375 L 16.15625,8.4375 L 8.375,8.4375 L 2.875,8.4375 z " - id="path4336" - sodipodi:nodetypes="cccccccccccccccccccc" /> + sodipodi:type="arc" + style="opacity:1;fill:#5c3566;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path5162" + sodipodi:cx="10.169642" + sodipodi:cy="24.3125" + sodipodi:rx="1.2410715" + sodipodi:ry="1.2946428" + d="M 11.410714 24.3125 A 1.2410715 1.2946428 0 1 1 8.928571,24.3125 A 1.2410715 1.2946428 0 1 1 11.410714 24.3125 z" + transform="matrix(0.805757,0,0,0.772415,-1.194263,-3.779337)" /> + <path + transform="matrix(0.596326,-0.813274,-0.562251,-0.766804,24.4163,42.47989)" + style="opacity:1;fill:#975fa3;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M 13.257119,24.626053 C 13.257119,26.227351 11.8279,27.316574 10.863875,27.316574 C 9.5428049,27.316574 8.4706318,26.01697 8.4706318,24.415672 C 8.4706318,23.024119 9.2055946,21.514771 10.526665,21.514771 C 11.847736,21.514771 13.257119,23.360971 13.257119,24.626053 z " + id="path5167" + sodipodi:nodetypes="csssc" /> <path - transform="matrix(2.539812,0,0,0.410815,-57.02039,67.80211)" + transform="matrix(0.447398,-0.542185,-0.421833,-0.511203,23.06465,33.31996)" + style="opacity:1;fill:white;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M 13.257119,24.626053 C 13.257119,26.227351 11.8279,27.316574 10.863875,27.316574 C 9.5428049,27.316574 8.4706318,26.01697 8.4706318,24.415672 C 8.4706318,23.024119 9.2055946,21.514771 10.526665,21.514771 C 11.847736,21.514771 13.257119,23.360971 13.257119,24.626053 z " + id="path5169" + sodipodi:nodetypes="csssc" /> + <path sodipodi:type="arc" - style="opacity:1;color:black;fill:url(#radialGradient4179);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" - id="path4306" - sodipodi:cx="31.112698" - sodipodi:cy="19.008621" - sodipodi:rx="8.6620579" - sodipodi:ry="8.6620579" - d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1 22.45064,19.008621 A 8.6620579 8.6620579 0 1 1 39.774755 19.008621 z" /> + style="opacity:1;fill:#5c3566;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path5171" + sodipodi:cx="10.169642" + sodipodi:cy="24.3125" + sodipodi:rx="1.2410715" + sodipodi:ry="1.2946428" + d="M 11.410714 24.3125 A 1.2410715 1.2946428 0 1 1 8.928571,24.3125 A 1.2410715 1.2946428 0 1 1 11.410714 24.3125 z" + transform="matrix(0.805756,0,0,0.784291,8.805745,-4.083452)" /> + <rect + style="opacity:1;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect5215" + width="5.6071429" + height="2.1785715" + x="16" + y="27" + transform="matrix(0.724348,0,0,0.459012,-0.651091,5.606678)" + rx="0.87366539" + ry="1.0892857" /> <path - style="opacity:1;fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:1.16880918;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 2.875,7.5 C 2.1210885,7.5 1.5,8.1265217 1.5,8.90625 L 1.5,15.71875 L 1.5,18.46875 L 1.5,26.189031 C 1.5,26.968759 2.1210885,27.595282 2.875,27.595281 L 4.9145119,27.595281 L 4.9145119,30.532781 L 9.2020155,27.56625 L 22.125,27.595281 C 22.878911,27.595281 23.5,26.968758 23.5,26.189031 L 23.5,18.46875 L 23.5,15.71875 L 23.5,8.90625 C 23.5,8.1265221 22.878912,7.5000001 22.125,7.5 L 16.15625,7.5 L 8.375,7.5 L 2.875,7.5 z " - id="path5528" - transform="matrix(0.863636,0,0,0.847582,-0.795446,3.143135)" - sodipodi:nodetypes="cccccccccccccccccc" /> + transform="matrix(0.798987,0,0,0.495994,8.99846,-1.319104)" + style="fill:#f9751a;fill-opacity:1;stroke:none;stroke-width:1.0283047;stroke-miterlimit:4;stroke-opacity:1" + d="M -0.99929609,42.004237 C 2.9290204,42.117701 4.1278823,38.950282 4.9828709,38.950282 C 5.8260957,38.950282 7.1161651,42.240122 10.014606,42.007796 C 9.2074596,43.955072 6.7265914,47.014858 5.6807127,47.014858 C 4.6230593,47.014858 0.31231911,44.880662 -0.99929609,42.004237 z " + id="rect5187" + sodipodi:nodetypes="ccczc" /> + <path + transform="matrix(0.670792,0,0,0.486348,-1.815475,1.13962)" + style="fill:#3b1941;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M 11.651119,11.193815 C 13.577759,8.2509126 16.249277,11.481501 17.614226,12.804399 L 14.761306,13.747613 L 11.651119,11.193815 z " + id="path5192" + sodipodi:nodetypes="cccc" /> <path - transform="matrix(0.84472,0,0,0.822913,-0.559006,3.556674)" - style="fill:none;fill-opacity:1;stroke:white;stroke-width:1.19940674;stroke-miterlimit:4;stroke-opacity:1" - d="M 2.875,8.4375 C 2.6469872,8.4375 2.4375,8.6305983 2.4375,8.90625 L 2.4375,15.71875 L 2.4375,18.46875 L 2.4375,26.1875 C 2.4375,26.46315 2.6469898,26.65625 2.875,26.65625 L 5.0575572,26.65625 C 5.5726565,26.662634 5.9886729,27.078651 5.9950572,27.59375 L 5.9950572,28.5625 L 8.59375,26.8125 C 8.7649594,26.685027 8.9741324,26.618972 9.1875,26.625 L 22.125,26.65625 C 22.353012,26.65625 22.5625,26.463149 22.5625,26.1875 L 22.5625,18.46875 L 22.5625,15.71875 L 22.5625,8.90625 C 22.5625,8.6305986 22.353013,8.4375 22.125,8.4375 L 16.15625,8.4375 L 8.375,8.4375 L 2.875,8.4375 z " - id="path5530" - sodipodi:nodetypes="cccccccccccccccccccc" /> + transform="matrix(0.851014,0,0,0.554879,-1.947706,-0.153319)" + style="fill:#3b1941;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M 11.689238,9.8218679 C 13.591296,8.0161941 17.174576,11.994261 17.519594,13.650486 L 14.543472,12.891665 L 11.689238,9.8218679 z " + id="rect5189" + sodipodi:nodetypes="cccc" /> + <path + transform="matrix(0.798987,0,0,0.495994,22.79842,2.215302)" + style="fill:url(#linearGradient6569);fill-opacity:1;stroke:none;stroke-width:1.0283047;stroke-miterlimit:4;stroke-opacity:1" + d="M -0.99929609,42.004237 C 3.5188333,45.348102 4.1278823,38.950282 4.9828709,38.950282 C 5.8260957,38.950282 6.1724645,45.375511 10.014606,42.007796 C 9.2074596,43.955072 6.7265914,47.014858 5.6807127,47.014858 C 4.6230593,47.014858 0.31231911,44.880662 -0.99929609,42.004237 z " + id="path6561" + sodipodi:nodetypes="czczc" /> + <path + transform="matrix(0.798987,0,0,0.495994,8.99846,-1.319104)" + style="fill:url(#linearGradient6823);fill-opacity:1.0;stroke:none;stroke-width:1.0283047;stroke-miterlimit:4;stroke-opacity:1" + d="M -0.99929609,42.004237 C 2.9290204,42.117701 4.1278823,38.950282 4.9828709,38.950282 C 5.8260957,38.950282 7.1161651,42.240122 10.014606,42.007796 C 9.2074596,43.955072 6.7265914,47.014858 5.6807127,47.014858 C 4.6230593,47.014858 0.31231911,44.880662 -0.99929609,42.004237 z " + id="path6815" + sodipodi:nodetypes="ccczc" /> </g> </svg>
--- a/pidgin/pixmaps/icons/48/Makefile.am Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/pixmaps/icons/48/Makefile.am Fri Apr 27 05:20:10 2007 +0000 @@ -2,7 +2,7 @@ EXTRA_DIST = pidgin.png -pidginiconspixdir = $(datadir)/pixmaps/pidgin/icons/48 +pidginiconspixdir = $(datadir)/icons/hicolor/48x48/apps pidginiconspix_DATA = $(EXTRA_DIST)
--- a/pidgin/pixmaps/icons/48/scalable/Makefile.am Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/pixmaps/icons/48/scalable/Makefile.am Fri Apr 27 05:20:10 2007 +0000 @@ -1,1 +1,6 @@ -EXTRA_DIST = pidgin.svg +EXTRA_DIST = pidgin.svg + +pidginiconspixdir = $(datadir)/icons/hicolor/scalable/apps + +pidginiconspix_DATA = $(EXTRA_DIST) +
--- a/pidgin/pixmaps/icons/48/scalable/pidgin.svg Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/pixmaps/icons/48/scalable/pidgin.svg Fri Apr 27 05:20:10 2007 +0000 @@ -14,14 +14,86 @@ id="svg4345" sodipodi:version="0.32" inkscape:version="0.44.1" - sodipodi:docbase="/home/hbons/Desktop" - sodipodi:docname="pidgin-32.svg" + sodipodi:docbase="/home/hbons/Desktop/icons/48/scalable" + sodipodi:docname="pidgin.svg" inkscape:export-filename="/home/hbons/Desktop/pidgin.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90"> <defs id="defs4347"> <linearGradient + inkscape:collect="always" + id="linearGradient6563"> + <stop + style="stop-color:white;stop-opacity:1;" + offset="0" + id="stop6565" /> + <stop + style="stop-color:white;stop-opacity:0;" + offset="1" + id="stop6567" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient6537"> + <stop + style="stop-color:white;stop-opacity:1;" + offset="0" + id="stop6539" /> + <stop + style="stop-color:white;stop-opacity:0;" + offset="1" + id="stop6541" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient6506"> + <stop + style="stop-color:#eeeeec;stop-opacity:1;" + offset="0" + id="stop6508" /> + <stop + style="stop-color:#eeeeec;stop-opacity:0;" + offset="1" + id="stop6510" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient6493"> + <stop + style="stop-color:#eeeeec;stop-opacity:1;" + offset="0" + id="stop6495" /> + <stop + style="stop-color:#eeeeec;stop-opacity:0;" + offset="1" + id="stop6497" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient5304"> + <stop + style="stop-color:#2e3436;stop-opacity:1;" + offset="0" + id="stop5306" /> + <stop + style="stop-color:#2e3436;stop-opacity:0;" + offset="1" + id="stop5308" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient5280"> + <stop + style="stop-color:#82508e;stop-opacity:1;" + offset="0" + id="stop5282" /> + <stop + style="stop-color:#82508e;stop-opacity:0;" + offset="1" + id="stop5284" /> + </linearGradient> + <linearGradient id="linearGradient2804"> <stop style="stop-color:black;stop-opacity:0;" @@ -36,61 +108,6 @@ offset="1" id="stop2808" /> </linearGradient> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient2804" - id="linearGradient1516" - gradientUnits="userSpaceOnUse" - x1="21.875" - y1="48.000977" - x2="21.875" - y2="40" /> - <radialGradient - inkscape:collect="always" - xlink:href="#linearGradient2781" - id="radialGradient1514" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(2,0,0,0.8,36,8.8)" - cx="1" - cy="44" - fx="1" - fy="44" - r="5" /> - <linearGradient - inkscape:collect="always" - id="linearGradient2781"> - <stop - style="stop-color:black;stop-opacity:1;" - offset="0" - id="stop2783" /> - <stop - style="stop-color:black;stop-opacity:0;" - offset="1" - id="stop2785" /> - </linearGradient> - <radialGradient - inkscape:collect="always" - xlink:href="#linearGradient2781" - id="radialGradient1512" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(2,0,0,0.8,-13,-79.2)" - cx="1" - cy="44" - fx="1" - fy="44" - r="5" /> - <linearGradient - inkscape:collect="always" - id="linearGradient5235"> - <stop - style="stop-color:#2e3436;stop-opacity:1;" - offset="0" - id="stop5237" /> - <stop - style="stop-color:#2e3436;stop-opacity:0;" - offset="1" - id="stop5239" /> - </linearGradient> <radialGradient inkscape:collect="always" xlink:href="#linearGradient25546" @@ -147,39 +164,71 @@ offset="1.0000000" id="stop3804" /> </linearGradient> - <linearGradient - inkscape:collect="always" - id="linearGradient3816"> - <stop - style="stop-color:#000000;stop-opacity:1;" - offset="0" - id="stop3818" /> - <stop - style="stop-color:#000000;stop-opacity:0;" - offset="1" - id="stop3820" /> - </linearGradient> <radialGradient inkscape:collect="always" - xlink:href="#linearGradient3816" - id="radialGradient4179" - gradientUnits="userSpaceOnUse" - cx="31.112698" - cy="19.008621" - fx="31.112698" - fy="19.008621" - r="8.6620579" /> - <radialGradient + xlink:href="#linearGradient5280" + id="radialGradient5286" + cx="15.004828" + cy="39.80859" + fx="15.004828" + fy="39.80859" + r="9.7225161" + gradientTransform="matrix(1,0,0,0.732283,0,10.65742)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5304" + id="linearGradient5310" + x1="12.606371" + y1="15.069461" + x2="12.606371" + y2="23.043955" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6493" + id="linearGradient6499" + x1="3.3105288" + y1="43.5" + x2="5.6917014" + y2="43.5" + gradientUnits="userSpaceOnUse" /> + <linearGradient inkscape:collect="always" - xlink:href="#linearGradient5235" - id="radialGradient5241" - cx="23.234518" - cy="40.688972" - fx="23.234518" - fy="40.688972" - r="16.956987" - gradientTransform="matrix(1,0,0,0.133183,0,35.2699)" + xlink:href="#linearGradient6506" + id="linearGradient6512" + x1="15.645709" + y1="39.743458" + x2="15.645709" + y2="53.502155" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6537" + id="linearGradient6543" + x1="30.5" + y1="0.033532728" + x2="30.5" + y2="23.559282" gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6563" + id="linearGradient6569" + x1="-1.6841649" + y1="39.902092" + x2="5.5366187" + y2="44.272076" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6563" + id="linearGradient6573" + gradientUnits="userSpaceOnUse" + x1="12.01321" + y1="38.950283" + x2="5.5366187" + y2="44.272076" /> </defs> <sodipodi:namedview id="base" @@ -188,9 +237,9 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="13.062462" - inkscape:cx="40.814762" - inkscape:cy="25.717712" + inkscape:zoom="1.1545694" + inkscape:cx="31.681369" + inkscape:cy="18.601404" inkscape:current-layer="layer1" showgrid="true" inkscape:grid-bbox="true" @@ -198,7 +247,10 @@ inkscape:window-width="1274" inkscape:window-height="966" inkscape:window-x="3" - inkscape:window-y="25" /> + inkscape:window-y="25" + showguides="true" + inkscape:guide-bbox="true" + inkscape:grid-points="true" /> <metadata id="metadata4350"> <rdf:RDF> @@ -214,80 +266,166 @@ id="layer1" inkscape:label="Layer 1" inkscape:groupmode="layer"> - <g - id="g1504" - style="opacity:0.12663754" - transform="matrix(0.851064,0,0,0.999995,3.148928,-3.9998)"> - <rect - transform="scale(-1,-1)" - y="-48" - x="-11" - height="8" - width="10" - id="rect1506" - style="opacity:1;color:black;fill:url(#radialGradient1512);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> - <rect - y="40" - x="38" - height="8" - width="10" - id="rect1508" - style="opacity:1;color:black;fill:url(#radialGradient1514);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> - <rect - y="40" - x="11" - height="8" - width="27" - id="rect1510" - style="opacity:1;color:black;fill:url(#linearGradient1516);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> - </g> + <rect + style="opacity:0.23144105;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect6514" + width="5.0217423" + height="5.2252574" + x="42.978256" + y="44" + rx="0.28473777" + ry="2.6126287" + transform="matrix(7.168827,0,0,0.574134,-308.1037,19.73808)" /> + <path + sodipodi:type="inkscape:offset" + inkscape:radius="-1.0057179" + inkscape:original="M 20.53125 1.5 C 17.192693 1.5 14.5 4.611235 14.5 8.46875 L 14.5 20.53125 C 14.5 24.388765 17.192693 27.5 20.53125 27.5 L 34.53125 27.5 L 34.53125 31.09375 L 39.34375 27.5 L 41.5 27.5 C 45.512737 27.5 46.5 24.38319 46.5 20.53125 L 46.5 8.46875 C 46.5 4.6112353 43.807307 1.5 40.46875 1.5 L 20.53125 1.5 z " + style="fill:none;fill-opacity:1;stroke:white;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + id="path6504" + d="M 20.53125,2.5 C 17.817519,2.5 15.5,5.0792547 15.5,8.46875 L 15.5,20.53125 C 15.5,23.920745 17.817519,26.5 20.53125,26.5 L 34.53125,26.5 C 35.082213,26.503178 35.528072,26.949037 35.53125,27.5 L 35.53125,29.09375 L 38.75,26.6875 C 38.923102,26.563771 39.130983,26.498125 39.34375,26.5 L 41.5,26.5 C 43.245978,26.5 44.034662,25.931926 44.625,24.9375 C 45.215338,23.943074 45.5,22.371297 45.5,20.53125 L 45.5,8.46875 C 45.5,5.079255 43.182481,2.5 40.46875,2.5 L 20.53125,2.5 z " /> + <path + style="fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M 20.53125,1.5 C 17.192693,1.5 14.5,4.611235 14.5,8.46875 L 14.5,20.53125 C 14.5,24.388765 17.192693,27.5 20.53125,27.5 L 34.530203,27.5 L 34.530203,31.107567 L 39.353553,27.485509 L 41.5,27.5 C 45.512737,27.5 46.5,24.38319 46.5,20.53125 L 46.5,8.46875 C 46.5,4.6112353 43.807307,1.5 40.46875,1.5 L 20.53125,1.5 z " + id="rect5498" + sodipodi:nodetypes="cccccccccccc" /> + <path + sodipodi:type="inkscape:offset" + inkscape:radius="-1.044691" + inkscape:original="M 20.53125 1.5 C 17.192693 1.5 14.5 4.611235 14.5 8.46875 L 14.5 20.53125 C 14.5 24.388765 17.192693 27.5 20.53125 27.5 L 34.53125 27.5 L 34.53125 31.09375 L 39.34375 27.5 L 41.5 27.5 C 45.512737 27.5 46.5 24.38319 46.5 20.53125 L 46.5 8.46875 C 46.5 4.6112353 43.807307 1.5 40.46875 1.5 L 20.53125 1.5 z " + style="fill:url(#linearGradient6543);fill-opacity:1.0;stroke:white;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + id="path6535" + d="M 20.53125,2.53125 C 17.841732,2.53125 15.53125,5.0973912 15.53125,8.46875 L 15.53125,20.53125 C 15.53125,23.902609 17.841732,26.46875 20.53125,26.46875 L 34.53125,26.46875 C 35.097743,26.476048 35.555202,26.933507 35.5625,27.5 L 35.5625,29 L 38.71875,26.65625 C 38.901723,26.528628 39.120742,26.462922 39.34375,26.46875 L 41.5,26.46875 C 43.235888,26.46875 44.009537,25.921608 44.59375,24.9375 C 45.177963,23.953392 45.46875,22.367968 45.46875,20.53125 L 45.46875,8.46875 C 45.46875,5.0973915 43.158268,2.53125 40.46875,2.53125 L 20.53125,2.53125 z " /> + <path + style="opacity:1;fill:#82508e;fill-opacity:1;stroke:#3b1941;stroke-width:1.00595677;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 15,13 C 8.3759979,13 3,18.600001 3,25.5 C 4.8460021,40.483064 0.49299658,38.484005 0.052646307,45.33795 C 0.052646307,47.422072 1.0380664,48.413461 3.1446965,48.413461 C 4.3321851,48.413461 29.360035,48.5596 32.051034,48.5596 C 34.165161,48.5596 34,46.5 34,46.5 C 34,43.834589 27.597902,41.598052 25.813453,39.641526 C 23.985035,37.640505 26,30.5 26,30.5 C 26.641306,28.9702 27,27.275084 27,25.5 C 27,18.600001 21.624002,13 15,13 z " + id="path5176" + sodipodi:nodetypes="cccccszcsc" + transform="matrix(1,0,0,0.988192,0.447354,-1.486208)" /> + <path + sodipodi:type="arc" + style="opacity:1;fill:url(#radialGradient5286);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path5273" + sodipodi:cx="15.004828" + sodipodi:cy="39.80859" + sodipodi:rx="9.7225161" + sodipodi:ry="7.119638" + d="M 24.727345 39.80859 A 9.7225161 7.119638 0 1 1 5.2823124,39.80859 A 9.7225161 7.119638 0 1 1 24.727345 39.80859 z" + transform="matrix(0.977113,0,0,1.123653,-0.214066,-6.870732)" /> + <path + style="opacity:0.5152838;fill:#5c3466;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M -42.833794,47.629347 C -42.833794,47.629347 -43.26687,44.687985 -40.223294,37.951005 C -40.223294,37.951005 -39.03087,40.509965 -38.631892,41.678764 C -39.153711,41.596001 -40.372039,41.685633 -40.372039,41.685633 C -40.038351,42.463101 -38.163796,45.952105 -36.121045,48.058218 C -37.780497,47.329365 -39.471111,47.196178 -39.471111,47.196178 C -39.009636,48.111847 -37.250115,48.69173 -36.943887,49.110993 C -36.943887,49.110993 -42.597127,49.864236 -42.833794,47.629347 z " + id="rect5312" + sodipodi:nodetypes="cccccccc" + transform="matrix(1.177457,0,0,1.083194,51.48278,-7.248017)" /> + <path + style="opacity:0.5152838;fill:#5c3466;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M -49.441852,47.4154 C -48.364983,40.273995 -40.690447,44.765623 -40.961409,37.951005 C -40.961409,37.951005 -39.025024,40.280009 -38.974466,41.581367 C -39.496285,41.498604 -39.881988,41.516405 -39.881988,41.516405 C -39.5483,42.293873 -38.196948,45.748112 -36.154197,47.854225 C -37.813649,47.125372 -38.925816,46.898039 -38.925816,46.898039 C -38.847603,47.794771 -38.376224,47.369394 -38.122982,48.215235 C -42.942294,48.046898 -46.252916,49.195571 -49.441852,47.4154 z " + id="path5317" + sodipodi:nodetypes="cccccccc" + transform="matrix(-1.070093,0,0,1.114946,-18.74027,-7.453016)" /> + <path + transform="matrix(1,0,0,0.988192,0.40625,-1.486208)" + style="opacity:0.31004367;fill:url(#linearGradient5310);fill-opacity:1;stroke:url(#linearGradient6512);stroke-width:1.00595677;stroke-miterlimit:4;stroke-opacity:1" + d="M 15,14.0625 C 8.9877035,14.0625 4.0789961,19.13808 4.0625,25.46875 C 4.0624722,25.479427 4.0625,25.489316 4.0625,25.5 C 4.9744187,33.020507 4.3062656,37.469969 2.59375,40.59375 C -0.19778709,46.24536 1.5610206,47.490284 3.9033639,47.490284 C 5.8399452,47.490284 23.958121,47.46049 29.784094,47.46049 C 30.951301,47.46049 32.9375,47.964563 32.9375,46.5 C 32.9375,46.278257 32.737749,45.861323 32.1875,45.34375 C 31.637251,44.826177 30.81426,44.270409 29.90625,43.71875 C 28.99824,43.167091 28.02821,42.609033 27.15625,42.0625 C 26.28429,41.515967 25.511654,41.005793 24.96875,40.28125 C 24.358745,39.467156 24.078806,38.510169 24.024342,37.46875 C 23.969878,36.427331 24.107721,35.310041 24.224561,34.25 C 24.458241,32.129917 24.96875,30.28125 24.96875,30.28125 C 24.98374,30.216952 25.004663,30.154183 25.03125,30.09375 C 25.618731,28.692346 25.9375,27.131297 25.9375,25.5 C 25.9375,19.154404 21.022436,14.0625 15,14.0625 z " + id="path5241" + sodipodi:nodetypes="csscccssssssscssc" /> + <path + transform="matrix(-1.162197,-1.219912,1.095788,-1.150206,-4.404363,64.58016)" + style="opacity:1;fill:#a46bb0;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M 13.257119,24.626053 C 13.257119,26.227351 11.8279,27.316574 10.863875,27.316574 C 9.5428049,27.316574 8.4706318,26.01697 8.4706318,24.415672 C 8.4706318,23.024119 9.2055946,21.514771 10.526665,21.514771 C 11.847736,21.514771 13.257119,23.360971 13.257119,24.626053 z " + id="path5160" + sodipodi:nodetypes="csssc" /> + <path + transform="matrix(1.46245,0,0,1.378883,-5.440518,-10.80605)" + style="opacity:1;fill:white;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M 13.257119,24.626053 C 13.257119,26.227351 11.8279,27.316574 10.863875,27.316574 C 9.5428049,27.316574 8.4706318,26.01697 8.4706318,24.415672 C 8.4706318,23.024119 9.2055946,21.514771 10.526665,21.514771 C 11.847736,21.514771 13.257119,23.360971 13.257119,24.626053 z " + id="path5157" + sodipodi:nodetypes="csssc" /> <path sodipodi:type="arc" - style="opacity:0.52838428;fill:url(#radialGradient5241);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path4340" - sodipodi:cx="23.234518" - sodipodi:cy="40.688972" - sodipodi:rx="16.956987" - sodipodi:ry="2.2583797" - d="M 40.191505 40.688972 A 16.956987 2.2583797 0 1 1 6.2775307,40.688972 A 16.956987 2.2583797 0 1 1 40.191505 40.688972 z" - transform="matrix(1.208941,0,0,1.980928,3.410841,15.87176)" /> + style="opacity:1;fill:#5c3566;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path5162" + sodipodi:cx="10.169642" + sodipodi:cy="24.3125" + sodipodi:rx="1.2410715" + sodipodi:ry="1.2946428" + d="M 11.410714 24.3125 A 1.2410715 1.2946428 0 1 1 8.928571,24.3125 A 1.2410715 1.2946428 0 1 1 11.410714 24.3125 z" + transform="matrix(1.208632,0,0,1.158617,-1.844007,-4.808565)" /> + <path + sodipodi:type="arc" + style="opacity:1;fill:black;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path5164" + sodipodi:cx="10.169642" + sodipodi:cy="24.3125" + sodipodi:rx="1.2410715" + sodipodi:ry="1.2946428" + d="M 11.410714 24.3125 A 1.2410715 1.2946428 0 1 1 8.928571,24.3125 A 1.2410715 1.2946428 0 1 1 11.410714 24.3125 z" + transform="matrix(0.402878,0,0,0.386209,6.350228,13.9706)" /> <path - style="opacity:1;fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:0.95516169;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 2.875,7.5 C 2.1210885,7.5 1.5,8.1265217 1.5,8.90625 L 1.5,15.71875 L 1.5,18.46875 L 1.5,26.189031 C 1.5,26.968759 2.1210885,27.595282 2.875,27.595281 L 5.5,27.595281 L 5.5,30.532781 L 9.2020155,27.56625 L 22.125,27.595281 C 22.878911,27.595281 23.5,26.968758 23.5,26.189031 L 23.5,18.46875 L 23.5,15.71875 L 23.5,8.90625 C 23.5,8.1265221 22.878912,7.5000001 22.125,7.5 L 16.15625,7.5 L 8.375,7.5 L 2.875,7.5 z " - id="path4334" - transform="matrix(-1.045455,0,0,1.048433,44.0682,0.636752)" - sodipodi:nodetypes="cccccccccccccccccc" /> + transform="matrix(0.871648,-1.084366,-0.821841,-1.022405,36.71113,59.50016)" + style="opacity:1;fill:#975fa3;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M 13.257119,24.626053 C 13.257119,26.227351 11.8279,27.316574 10.863875,27.316574 C 9.5428049,27.316574 8.4706318,26.01697 8.4706318,24.415672 C 8.4706318,23.024119 9.2055946,21.514771 10.526665,21.514771 C 11.847736,21.514771 13.257119,23.360971 13.257119,24.626053 z " + id="path5167" + sodipodi:nodetypes="csssc" /> <path - sodipodi:type="inkscape:offset" - inkscape:radius="-0.94924349" - inkscape:original="M 2.875 7.5 C 2.1210885 7.5 1.5 8.1265217 1.5 8.90625 L 1.5 15.71875 L 1.5 18.46875 L 1.5 26.1875 C 1.5 26.967227 2.1210885 27.593751 2.875 27.59375 L 5.5 27.59375 L 5.5 30.53125 L 9.1875 27.5625 L 22.125 27.59375 C 22.878911 27.593749 23.5 26.967227 23.5 26.1875 L 23.5 18.46875 L 23.5 15.71875 L 23.5 8.90625 C 23.5 8.1265221 22.878912 7.5000001 22.125 7.5 L 16.15625 7.5 L 8.375 7.5 L 2.875 7.5 z " - style="opacity:1;fill:none;fill-opacity:1;stroke:white;stroke-width:0.95516169;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path4336" - d="M 2.875,8.4375 C 2.6469872,8.4375 2.4375,8.6305983 2.4375,8.90625 L 2.4375,15.71875 L 2.4375,18.46875 L 2.4375,26.1875 C 2.4375,26.46315 2.6469898,26.65625 2.875,26.65625 L 5.5,26.65625 C 6.0150993,26.662634 6.4311157,27.078651 6.4375,27.59375 L 6.4375,28.5625 L 8.59375,26.8125 C 8.7649594,26.685027 8.9741324,26.618972 9.1875,26.625 L 22.125,26.65625 C 22.353012,26.65625 22.5625,26.463149 22.5625,26.1875 L 22.5625,18.46875 L 22.5625,15.71875 L 22.5625,8.90625 C 22.5625,8.6305986 22.353013,8.4375 22.125,8.4375 L 16.15625,8.4375 L 8.375,8.4375 L 2.875,8.4375 z " - transform="matrix(-1.045455,0,0,1.048433,44.0682,0.636752)" /> + transform="matrix(0.726374,-0.813272,-0.684868,-0.766801,34.41717,50.34012)" + style="opacity:1;fill:white;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M 13.257119,24.626053 C 13.257119,26.227351 11.8279,27.316574 10.863875,27.316574 C 9.5428049,27.316574 8.4706318,26.01697 8.4706318,24.415672 C 8.4706318,23.024119 9.2055946,21.514771 10.526665,21.514771 C 11.847736,21.514771 13.257119,23.360971 13.257119,24.626053 z " + id="path5169" + sodipodi:nodetypes="csssc" /> + <path + sodipodi:type="arc" + style="opacity:1;fill:#5c3566;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path5171" + sodipodi:cx="10.169642" + sodipodi:cy="24.3125" + sodipodi:rx="1.2410715" + sodipodi:ry="1.2946428" + d="M 11.410714 24.3125 A 1.2410715 1.2946428 0 1 1 8.928571,24.3125 A 1.2410715 1.2946428 0 1 1 11.410714 24.3125 z" + transform="matrix(1.208632,0,0,1.158617,13.15599,-4.808572)" /> <path - transform="matrix(2.539812,0,0,0.410815,-52.0204,75.74948)" sodipodi:type="arc" - style="opacity:1;color:black;fill:url(#radialGradient4179);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" - id="path4306" - sodipodi:cx="31.112698" - sodipodi:cy="19.008621" - sodipodi:rx="8.6620579" - sodipodi:ry="8.6620579" - d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1 22.45064,19.008621 A 8.6620579 8.6620579 0 1 1 39.774755 19.008621 z" /> + style="opacity:1;fill:black;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path5173" + sodipodi:cx="10.169642" + sodipodi:cy="24.3125" + sodipodi:rx="1.2410715" + sodipodi:ry="1.2946428" + d="M 11.410714 24.3125 A 1.2410715 1.2946428 0 1 1 8.928571,24.3125 A 1.2410715 1.2946428 0 1 1 11.410714 24.3125 z" + transform="matrix(0.402878,0,0,0.386209,21.35023,13.9706)" /> + <rect + style="opacity:1;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect5215" + width="5.6071429" + height="2.1785715" + x="16" + y="27" + transform="matrix(1.070064,0,0,0.918028,-1.173674,3.073548)" + rx="1.0892857" + ry="1.0892857" /> <path - style="opacity:1;fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:0.95516169;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 2.875,7.5 C 2.1210885,7.5 1.5,8.1265217 1.5,8.90625 L 1.5,15.71875 L 1.5,18.46875 L 1.5,26.189031 C 1.5,26.968759 2.1210885,27.595282 2.875,27.595281 L 5.5,27.595281 L 5.5,30.532781 L 9.2020155,27.56625 L 22.125,27.595281 C 22.878911,27.595281 23.5,26.968758 23.5,26.189031 L 23.5,18.46875 L 23.5,15.71875 L 23.5,8.90625 C 23.5,8.1265221 22.878912,7.5000001 22.125,7.5 L 16.15625,7.5 L 8.375,7.5 L 2.875,7.5 z " - id="rect1326" - transform="matrix(1.045455,0,0,1.048433,3.931818,8.785079)" - sodipodi:nodetypes="cccccccccccccccccc" /> + transform="matrix(1.180326,0,0,0.867993,13.1795,-6.80859)" + style="fill:#f9751a;fill-opacity:1;stroke:none;stroke-width:1.0283047;stroke-miterlimit:4;stroke-opacity:1" + d="M -0.99929609,42.004237 C 3.5188333,45.348102 4.1278823,38.950282 4.9828709,38.950282 C 5.8260957,38.950282 6.1724645,45.375511 10.014606,42.007796 C 9.2074596,43.955072 6.7265914,47.014858 5.6807127,47.014858 C 4.6230593,47.014858 0.31231911,44.880662 -0.99929609,42.004237 z " + id="rect5187" + sodipodi:nodetypes="czczc" /> + <path + transform="matrix(1.236264,0,0,0.549587,-6.482886,4.775206)" + style="fill:#3b1941;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M 11.651119,11.193815 C 12.963532,7.814583 16.999999,10.43431 16.999999,12.891665 L 13.737594,13.834879 L 11.651119,11.193815 z " + id="path5192" + sodipodi:nodetypes="cccc" /> <path - sodipodi:type="inkscape:offset" - inkscape:radius="-0.94924349" - inkscape:original="M 2.875 7.5 C 2.1210885 7.5 1.5 8.1265217 1.5 8.90625 L 1.5 15.71875 L 1.5 18.46875 L 1.5 26.1875 C 1.5 26.967227 2.1210885 27.593751 2.875 27.59375 L 5.5 27.59375 L 5.5 30.53125 L 9.1875 27.5625 L 22.125 27.59375 C 22.878911 27.593749 23.5 26.967227 23.5 26.1875 L 23.5 18.46875 L 23.5 15.71875 L 23.5 8.90625 C 23.5 8.1265221 22.878912 7.5000001 22.125 7.5 L 16.15625 7.5 L 8.375 7.5 L 2.875 7.5 z " - style="opacity:1;fill:none;fill-opacity:1;stroke:white;stroke-width:0.95516169;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path5034" - d="M 2.875,8.4375 C 2.6469872,8.4375 2.4375,8.6305983 2.4375,8.90625 L 2.4375,15.71875 L 2.4375,18.46875 L 2.4375,26.1875 C 2.4375,26.46315 2.6469898,26.65625 2.875,26.65625 L 5.5,26.65625 C 6.0150993,26.662634 6.4311157,27.078651 6.4375,27.59375 L 6.4375,28.5625 L 8.59375,26.8125 C 8.7649594,26.685027 8.9741324,26.618972 9.1875,26.625 L 22.125,26.65625 C 22.353012,26.65625 22.5625,26.463149 22.5625,26.1875 L 22.5625,18.46875 L 22.5625,15.71875 L 22.5625,8.90625 C 22.5625,8.6305986 22.353013,8.4375 22.125,8.4375 L 16.15625,8.4375 L 8.375,8.4375 L 2.875,8.4375 z " - transform="matrix(1.045455,0,0,1.048433,3.931818,8.785079)" /> + transform="matrix(1.50247,0,0,1,-7.59464,-1.139701)" + style="fill:#3b1941;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M 11.689238,9.8218679 C 13.591296,8.0161941 17.219555,11.23544 17.564573,12.891665 L 14.543472,12.891665 L 11.689238,9.8218679 z " + id="rect5189" + sodipodi:nodetypes="cccc" /> + <path + transform="matrix(1.180326,0,0,0.867993,13.1795,-6.80859)" + style="fill:url(#linearGradient6569);fill-opacity:1.0;stroke:none;stroke-width:1.0283047;stroke-miterlimit:4;stroke-opacity:1" + d="M -0.99929609,42.004237 C 3.5188333,45.348102 4.1278823,38.950282 4.9828709,38.950282 C 5.8260957,38.950282 6.1724645,45.375511 10.014606,42.007796 C 9.2074596,43.955072 6.7265914,47.014858 5.6807127,47.014858 C 4.6230593,47.014858 0.31231911,44.880662 -0.99929609,42.004237 z " + id="path6561" + sodipodi:nodetypes="czczc" /> </g> </svg>
--- a/pidgin/pixmaps/icons/Makefile.mingw Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/pixmaps/icons/Makefile.mingw Fri Apr 27 05:20:10 2007 +0000 @@ -7,8 +7,11 @@ include ./Makefile.am install: + +install_real: if test '$(SUBDIRS)'; then \ list='$(SUBDIRS)'; for subdir in $$list; do \ $(MAKE) -C $$subdir -f Makefile.mingw install || exit 1; \ done; \ fi; +
--- a/pidgin/pixmaps/protocols/16/scalable/irc.svg Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/pixmaps/protocols/16/scalable/irc.svg Fri Apr 27 05:20:10 2007 +0000 @@ -7,87 +7,179 @@ 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://inkscape.sourceforge.net/DTD/s odipodi-0.dtd" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="16" height="16" - id="svg13306" + id="svg4345" sodipodi:version="0.32" - inkscape:version="0.43" - version="1.0" - inkscape:export-filename="/home/hbons/Desktop/Gaim Refresh/status/16/irc16.png" + inkscape:version="0.44.1" + sodipodi:docbase="/home/hbons/Desktop" + sodipodi:docname="pidgin-16.svg" + inkscape:export-filename="/home/hbons/Desktop/pidgin.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" - sodipodi:docbase="/home/hbons/Desktop/Gaim Refresh/status/16/scalable" - sodipodi:docname="irc16.svg"> + version="1.0"> <defs - id="defs13308"> + id="defs4347"> <linearGradient - inkscape:collect="always" - id="linearGradient2280"> + id="linearGradient2804"> <stop - style="stop-color:#d3d7cf;stop-opacity:1;" + style="stop-color:black;stop-opacity:0;" offset="0" - id="stop2282" /> + id="stop2806" /> <stop - style="stop-color:#d3d7cf;stop-opacity:0;" + id="stop2812" + offset="0.5" + style="stop-color:black;stop-opacity:1;" /> + <stop + style="stop-color:black;stop-opacity:0;" offset="1" - id="stop2284" /> + id="stop2808" /> </linearGradient> <linearGradient inkscape:collect="always" - id="linearGradient3150"> + xlink:href="#linearGradient2804" + id="linearGradient1516" + gradientUnits="userSpaceOnUse" + x1="21.875" + y1="48.000977" + x2="21.875" + y2="40" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient2781" + id="radialGradient1514" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2,0,0,0.8,36,8.8)" + cx="1" + cy="44" + fx="1" + fy="44" + r="5" /> + <linearGradient + inkscape:collect="always" + id="linearGradient2781"> + <stop + style="stop-color:black;stop-opacity:1;" + offset="0" + id="stop2783" /> + <stop + style="stop-color:black;stop-opacity:0;" + offset="1" + id="stop2785" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient2781" + id="radialGradient1512" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2,0,0,0.8,-13,-79.2)" + cx="1" + cy="44" + fx="1" + fy="44" + r="5" /> + <linearGradient + inkscape:collect="always" + id="linearGradient5235"> <stop style="stop-color:#2e3436;stop-opacity:1;" offset="0" - id="stop3152" /> + id="stop5237" /> <stop style="stop-color:#2e3436;stop-opacity:0;" offset="1" - id="stop3154" /> + id="stop5239" /> </linearGradient> <radialGradient inkscape:collect="always" - xlink:href="#linearGradient3150" - id="radialGradient3156" - cx="10.748654" - cy="10.457643" - fx="10.748654" - fy="10.457643" - r="6.6449099" - gradientTransform="matrix(-0.842757,5.698892e-16,-4.565819e-9,-0.35721,19.80716,14.19321)" + xlink:href="#linearGradient25546" + id="radialGradient25572" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,0.994693,0,4.16407e-2)" + cx="7.8836637" + cy="1.5104795" + fx="7.8836637" + fy="1.5104795" + r="8.4883642" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient25546" + id="radialGradient25568" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,0.994693,0,4.16407e-2)" + cx="7.8836741" + cy="0.14505707" + fx="7.8836741" + fy="0.14505707" + r="8.4883642" /> + <linearGradient + inkscape:collect="always" + id="linearGradient25546"> + <stop + style="stop-color:white;stop-opacity:1;" + offset="0" + id="stop25548" /> + <stop + style="stop-color:white;stop-opacity:0;" + offset="1" + id="stop25550" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient25546" + id="radialGradient25554" + cx="7.8836637" + cy="2.6242435" + fx="7.8836637" + fy="2.6242435" + r="8.4883642" + gradientTransform="matrix(1.131317,0,0,1.125313,-1.035262,-0.301139)" gradientUnits="userSpaceOnUse" /> <linearGradient - inkscape:collect="always" - id="linearGradient3131"> + id="linearGradient3800"> <stop - style="stop-color:#eeeeec;stop-opacity:1;" - offset="0" - id="stop3133" /> + style="stop-color:#f4d9b1;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop3802" /> <stop - style="stop-color:#d3d7cf" - offset="1" - id="stop3135" /> + style="stop-color:#df9725;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop3804" /> </linearGradient> <linearGradient inkscape:collect="always" - xlink:href="#linearGradient3131" - id="linearGradient3137" - x1="18.206755" - y1="4.8468447" - x2="18.150391" - y2="13.775416" - gradientUnits="userSpaceOnUse" /> + id="linearGradient3816"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop3818" /> + <stop + style="stop-color:#000000;stop-opacity:0;" + offset="1" + id="stop3820" /> + </linearGradient> <radialGradient inkscape:collect="always" - xlink:href="#linearGradient2280" - id="radialGradient2286" - cx="10.332581" - cy="6.9103003" - fx="10.332581" - fy="6.9103003" - r="9.5" - gradientTransform="matrix(1.895669,2.346468e-16,-3.526656e-16,2.238626,-11.89066,-12.56638)" + xlink:href="#linearGradient3816" + id="radialGradient4179" + gradientUnits="userSpaceOnUse" + cx="31.112698" + cy="19.008621" + fx="31.112698" + fy="19.008621" + r="8.6620579" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient5235" + id="radialGradient5241" + cx="23.234518" + cy="40.688972" + fx="23.234518" + fy="40.688972" + r="16.956987" + gradientTransform="matrix(1,0,0,0.133183,0,35.2699)" gradientUnits="userSpaceOnUse" /> </defs> <sodipodi:namedview @@ -97,20 +189,21 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="39.59798" - inkscape:cx="14.115129" - inkscape:cy="9.9583634" + inkscape:zoom="42.440064" + inkscape:cx="12.433319" + inkscape:cy="6.6578459" inkscape:current-layer="layer1" showgrid="true" inkscape:grid-bbox="true" inkscape:document-units="px" - fill="#eeeeec" - inkscape:window-width="1268" - inkscape:window-height="971" - inkscape:window-x="6" - inkscape:window-y="21" /> + inkscape:window-width="1274" + inkscape:window-height="966" + inkscape:window-x="3" + inkscape:window-y="25" + width="16px" + height="16px" /> <metadata - id="metadata13311"> + id="metadata4350"> <rdf:RDF> <cc:Work rdf:about=""> @@ -125,91 +218,48 @@ inkscape:label="Layer 1" inkscape:groupmode="layer"> <path - style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.00000095;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 0.49919572,3.436028 L 0.49919572,8.024108 C 0.49919572,10.030365 0.43094041,12.50277 3.4779698,12.50277 L 3.5190997,14.938304 L 6.2391563,12.547388 L 10.144168,12.531827 C 13.477975,12.531827 15.5,11.518177 15.5,9.379431 L 15.484468,3.556577 C 15.484468,1.4311219 14.423292,0.51556128 12.453894,0.51556128 L 3.4753207,0.50000048 C 1.4741104,0.50000048 0.49919572,1.561826 0.49919572,3.436028 z " - id="path2199" - sodipodi:nodetypes="ccccccccccc" /> - <path - sodipodi:type="inkscape:offset" - inkscape:radius="-1.0020103" - inkscape:original="M 10.03125 5.5 C 5.2809556 5.6861502 1.5 8.7231084 1.5 12.4375 C 1.5 14.570281 2.4139213 16.850503 4.375 18.125 C 4.790921 19.906271 3.5825788 21.282326 3.375 21.5 C 3.7506605 21.398222 6.7302843 20.58004 7.84375 19.375 C 8.9660824 19.328744 9.5914383 19.40625 10.5 19.40625 C 15.465015 19.40625 19.500001 16.271711 19.5 12.4375 C 19.499999 8.6032883 15.465015 5.5 10.5 5.5 C 10.344844 5.4999998 10.184486 5.4939951 10.03125 5.5 z " - xlink:href="#path13316" - style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" - id="path2288" - inkscape:href="#path13316" - d="M 10.0625,6.5 C 7.8900031,6.5851338 5.9762716,7.3427975 4.625,8.4375 C 3.2737284,9.5322025 2.5,10.920293 2.5,12.4375 C 2.5,14.284032 3.2837785,16.226812 4.90625,17.28125 C 5.1287835,17.423752 5.2860248,17.648382 5.34375,17.90625 C 5.4955807,18.556498 5.4707531,19.125743 5.375,19.65625 C 6.0781419,19.333618 6.8270886,18.976092 7.09375,18.6875 C 7.2809756,18.490079 7.540428,18.377274 7.8125,18.375 C 8.9961476,18.326217 9.6484235,18.40625 10.5,18.40625 C 12.771643,18.40625 14.815021,17.674738 16.25,16.5625 C 17.684979,15.450262 18.5,14.003112 18.5,12.4375 C 18.5,10.871887 17.684227,9.4172787 16.25,8.3125 C 14.815773,7.2077213 12.773745,6.5 10.5,6.5 C 10.318992,6.4999998 10.162289,6.4960896 10.0625,6.5 z " - transform="matrix(-1,0,0,1,23.99247,-3.990738)" /> + style="opacity:1;fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:2.37280941;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 2.875,7.5 C 2.1210885,7.5 1.5,8.1265217 1.5,8.90625 L 1.5,15.71875 L 1.5,18.46875 L 1.5,26.613999 C 1.5,27.393727 2.1210885,28.02025 2.875,28.020249 L 5.8475934,28.020249 L 5.8475934,32.22122 L 11.690916,27.991218 L 22.125,28.020249 C 22.878911,28.020249 23.5,27.393726 23.5,26.613999 L 23.5,18.46875 L 23.5,15.71875 L 23.5,8.90625 C 23.5,8.1265221 22.878912,7.5000001 22.125,7.5 L 16.15625,7.5 L 8.375,7.5 L 2.875,7.5 z " + id="path5540" + transform="matrix(-0.454545,0,0,0.390748,16.18182,-2.43061)" + sodipodi:nodetypes="cccccccccccccccccc" /> <path - style="opacity:1;fill:url(#radialGradient2286);fill-opacity:1;stroke:#555753;stroke-width:1.00000095;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 0.49919572,3.436028 L 0.49919572,8.024108 C 0.49919572,10.030365 0.43094041,12.50277 3.4779698,12.50277 L 3.5190997,14.938304 L 6.2391563,12.547388 L 10.144168,12.531827 C 13.477975,12.531827 15.5,11.518177 15.5,9.379431 L 15.484468,3.556577 C 15.484468,1.4311219 14.423292,0.51556128 12.453894,0.51556128 L 3.4753207,0.50000048 C 1.4741104,0.50000048 0.49919572,1.561826 0.49919572,3.436028 z " - id="rect1326" - sodipodi:nodetypes="ccccccccccc" /> - <path - sodipodi:type="inkscape:offset" - inkscape:radius="-0.99553573" - inkscape:original="M 3.46875 0.5 C 1.4675396 0.5 0.5 1.563298 0.5 3.4375 L 0.5 8.03125 C 0.5 10.037507 0.42172061 12.5 3.46875 12.5 L 3.53125 14.9375 L 6.25 12.5625 L 10.15625 12.53125 C 13.490057 12.53125 15.5 11.513746 15.5 9.375 L 15.5 3.5625 C 15.5 1.4370449 14.438148 0.5 12.46875 0.5 L 3.46875 0.5 z " - xlink:href="#rect1326" - style="opacity:1;fill:none;fill-opacity:1;stroke:#eeeeec;stroke-width:1.03363752;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path2248" - inkscape:href="#rect1326" - d="M 3.96875,9.0625 C 3.1444632,9.0625002 2.7022172,9.2621947 2.4375,9.53125 C 2.1727828,9.8003053 2,10.234211 2,11 L 2,15.59375 C 2,16.609826 2.0106197,17.613475 2.25,18.1875 C 2.4893803,18.761525 2.71342,19.0625 3.96875,19.0625 C 4.5099878,19.05993 4.9541408,19.490203 4.96875,20.03125 L 4.96875,20.34375 L 6.09375,19.34375 C 6.2748748,19.183476 6.5081463,19.094611 6.75,19.09375 L 10.65625,19.09375 C 12.221872,19.09375 13.413842,18.823397 14.09375,18.4375 C 14.773658,18.051603 15,17.695013 15,16.9375 L 15,11.125 C 15,10.228058 14.802621,9.7651678 14.53125,9.5 C 14.259879,9.2348322 13.795556,9.0625 12.96875,9.0625 L 3.96875,9.0625 z " - transform="matrix(0.997403,0,0,0.938411,3.636372e-2,0.123235)" /> + transform="matrix(-0.397516,0,0,0.329862,15.46895,-1.283212)" + style="fill:none;fill-opacity:1;stroke:white;stroke-width:2.76157022;stroke-miterlimit:4;stroke-opacity:1" + d="M 2.875,8.4375 C 2.6469872,8.4375 2.4375,8.6305983 2.4375,8.90625 L 2.4375,15.71875 L 2.4375,18.46875 L 2.4375,26.1875 C 2.4375,26.46315 2.6469898,26.65625 2.875,26.65625 L 7.1914464,26.68945 C 7.7065457,26.695834 7.4705404,28.897647 7.4769247,29.412746 L 11.299413,26.8125 L 22.125,26.65625 C 22.353012,26.65625 22.5625,26.463149 22.5625,26.1875 L 22.5625,18.46875 L 22.5625,15.71875 L 22.5625,8.90625 C 22.5625,8.6305986 22.353013,8.4375 22.125,8.4375 L 16.15625,8.4375 L 8.375,8.4375 L 2.875,8.4375 z " + id="path5542" + sodipodi:nodetypes="cccccccccccccccccc" /> <path sodipodi:type="arc" - style="opacity:0.2;fill:url(#radialGradient3156);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path3140" - sodipodi:cx="10.748654" - sodipodi:cy="10.457643" - sodipodi:rx="6.6449099" - sodipodi:ry="2.3675451" - d="M 17.393564 10.457643 A 6.6449099 2.3675451 0 1 1 4.1037445,10.457643 A 6.6449099 2.3675451 0 1 1 17.393564 10.457643 z" - transform="matrix(1.655402,0,0,1.267134,-5.793347,6.748769)" /> - <path - sodipodi:type="inkscape:offset" - inkscape:radius="-1.0020103" - inkscape:original="M 10.03125 5.5 C 5.2809556 5.6861502 1.5 8.7231084 1.5 12.4375 C 1.5 14.570281 2.4139213 16.850503 4.375 18.125 C 4.790921 19.906271 3.5825788 21.282326 3.375 21.5 C 3.7506605 21.398222 6.7302843 20.58004 7.84375 19.375 C 8.9660824 19.328744 9.5914383 19.40625 10.5 19.40625 C 15.465015 19.40625 19.500001 16.271711 19.5 12.4375 C 19.499999 8.6032883 15.465015 5.5 10.5 5.5 C 10.344844 5.4999998 10.184486 5.4939951 10.03125 5.5 z " - xlink:href="#path13316" - style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" - id="path13434" - inkscape:href="#path13316" - d="M 10.0625,6.5 C 7.8900031,6.5851338 5.9762716,7.3427975 4.625,8.4375 C 3.2737284,9.5322025 2.5,10.920293 2.5,12.4375 C 2.5,14.284032 3.2837785,16.226812 4.90625,17.28125 C 5.1287835,17.423752 5.2860248,17.648382 5.34375,17.90625 C 5.4955807,18.556498 5.4707531,19.125743 5.375,19.65625 C 6.0781419,19.333618 6.8270886,18.976092 7.09375,18.6875 C 7.2809756,18.490079 7.540428,18.377274 7.8125,18.375 C 8.9961476,18.326217 9.6484235,18.40625 10.5,18.40625 C 12.771643,18.40625 14.815021,17.674738 16.25,16.5625 C 17.684979,15.450262 18.5,14.003112 18.5,12.4375 C 18.5,10.871887 17.684227,9.4172787 16.25,8.3125 C 14.815773,7.2077213 12.773745,6.5 10.5,6.5 C 10.318992,6.4999998 10.162289,6.4960896 10.0625,6.5 z " - transform="matrix(-1,0,0,1,32,-8.84375)" /> + style="opacity:0.52838428;fill:url(#radialGradient5241);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path4340" + sodipodi:cx="23.234518" + sodipodi:cy="40.688972" + sodipodi:rx="16.956987" + sodipodi:ry="2.2583797" + d="M 40.191505 40.688972 A 16.956987 2.2583797 0 1 1 6.2775307,40.688972 A 16.956987 2.2583797 0 1 1 40.191505 40.688972 z" + transform="matrix(1.208941,0,0,1.980928,-1.589159,5.924394)" /> <path - sodipodi:type="inkscape:offset" - inkscape:radius="-1.0020103" - inkscape:original="M 10.03125 5.5 C 5.2809556 5.6861502 1.5 8.7231084 1.5 12.4375 C 1.5 14.570281 2.4139213 16.850503 4.375 18.125 C 4.790921 19.906271 3.5825788 21.282326 3.375 21.5 C 3.7506605 21.398222 6.7302843 20.58004 7.84375 19.375 C 8.9660824 19.328744 9.5914383 19.40625 10.5 19.40625 C 15.465015 19.40625 19.500001 16.271711 19.5 12.4375 C 19.499999 8.6032883 15.465015 5.5 10.5 5.5 C 10.344844 5.4999998 10.184486 5.4939951 10.03125 5.5 z " - xlink:href="#path13316" - style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" - id="path13323" - inkscape:href="#path13316" - d="M 10.0625,6.5 C 7.8900031,6.5851338 5.9762716,7.3427975 4.625,8.4375 C 3.2737284,9.5322025 2.5,10.920293 2.5,12.4375 C 2.5,14.284032 3.2837785,16.226812 4.90625,17.28125 C 5.1287835,17.423752 5.2860248,17.648382 5.34375,17.90625 C 5.4955807,18.556498 5.4707531,19.125743 5.375,19.65625 C 6.0781419,19.333618 6.8270886,18.976092 7.09375,18.6875 C 7.2809756,18.490079 7.540428,18.377274 7.8125,18.375 C 8.9961476,18.326217 9.6484235,18.40625 10.5,18.40625 C 12.771643,18.40625 14.815021,17.674738 16.25,16.5625 C 17.684979,15.450262 18.5,14.003112 18.5,12.4375 C 18.5,10.871887 17.684227,9.4172787 16.25,8.3125 C 14.815773,7.2077213 12.773745,6.5 10.5,6.5 C 10.318992,6.4999998 10.162289,6.4960896 10.0625,6.5 z " - transform="matrix(0.750603,0,0,0.750603,0.123492,-2.625632)" /> - <rect - style="opacity:1;fill:#9a9b96;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2207" - width="9" - height="1" - x="3" - y="4" - rx="0.5" - ry="0.5" /> - <rect - style="opacity:1;fill:#9a9b96;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect1343" - width="8" - height="1" - x="3" - y="8" - rx="0.5" - ry="0.5" /> - <rect - style="opacity:1;fill:#9a9b96;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect1345" - width="7" - height="1" - x="3" - y="6" - rx="0.5" - ry="0.5" /> + transform="matrix(2.539812,0,0,0.410815,-57.0204,65.80212)" + sodipodi:type="arc" + style="opacity:1;color:black;fill:url(#radialGradient4179);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + id="path4306" + sodipodi:cx="31.112698" + sodipodi:cy="19.008621" + sodipodi:rx="8.6620579" + sodipodi:ry="8.6620579" + d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1 22.45064,19.008621 A 8.6620579 8.6620579 0 1 1 39.774755 19.008621 z" /> + <path + style="opacity:1;fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:2.37280941;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 2.875,7.5 C 2.1210885,7.5 1.5,8.1265217 1.5,8.90625 L 1.5,15.71875 L 1.5,18.46875 L 1.5,26.613999 C 1.5,27.393727 2.1210885,28.02025 2.875,28.020249 L 5.8475934,28.020249 L 5.8475934,32.22122 L 11.690916,27.991218 L 22.125,28.020249 C 22.878911,28.020249 23.5,27.393726 23.5,26.613999 L 23.5,18.46875 L 23.5,15.71875 L 23.5,8.90625 C 23.5,8.1265221 22.878912,7.5000001 22.125,7.5 L 16.15625,7.5 L 8.375,7.5 L 2.875,7.5 z " + id="path5534" + transform="matrix(0.454545,0,0,0.390748,-0.181807,2.56939)" + sodipodi:nodetypes="cccccccccccccccccc" /> + <path + transform="matrix(0.397516,0,0,0.329862,0.531062,3.716788)" + style="fill:none;fill-opacity:1;stroke:white;stroke-width:2.76157022;stroke-miterlimit:4;stroke-opacity:1" + d="M 2.875,8.4375 C 2.6469872,8.4375 2.4375,8.6305983 2.4375,8.90625 L 2.4375,15.71875 L 2.4375,18.46875 L 2.4375,26.1875 C 2.4375,26.46315 2.6469898,26.65625 2.875,26.65625 L 7.1914464,26.68945 C 7.7065457,26.695834 7.4705404,28.897647 7.4769247,29.412746 L 11.299413,26.8125 L 22.125,26.65625 C 22.353012,26.65625 22.5625,26.463149 22.5625,26.1875 L 22.5625,18.46875 L 22.5625,15.71875 L 22.5625,8.90625 C 22.5625,8.6305986 22.353013,8.4375 22.125,8.4375 L 16.15625,8.4375 L 8.375,8.4375 L 2.875,8.4375 z " + id="path5536" + sodipodi:nodetypes="cccccccccccccccccc" /> </g> </svg>
--- a/pidgin/pixmaps/protocols/22/scalable/irc.svg Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/pixmaps/protocols/22/scalable/irc.svg Fri Apr 27 05:20:10 2007 +0000 @@ -7,173 +7,180 @@ 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://inkscape.sourceforge.net/DTD/s odipodi-0.dtd" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="24" height="24" - id="svg13306" + id="svg4345" sodipodi:version="0.32" - inkscape:version="0.43" - version="1.0" - inkscape:export-filename="/home/hbons/Desktop/Gaim Refresh/status/32/irc32.png" + inkscape:version="0.44.1" + sodipodi:docbase="/home/hbons/Desktop" + sodipodi:docname="pidgin-24.svg" + inkscape:export-filename="/home/hbons/Desktop/pidgin.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" - sodipodi:docbase="/home/hbons/Desktop/Gaim Refresh/protocols/22/scalable" - sodipodi:docname="irc.svg"> + version="1.0"> <defs - id="defs13308"> + id="defs4347"> <linearGradient - inkscape:collect="always" - id="linearGradient2280"> - <stop - style="stop-color:#d3d7cf;stop-opacity:1;" - offset="0" - id="stop2282" /> + id="linearGradient2804"> <stop - style="stop-color:#d3d7cf;stop-opacity:0;" - offset="1" - id="stop2284" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - id="linearGradient3150"> + style="stop-color:black;stop-opacity:0;" + offset="0" + id="stop2806" /> <stop - style="stop-color:#2e3436;stop-opacity:1;" - offset="0" - id="stop3152" /> + id="stop2812" + offset="0.5" + style="stop-color:black;stop-opacity:1;" /> <stop - style="stop-color:#2e3436;stop-opacity:0;" + style="stop-color:black;stop-opacity:0;" offset="1" - id="stop3154" /> - </linearGradient> - <radialGradient - inkscape:collect="always" - xlink:href="#linearGradient3150" - id="radialGradient3156" - cx="10.748654" - cy="10.457643" - fx="10.748654" - fy="10.457643" - r="6.6449099" - gradientTransform="matrix(-0.842757,5.698892e-16,-4.565819e-9,-0.35721,19.80716,14.19321)" - gradientUnits="userSpaceOnUse" /> - <linearGradient - inkscape:collect="always" - id="linearGradient3131"> - <stop - style="stop-color:#eeeeec;stop-opacity:1;" - offset="0" - id="stop3133" /> - <stop - style="stop-color:#d3d7cf" - offset="1" - id="stop3135" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - id="linearGradient3121"> - <stop - style="stop-color:#d3d7cf;stop-opacity:1;" - offset="0" - id="stop3123" /> - <stop - style="stop-color:#d3d7cf;stop-opacity:0;" - offset="1" - id="stop3125" /> + id="stop2808" /> </linearGradient> <linearGradient inkscape:collect="always" - xlink:href="#linearGradient3121" - id="linearGradient3127" - x1="13" - y1="26.785713" - x2="13" - y2="18.078569" - gradientUnits="userSpaceOnUse" /> + xlink:href="#linearGradient2804" + id="linearGradient1516" + gradientUnits="userSpaceOnUse" + x1="21.875" + y1="48.000977" + x2="21.875" + y2="40" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient2781" + id="radialGradient1514" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2,0,0,0.8,36,8.8)" + cx="1" + cy="44" + fx="1" + fy="44" + r="5" /> <linearGradient inkscape:collect="always" - xlink:href="#linearGradient3131" - id="linearGradient3137" - x1="18.206755" - y1="4.8468447" - x2="18.150391" - y2="13.775416" - gradientUnits="userSpaceOnUse" /> + id="linearGradient2781"> + <stop + style="stop-color:black;stop-opacity:1;" + offset="0" + id="stop2783" /> + <stop + style="stop-color:black;stop-opacity:0;" + offset="1" + id="stop2785" /> + </linearGradient> <radialGradient inkscape:collect="always" - xlink:href="#linearGradient2280" - id="radialGradient2286" - cx="10.288303" - cy="6.7567434" - fx="10.288303" - fy="6.7567434" - r="9.5" - gradientTransform="matrix(2.369002,1.711096e-16,-1.716974e-16,2.389565,-14.87449,-9.225873)" - gradientUnits="userSpaceOnUse" /> + xlink:href="#linearGradient2781" + id="radialGradient1512" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2,0,0,0.8,-13,-79.2)" + cx="1" + cy="44" + fx="1" + fy="44" + r="5" /> <linearGradient inkscape:collect="always" - xlink:href="#linearGradient3121" - id="linearGradient2314" + id="linearGradient5235"> + <stop + style="stop-color:#2e3436;stop-opacity:1;" + offset="0" + id="stop5237" /> + <stop + style="stop-color:#2e3436;stop-opacity:0;" + offset="1" + id="stop5239" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient25546" + id="radialGradient25572" gradientUnits="userSpaceOnUse" - x1="13" - y1="26.785713" - x2="13" - y2="18.078569" /> + gradientTransform="matrix(1,0,0,0.994693,0,4.16407e-2)" + cx="7.8836637" + cy="1.5104795" + fx="7.8836637" + fy="1.5104795" + r="8.4883642" /> <radialGradient inkscape:collect="always" - xlink:href="#linearGradient2280" - id="radialGradient2316" + xlink:href="#linearGradient25546" + id="radialGradient25568" gradientUnits="userSpaceOnUse" - gradientTransform="matrix(-1.276682,0,0,1.19816,31.40394,-2.987018)" - cx="10.5" - cy="12.373168" - fx="10.5" - fy="12.373168" - r="9.5" /> - <radialGradient + gradientTransform="matrix(1,0,0,0.994693,0,4.16407e-2)" + cx="7.8836741" + cy="0.14505707" + fx="7.8836741" + fy="0.14505707" + r="8.4883642" /> + <linearGradient inkscape:collect="always" - xlink:href="#linearGradient3150" - id="radialGradient2259" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(-0.842757,5.698892e-16,-4.565819e-9,-0.35721,19.80716,14.19321)" - cx="10.748654" - cy="10.457643" - fx="10.748654" - fy="10.457643" - r="6.6449099" /> + id="linearGradient25546"> + <stop + style="stop-color:white;stop-opacity:1;" + offset="0" + id="stop25548" /> + <stop + style="stop-color:white;stop-opacity:0;" + offset="1" + id="stop25550" /> + </linearGradient> <radialGradient inkscape:collect="always" - xlink:href="#linearGradient2280" - id="radialGradient2288" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(-3.068505,2.211325e-16,2.22395e-16,3.088141,49.79439,-16.48838)" - cx="10.288303" - cy="6.7567434" - fx="10.288303" - fy="6.7567434" - r="9.5" /> + xlink:href="#linearGradient25546" + id="radialGradient25554" + cx="7.8836637" + cy="2.6242435" + fx="7.8836637" + fy="2.6242435" + r="8.4883642" + gradientTransform="matrix(1.131317,0,0,1.125313,-1.035262,-0.301139)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + id="linearGradient3800"> + <stop + style="stop-color:#f4d9b1;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop3802" /> + <stop + style="stop-color:#df9725;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop3804" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient3816"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop3818" /> + <stop + style="stop-color:#000000;stop-opacity:0;" + offset="1" + id="stop3820" /> + </linearGradient> <radialGradient inkscape:collect="always" - xlink:href="#linearGradient2280" - id="radialGradient2303" + xlink:href="#linearGradient3816" + id="radialGradient4179" gradientUnits="userSpaceOnUse" - gradientTransform="matrix(-3.068505,2.211325e-16,2.22395e-16,3.088141,49.79439,-16.48838)" - cx="10.288303" - cy="6.7567434" - fx="10.288303" - fy="6.7567434" - r="9.5" /> + cx="31.112698" + cy="19.008621" + fx="31.112698" + fy="19.008621" + r="8.6620579" /> <radialGradient inkscape:collect="always" - xlink:href="#linearGradient2280" - id="radialGradient2311" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(-2.369597,1.712163e-16,1.717406e-16,2.391056,38.88682,-13.24031)" - cx="10.288303" - cy="6.7567434" - fx="10.288303" - fy="6.7567434" - r="9.5" /> + xlink:href="#linearGradient5235" + id="radialGradient5241" + cx="23.234518" + cy="40.688972" + fx="23.234518" + fy="40.688972" + r="16.956987" + gradientTransform="matrix(1,0,0,0.133183,0,35.2699)" + gradientUnits="userSpaceOnUse" /> </defs> <sodipodi:namedview id="base" @@ -182,20 +189,21 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="11.371534" - inkscape:cx="20.85698" - inkscape:cy="14.844022" + inkscape:zoom="28" + inkscape:cx="17.768242" + inkscape:cy="11.945133" inkscape:current-layer="layer1" showgrid="true" inkscape:grid-bbox="true" inkscape:document-units="px" - fill="#ff0033" - inkscape:window-width="1268" - inkscape:window-height="971" - inkscape:window-x="6" - inkscape:window-y="21" /> + inkscape:window-width="1274" + inkscape:window-height="966" + inkscape:window-x="3" + inkscape:window-y="25" + width="24px" + height="24px" /> <metadata - id="metadata13311"> + id="metadata4350"> <rdf:RDF> <cc:Work rdf:about=""> @@ -209,174 +217,76 @@ id="layer1" inkscape:label="Layer 1" inkscape:groupmode="layer"> - <rect - style="fill:#babdb6;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - id="rect2266" - width="5.9860415" - height="1.0008848" - x="6.054316" - y="7.5486698" /> + <g + id="g1504" + style="opacity:0.12663754" + transform="matrix(0.496192,0,0,0.581846,-0.128303,-4.772994)"> + <rect + transform="scale(-1,-1)" + y="-48" + x="-11" + height="8" + width="10" + id="rect1506" + style="opacity:1;color:black;fill:url(#radialGradient1512);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> + <rect + y="40" + x="38" + height="8" + width="10" + id="rect1508" + style="opacity:1;color:black;fill:url(#radialGradient1514);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> + <rect + y="40" + x="11" + height="8" + width="27" + id="rect1510" + style="opacity:1;color:black;fill:url(#linearGradient1516);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> + </g> <path sodipodi:type="arc" - style="opacity:0.5;fill:url(#radialGradient2259);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path2257" - sodipodi:cx="10.748654" - sodipodi:cy="10.457643" - sodipodi:rx="6.6449099" - sodipodi:ry="2.3675451" - d="M 17.393564 10.457643 A 6.6449099 2.3675451 0 1 1 4.1037445,10.457643 A 6.6449099 2.3675451 0 1 1 17.393564 10.457643 z" - transform="matrix(1.48539,0,0,1.13303,-1.306933,4.968885)" /> - <path - sodipodi:type="inkscape:offset" - inkscape:radius="-1.0020103" - inkscape:original="M 10.03125 5.5 C 5.2809556 5.6861502 1.5 8.7231084 1.5 12.4375 C 1.5 14.570281 2.4139213 16.850503 4.375 18.125 C 4.790921 19.906271 3.5825788 21.282326 3.375 21.5 C 3.7506605 21.398222 6.7302843 20.58004 7.84375 19.375 C 8.9660824 19.328744 9.5914383 19.40625 10.5 19.40625 C 15.465015 19.40625 19.500001 16.271711 19.5 12.4375 C 19.499999 8.6032883 15.465015 5.5 10.5 5.5 C 10.344844 5.4999998 10.184486 5.4939951 10.03125 5.5 z " - xlink:href="#path13316" - style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" - id="path2268" - inkscape:href="#path13316" - d="M 10.0625,6.5 C 7.8900031,6.5851338 5.9762716,7.3427975 4.625,8.4375 C 3.2737284,9.5322025 2.5,10.920293 2.5,12.4375 C 2.5,14.284032 3.2837785,16.226812 4.90625,17.28125 C 5.1287835,17.423752 5.2860248,17.648382 5.34375,17.90625 C 5.4955807,18.556498 5.4707531,19.125743 5.375,19.65625 C 6.0781419,19.333618 6.8270886,18.976092 7.09375,18.6875 C 7.2809756,18.490079 7.540428,18.377274 7.8125,18.375 C 8.9961476,18.326217 9.6484235,18.40625 10.5,18.40625 C 12.771643,18.40625 14.815021,17.674738 16.25,16.5625 C 17.684979,15.450262 18.5,14.003112 18.5,12.4375 C 18.5,10.871887 17.684227,9.4172787 16.25,8.3125 C 14.815773,7.2077213 12.773745,6.5 10.5,6.5 C 10.318992,6.4999998 10.162289,6.4960896 10.0625,6.5 z " - transform="matrix(-0.997673,0,0,1.000884,24.00493,-3.47033)" /> - <rect - style="fill:#babdb6;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - id="rect2270" - width="5.9860415" - height="1.0008848" - x="-18.018883" - y="7.5393991" - transform="scale(-1,1)" /> - <rect - style="fill:#babdb6;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - id="rect2272" - width="8.9790611" - height="1.0008843" - x="-18.018883" - y="9.5411692" - transform="scale(-1,1)" /> - <path - style="fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.00000012;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 17.462848,2.0345351 C 20.28167,2.2326326 22.508414,4.8428606 22.508414,8.0398417 L 22.508414,10.041609 C 22.508414,12.276899 21.432831,14.230867 19.817446,15.264975 L 19.817446,18.11124 L 16.930261,16.046916 L 11.74454,16.046916 C 8.7629471,16.046916 6.3626031,13.36855 6.3626031,10.041609 L 6.3626031,8.0398417 C 6.3626031,4.7129016 8.7629471,2.0345351 11.74454,2.0345351 L 17.126478,2.0345351 C 17.242945,2.0345351 17.348262,2.0264824 17.462848,2.0345351 z " - id="path2274" /> + style="opacity:0.52838428;fill:url(#radialGradient5241);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path4340" + sodipodi:cx="23.234518" + sodipodi:cy="40.688972" + sodipodi:rx="16.956987" + sodipodi:ry="2.2583797" + d="M 40.191505 40.688972 A 16.956987 2.2583797 0 1 1 6.2775307,40.688972 A 16.956987 2.2583797 0 1 1 40.191505 40.688972 z" + transform="matrix(1.208941,0,0,1.980928,-0.589159,7.924396)" /> <path - style="fill:url(#radialGradient2311);fill-opacity:1;stroke:#555753;stroke-width:0.99999911;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 17.191187,1.5081301 C 20.156942,1.7179684 22.499759,4.4829039 22.499759,7.8693698 L 22.499759,9.9897819 C 22.499759,12.357556 22.260496,14.385421 20.560908,15.480822 L 20.560908,18.495784 L 16.630838,16.351022 L 11.174805,16.351022 C 8.0377925,16.351022 5.5123276,13.513909 5.5123276,9.9897819 L 5.5123276,7.8693698 C 5.5123276,4.3452417 8.0377925,1.5081301 11.174805,1.5081301 L 16.837282,1.5081301 C 16.959821,1.5081301 17.070627,1.4995998 17.191187,1.5081301 z " - id="path2276" - sodipodi:nodetypes="cccccccccccc" /> - <path - style="fill:none;fill-opacity:1;stroke:#eeeeec;stroke-width:0.99999958;stroke-miterlimit:4;stroke-opacity:1" - d="M 17.135857,2.4916226 C 19.561138,2.6615394 21.50422,4.8998576 21.50422,7.7452031 L 21.50422,9.8466356 C 21.50422,11.837212 21.538584,13.553581 20.144119,14.443518 C 19.853317,14.634376 19.473329,15.130753 19.472969,15.491409 L 19.472969,16.50929 L 17.198264,15.297225 C 17.034405,15.173056 16.838501,15.104339 16.636617,15.100218 L 11.176166,15.100218 C 8.6004294,15.100218 6.4957772,12.805706 6.4957772,9.8466356 L 6.4957772,7.7452031 C 6.4957772,4.7861327 8.6004294,2.4916226 11.176166,2.4916226 L 16.823833,2.4916226 C 16.989883,2.4916226 17.106652,2.4895765 17.135857,2.4916226 z " - id="path2280" - sodipodi:nodetypes="cccccccccccccc" /> + style="opacity:1;fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:1.69608581;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 2.875,7.5 C 2.1210885,7.5 1.5,8.1265217 1.5,8.90625 L 1.5,15.71875 L 1.5,18.46875 L 1.5,26.613999 C 1.5,27.393727 2.1210885,28.02025 2.875,28.020249 L 4.9145119,28.020249 L 4.9145119,30.532781 L 8.1141033,27.991218 L 22.125,28.020249 C 22.878911,28.020249 23.5,27.393726 23.5,26.613999 L 23.5,18.46875 L 23.5,15.71875 L 23.5,8.90625 C 23.5,8.1265221 22.878912,7.5000001 22.125,7.5 L 16.15625,7.5 L 8.375,7.5 L 2.875,7.5 z " + id="path4334" + transform="matrix(-0.590909,0,0,0.588279,23.38636,-1.912091)" + sodipodi:nodetypes="cccccccccccccccccc" /> <path - sodipodi:type="inkscape:offset" - inkscape:radius="-1.0020103" - inkscape:original="M 10.03125 5.5 C 5.2809556 5.6861502 1.5 8.7231084 1.5 12.4375 C 1.5 14.570281 2.4139213 16.850503 4.375 18.125 C 4.790921 19.906271 3.5825788 21.282326 3.375 21.5 C 3.7506605 21.398222 6.7302843 20.58004 7.84375 19.375 C 8.9660824 19.328744 9.5914383 19.40625 10.5 19.40625 C 15.465015 19.40625 19.500001 16.271711 19.5 12.4375 C 19.499999 8.6032883 15.465015 5.5 10.5 5.5 C 10.344844 5.4999998 10.184486 5.4939951 10.03125 5.5 z " - xlink:href="#path13316" - style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" - id="path2288" - inkscape:href="#path13316" - d="M 10.0625,6.5 C 7.8900031,6.5851338 5.9762716,7.3427975 4.625,8.4375 C 3.2737284,9.5322025 2.5,10.920293 2.5,12.4375 C 2.5,14.284032 3.2837785,16.226812 4.90625,17.28125 C 5.1287835,17.423752 5.2860248,17.648382 5.34375,17.90625 C 5.4955807,18.556498 5.4707531,19.125743 5.375,19.65625 C 6.0781419,19.333618 6.8270886,18.976092 7.09375,18.6875 C 7.2809756,18.490079 7.540428,18.377274 7.8125,18.375 C 8.9961476,18.326217 9.6484235,18.40625 10.5,18.40625 C 12.771643,18.40625 14.815021,17.674738 16.25,16.5625 C 17.684979,15.450262 18.5,14.003112 18.5,12.4375 C 18.5,10.871887 17.684227,9.4172787 16.25,8.3125 C 14.815773,7.2077213 12.773745,6.5 10.5,6.5 C 10.318992,6.4999998 10.162289,6.4960896 10.0625,6.5 z " - transform="matrix(-1.000884,0,0,1.000884,24.01062,-3.667893)" /> - <rect - style="fill:#babdb6;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - id="rect2300" - width="6.0053062" - height="1.0008848" - x="-18.005306" - y="11.345372" - transform="scale(-1,1)" /> + transform="matrix(-0.546584,0,0,0.546584,22.8323,-1.111803)" + style="fill:none;fill-opacity:1;stroke:white;stroke-width:1.82954407;stroke-miterlimit:4;stroke-opacity:1" + d="M 2.875,8.4375 C 2.6469872,8.4375 2.4375,8.6305983 2.4375,8.90625 L 2.4375,15.71875 L 2.4375,18.46875 L 2.4375,26.1875 C 2.4375,26.46315 2.6469898,26.65625 2.875,26.65625 L 5.0575572,26.65625 C 5.5726565,26.662634 5.9886729,27.078651 5.9950572,27.59375 L 7.0909095,26.8125 C 7.2621189,26.685027 8.9741324,26.618972 9.1875,26.625 L 22.125,26.65625 C 22.353012,26.65625 22.5625,26.463149 22.5625,26.1875 L 22.5625,18.46875 L 22.5625,15.71875 L 22.5625,8.90625 C 22.5625,8.6305986 22.353013,8.4375 22.125,8.4375 L 16.15625,8.4375 L 8.375,8.4375 L 2.875,8.4375 z " + id="path4336" + sodipodi:nodetypes="ccccccccccccccccccc" /> <path - sodipodi:type="inkscape:offset" - inkscape:radius="-1.0020103" - inkscape:original="M 10.03125 5.5 C 5.2809556 5.6861502 1.5 8.7231084 1.5 12.4375 C 1.5 14.570281 2.4139213 16.850503 4.375 18.125 C 4.790921 19.906271 3.5825788 21.282326 3.375 21.5 C 3.7506605 21.398222 6.7302843 20.58004 7.84375 19.375 C 8.9660824 19.328744 9.5914383 19.40625 10.5 19.40625 C 15.465015 19.40625 19.500001 16.271711 19.5 12.4375 C 19.499999 8.6032883 15.465015 5.5 10.5 5.5 C 10.344844 5.4999998 10.184486 5.4939951 10.03125 5.5 z " - xlink:href="#path13316" - style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" - id="path13434" - inkscape:href="#path13316" - d="M 10.0625,6.5 C 7.8900031,6.5851338 5.9762716,7.3427975 4.625,8.4375 C 3.2737284,9.5322025 2.5,10.920293 2.5,12.4375 C 2.5,14.284032 3.2837785,16.226812 4.90625,17.28125 C 5.1287835,17.423752 5.2860248,17.648382 5.34375,17.90625 C 5.4955807,18.556498 5.4707531,19.125743 5.375,19.65625 C 6.0781419,19.333618 6.8270886,18.976092 7.09375,18.6875 C 7.2809756,18.490079 7.540428,18.377274 7.8125,18.375 C 8.9961476,18.326217 9.6484235,18.40625 10.5,18.40625 C 12.771643,18.40625 14.815021,17.674738 16.25,16.5625 C 17.684979,15.450262 18.5,14.003112 18.5,12.4375 C 18.5,10.871887 17.684227,9.4172787 16.25,8.3125 C 14.815773,7.2077213 12.773745,6.5 10.5,6.5 C 10.318992,6.4999998 10.162289,6.4960896 10.0625,6.5 z " - transform="matrix(-1.318248,0,0,1.318248,41.87276,-10.91182)" /> - <path + transform="matrix(2.539812,0,0,0.410815,-56.0204,67.80212)" sodipodi:type="arc" - style="opacity:0.5;fill:url(#radialGradient3156);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path3140" - sodipodi:cx="10.748654" - sodipodi:cy="10.457643" - sodipodi:rx="6.6449099" - sodipodi:ry="2.3675451" - d="M 17.393564 10.457643 A 6.6449099 2.3675451 0 1 1 4.1037445,10.457643 A 6.6449099 2.3675451 0 1 1 17.393564 10.457643 z" - transform="matrix(1.48539,0,0,1.13303,-5.862459,8.056126)" /> - <path - sodipodi:type="inkscape:offset" - inkscape:radius="-1.0020103" - inkscape:original="M 10.03125 5.5 C 5.2809556 5.6861502 1.5 8.7231084 1.5 12.4375 C 1.5 14.570281 2.4139213 16.850503 4.375 18.125 C 4.790921 19.906271 3.5825788 21.282326 3.375 21.5 C 3.7506605 21.398222 6.7302843 20.58004 7.84375 19.375 C 8.9660824 19.328744 9.5914383 19.40625 10.5 19.40625 C 15.465015 19.40625 19.500001 16.271711 19.5 12.4375 C 19.499999 8.6032883 15.465015 5.5 10.5 5.5 C 10.344844 5.4999998 10.184486 5.4939951 10.03125 5.5 z " - xlink:href="#path13316" - style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" - id="path13323" - inkscape:href="#path13316" - d="M 10.0625,6.5 C 7.8900031,6.5851338 5.9762716,7.3427975 4.625,8.4375 C 3.2737284,9.5322025 2.5,10.920293 2.5,12.4375 C 2.5,14.284032 3.2837785,16.226812 4.90625,17.28125 C 5.1287835,17.423752 5.2860248,17.648382 5.34375,17.90625 C 5.4955807,18.556498 5.4707531,19.125743 5.375,19.65625 C 6.0781419,19.333618 6.8270886,18.976092 7.09375,18.6875 C 7.2809756,18.490079 7.540428,18.377274 7.8125,18.375 C 8.9961476,18.326217 9.6484235,18.40625 10.5,18.40625 C 12.771643,18.40625 14.815021,17.674738 16.25,16.5625 C 17.684979,15.450262 18.5,14.003112 18.5,12.4375 C 18.5,10.871887 17.684227,9.4172787 16.25,8.3125 C 14.815773,7.2077213 12.773745,6.5 10.5,6.5 C 10.318992,6.4999998 10.162289,6.4960896 10.0625,6.5 z " - transform="matrix(1.000884,0,0,1.000884,-3.072507e-3,0.326374)" /> - <rect - style="fill:#babdb6;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - id="rect13438" - width="6.0053062" - height="1.0008848" - x="6.002233" - y="11.336102" /> - <rect - style="fill:#babdb6;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - id="rect13440" - width="9.0079584" - height="1.0008843" - x="6.002233" - y="13.337872" /> - <path - style="opacity:1;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.00000012;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 6.560058,5.8312381 C 3.7321648,6.0293356 1.4982534,8.6395636 1.4982534,11.836545 L 1.4982534,13.838313 C 1.4982534,16.073601 2.5772989,18.02757 4.1978826,19.061679 L 4.1978826,21.907943 L 7.0943597,19.84362 L 12.296769,19.84362 C 15.287958,19.84362 17.696027,17.165252 17.696027,13.838313 L 17.696027,11.836545 C 17.696027,8.5096045 15.287958,5.8312381 12.296769,5.8312381 L 6.8975116,5.8312381 C 6.7806683,5.8312381 6.675013,5.8231853 6.560058,5.8312381 z " - id="path2262" /> + style="opacity:1;color:black;fill:url(#radialGradient4179);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + id="path4306" + sodipodi:cx="31.112698" + sodipodi:cy="19.008621" + sodipodi:rx="8.6620579" + sodipodi:ry="8.6620579" + d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1 22.45064,19.008621 A 8.6620579 8.6620579 0 1 1 39.774755 19.008621 z" /> <path - style="opacity:1;fill:url(#radialGradient2286);fill-opacity:1;stroke:#555753;stroke-width:0.99999976;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 6.8156547,5.5133605 C 3.8506456,5.7230681 1.5084186,8.4862805 1.5084186,11.870636 L 1.5084186,13.989727 C 1.5084186,16.356026 2.8905386,18.382627 4.5896996,19.477345 L 4.5896996,22.490429 L 7.3758631,20.347004 L 12.830522,20.347004 C 15.966746,20.347004 18.491575,17.511659 18.491575,13.989727 L 18.491575,11.870636 C 18.491575,8.3487041 15.966746,5.5133605 12.830522,5.5133605 L 7.1694706,5.5133605 C 7.0469618,5.5133605 6.9361836,5.5048355 6.8156547,5.5133605 z " - id="rect1326" - sodipodi:nodetypes="cccccccccccc" /> - <rect - style="opacity:1;fill:#9a9b96;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2207" - width="10" - height="1" - x="5" - y="9" - rx="0" - ry="2" /> + style="opacity:1;fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:1.69608581;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 2.875,7.5 C 2.1210885,7.5 1.5,8.1265217 1.5,8.90625 L 1.5,15.71875 L 1.5,18.46875 L 1.5,26.613999 C 1.5,27.393727 2.1210885,28.02025 2.875,28.020249 L 4.9145119,28.020249 L 4.9145119,30.532781 L 8.1141033,27.991218 L 22.125,28.020249 C 22.878911,28.020249 23.5,27.393726 23.5,26.613999 L 23.5,18.46875 L 23.5,15.71875 L 23.5,8.90625 C 23.5,8.1265221 22.878912,7.5000001 22.125,7.5 L 16.15625,7.5 L 8.375,7.5 L 2.875,7.5 z " + id="path5534" + transform="matrix(0.590909,0,0,0.588279,0.613639,3.087907)" + sodipodi:nodetypes="cccccccccccccccccc" /> <path - style="fill:none;fill-opacity:1;stroke:#eeeeec;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" - d="M 6.8635186,6.4916243 C 4.4377546,6.6615411 2.4942864,8.8998594 2.4942864,11.745205 L 2.4942864,13.846637 C 2.4942866,15.837213 3.4714142,17.553583 4.8661553,18.44352 C 5.1570178,18.634378 5.5370806,19.130756 5.5374411,19.491411 L 5.5374411,20.509293 L 6.8011009,19.297227 C 6.9649913,19.173058 7.1609349,19.104341 7.3628594,19.10022 L 12.824398,19.10022 C 15.400648,19.10022 17.505719,16.805708 17.505719,13.846637 L 17.505719,11.745205 C 17.505719,8.7861344 15.400648,6.4916243 12.824398,6.4916243 L 7.1756064,6.4916243 C 7.0095223,6.4916243 6.8927299,6.4895782 6.8635186,6.4916243 z " - id="path2248" - sodipodi:nodetypes="cccccccccccccc" /> - <rect - style="opacity:1;fill:#9a9b96;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2209" - width="7" - height="1" - x="5" - y="11" - rx="0" - ry="1.9999999" /> - <rect - style="opacity:1;fill:#9a9b96;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect1358" - width="10" - height="1" - x="5" - y="13" - rx="0" - ry="2" /> - <rect - style="opacity:1;fill:#9a9b96;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect1360" - width="7" - height="1" - x="5" - y="15" - rx="0" - ry="1.9999999" /> + transform="matrix(0.546584,0,0,0.546584,1.167699,3.888195)" + style="fill:none;fill-opacity:1;stroke:white;stroke-width:1.82954407;stroke-miterlimit:4;stroke-opacity:1" + d="M 2.875,8.4375 C 2.6469872,8.4375 2.4375,8.6305983 2.4375,8.90625 L 2.4375,15.71875 L 2.4375,18.46875 L 2.4375,26.1875 C 2.4375,26.46315 2.6469898,26.65625 2.875,26.65625 L 5.0575572,26.65625 C 5.5726565,26.662634 5.9886729,27.078651 5.9950572,27.59375 L 7.0909095,26.8125 C 7.2621189,26.685027 8.9741324,26.618972 9.1875,26.625 L 22.125,26.65625 C 22.353012,26.65625 22.5625,26.463149 22.5625,26.1875 L 22.5625,18.46875 L 22.5625,15.71875 L 22.5625,8.90625 C 22.5625,8.6305986 22.353013,8.4375 22.125,8.4375 L 16.15625,8.4375 L 8.375,8.4375 L 2.875,8.4375 z " + id="path5536" + sodipodi:nodetypes="ccccccccccccccccccc" /> </g> </svg>
--- a/pidgin/pixmaps/protocols/48/scalable/irc.svg Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/pixmaps/protocols/48/scalable/irc.svg Fri Apr 27 05:20:10 2007 +0000 @@ -7,218 +7,178 @@ 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://inkscape.sourceforge.net/DTD/s odipodi-0.dtd" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="48" - height="48" - id="svg13306" + width="48px" + height="48px" + id="svg4345" sodipodi:version="0.32" - inkscape:version="0.43" - version="1.0" - inkscape:export-filename="/home/hbons/Desktop/Gaim Refresh/protocols/48/irc.png" + inkscape:version="0.44.1" + sodipodi:docbase="/home/hbons/Desktop" + sodipodi:docname="pidgin-32.svg" + inkscape:export-filename="/home/hbons/Desktop/pidgin.png" inkscape:export-xdpi="90" - inkscape:export-ydpi="90" - sodipodi:docbase="/home/hbons/Desktop/Gaim Refresh/protocols/48/scalable" - sodipodi:docname="irc.svg"> + inkscape:export-ydpi="90"> <defs - id="defs13308"> + id="defs4347"> <linearGradient - inkscape:collect="always" - id="linearGradient2253"> - <stop - style="stop-color:#eeeeec;stop-opacity:1;" - offset="0" - id="stop2255" /> + id="linearGradient2804"> <stop - style="stop-color:#eeeeec;stop-opacity:0;" - offset="1" - id="stop2257" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - id="linearGradient2233"> - <stop - style="stop-color:#eeeeec;stop-opacity:1;" + style="stop-color:black;stop-opacity:0;" offset="0" - id="stop2235" /> + id="stop2806" /> <stop - style="stop-color:#eeeeec;stop-opacity:0;" - offset="1" - id="stop2237" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - id="linearGradient2280"> + id="stop2812" + offset="0.5" + style="stop-color:black;stop-opacity:1;" /> <stop - style="stop-color:#d3d7cf;stop-opacity:1;" - offset="0" - id="stop2282" /> - <stop - style="stop-color:#d3d7cf;stop-opacity:0;" + style="stop-color:black;stop-opacity:0;" offset="1" - id="stop2284" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - id="linearGradient3150"> - <stop - style="stop-color:#2e3436;stop-opacity:1;" - offset="0" - id="stop3152" /> - <stop - style="stop-color:#2e3436;stop-opacity:0;" - offset="1" - id="stop3154" /> - </linearGradient> - <radialGradient - inkscape:collect="always" - xlink:href="#linearGradient3150" - id="radialGradient3156" - cx="10.748654" - cy="10.457643" - fx="10.748654" - fy="10.457643" - r="6.6449099" - gradientTransform="matrix(-0.842757,5.698892e-16,-4.565819e-9,-0.35721,19.80716,14.19321)" - gradientUnits="userSpaceOnUse" /> - <linearGradient - inkscape:collect="always" - id="linearGradient3131"> - <stop - style="stop-color:#eeeeec;stop-opacity:1;" - offset="0" - id="stop3133" /> - <stop - style="stop-color:#d3d7cf" - offset="1" - id="stop3135" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - id="linearGradient3121"> - <stop - style="stop-color:#d3d7cf;stop-opacity:1;" - offset="0" - id="stop3123" /> - <stop - style="stop-color:#d3d7cf;stop-opacity:0;" - offset="1" - id="stop3125" /> + id="stop2808" /> </linearGradient> <linearGradient inkscape:collect="always" - xlink:href="#linearGradient3121" - id="linearGradient3127" - x1="13" - y1="26.785713" - x2="13" - y2="18.078569" - gradientUnits="userSpaceOnUse" /> - <linearGradient + xlink:href="#linearGradient2804" + id="linearGradient1516" + gradientUnits="userSpaceOnUse" + x1="21.875" + y1="48.000977" + x2="21.875" + y2="40" /> + <radialGradient inkscape:collect="always" - xlink:href="#linearGradient3131" - id="linearGradient3137" - x1="18.206755" - y1="4.8468447" - x2="18.150391" - y2="13.775416" - gradientUnits="userSpaceOnUse" /> + xlink:href="#linearGradient2781" + id="radialGradient1514" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2,0,0,0.8,36,8.8)" + cx="1" + cy="44" + fx="1" + fy="44" + r="5" /> <linearGradient inkscape:collect="always" - xlink:href="#linearGradient3121" - id="linearGradient2314" - gradientUnits="userSpaceOnUse" - x1="13" - y1="26.785713" - x2="13" - y2="18.078569" /> + id="linearGradient2781"> + <stop + style="stop-color:black;stop-opacity:1;" + offset="0" + id="stop2783" /> + <stop + style="stop-color:black;stop-opacity:0;" + offset="1" + id="stop2785" /> + </linearGradient> <radialGradient inkscape:collect="always" - xlink:href="#linearGradient2280" - id="radialGradient2316" + xlink:href="#linearGradient2781" + id="radialGradient1512" gradientUnits="userSpaceOnUse" - gradientTransform="matrix(-1.276682,0,0,1.19816,31.40394,-2.987018)" - cx="10.5" - cy="12.373168" - fx="10.5" - fy="12.373168" - r="9.5" /> + gradientTransform="matrix(2,0,0,0.8,-13,-79.2)" + cx="1" + cy="44" + fx="1" + fy="44" + r="5" /> + <linearGradient + inkscape:collect="always" + id="linearGradient5235"> + <stop + style="stop-color:#2e3436;stop-opacity:1;" + offset="0" + id="stop5237" /> + <stop + style="stop-color:#2e3436;stop-opacity:0;" + offset="1" + id="stop5239" /> + </linearGradient> <radialGradient inkscape:collect="always" - xlink:href="#linearGradient3150" - id="radialGradient2259" + xlink:href="#linearGradient25546" + id="radialGradient25572" gradientUnits="userSpaceOnUse" - gradientTransform="matrix(-0.842757,5.698892e-16,-4.565819e-9,-0.35721,19.80716,14.19321)" - cx="10.748654" - cy="10.457643" - fx="10.748654" - fy="10.457643" - r="6.6449099" /> + gradientTransform="matrix(1,0,0,0.994693,0,4.16407e-2)" + cx="7.8836637" + cy="1.5104795" + fx="7.8836637" + fy="1.5104795" + r="8.4883642" /> <radialGradient inkscape:collect="always" - xlink:href="#linearGradient2280" - id="radialGradient2288" + xlink:href="#linearGradient25546" + id="radialGradient25568" gradientUnits="userSpaceOnUse" - gradientTransform="matrix(-3.068505,2.211325e-16,2.22395e-16,3.088141,49.79439,-16.48838)" - cx="10.288303" - cy="6.7567434" - fx="10.288303" - fy="6.7567434" - r="9.5" /> - <radialGradient + gradientTransform="matrix(1,0,0,0.994693,0,4.16407e-2)" + cx="7.8836741" + cy="0.14505707" + fx="7.8836741" + fy="0.14505707" + r="8.4883642" /> + <linearGradient inkscape:collect="always" - xlink:href="#linearGradient2280" - id="radialGradient2303" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(-3.068505,2.211325e-16,2.22395e-16,3.088141,49.79439,-16.48838)" - cx="10.288303" - cy="6.7567434" - fx="10.288303" - fy="6.7567434" - r="9.5" /> + id="linearGradient25546"> + <stop + style="stop-color:white;stop-opacity:1;" + offset="0" + id="stop25548" /> + <stop + style="stop-color:white;stop-opacity:0;" + offset="1" + id="stop25550" /> + </linearGradient> <radialGradient inkscape:collect="always" - xlink:href="#linearGradient2280" - id="radialGradient2223" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(4.465386,3.226064e-16,-3.236364e-16,4.505235,-27.38626,-17.2868)" - cx="10.288303" - cy="6.7567434" - fx="10.288303" - fy="6.7567434" - r="9.5" /> + xlink:href="#linearGradient25546" + id="radialGradient25554" + cx="7.8836637" + cy="2.6242435" + fx="7.8836637" + fy="2.6242435" + r="8.4883642" + gradientTransform="matrix(1.131317,0,0,1.125313,-1.035262,-0.301139)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + id="linearGradient3800"> + <stop + style="stop-color:#f4d9b1;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop3802" /> + <stop + style="stop-color:#df9725;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop3804" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient3816"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop3818" /> + <stop + style="stop-color:#000000;stop-opacity:0;" + offset="1" + id="stop3820" /> + </linearGradient> <radialGradient inkscape:collect="always" - xlink:href="#linearGradient2233" - id="radialGradient2239" - cx="19.5" - cy="17.711315" - fx="19.5" - fy="17.711315" - r="15.53125" - gradientTransform="matrix(1,0,0,0.966945,0,0.858834)" - gradientUnits="userSpaceOnUse" /> + xlink:href="#linearGradient3816" + id="radialGradient4179" + gradientUnits="userSpaceOnUse" + cx="31.112698" + cy="19.008621" + fx="31.112698" + fy="19.008621" + r="8.6620579" /> <radialGradient inkscape:collect="always" - xlink:href="#linearGradient2280" - id="radialGradient2243" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(-4.464356,3.225741e-16,3.235617e-16,4.504784,75.37169,-24.28519)" - cx="10.288303" - cy="6.7567434" - fx="10.288303" - fy="6.7567434" - r="9.5" /> - <radialGradient - inkscape:collect="always" - xlink:href="#linearGradient2253" - id="radialGradient2260" - cx="28.5" - cy="10.432241" - fx="28.5" - fy="10.432241" - r="15.5" - gradientTransform="matrix(1,0,0,0.965867,0,0.647388)" + xlink:href="#linearGradient5235" + id="radialGradient5241" + cx="23.234518" + cy="40.688972" + fx="23.234518" + fy="40.688972" + r="16.956987" + gradientTransform="matrix(1,0,0,0.133183,0,35.2699)" gradientUnits="userSpaceOnUse" /> </defs> <sodipodi:namedview @@ -228,20 +188,19 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="15.004829" - inkscape:cx="39.756047" - inkscape:cy="25.827154" + inkscape:zoom="13.062462" + inkscape:cx="40.814762" + inkscape:cy="25.717712" inkscape:current-layer="layer1" showgrid="true" inkscape:grid-bbox="true" inkscape:document-units="px" - fill="#eeeeec" - inkscape:window-width="1268" - inkscape:window-height="971" - inkscape:window-x="6" - inkscape:window-y="21" /> + inkscape:window-width="1274" + inkscape:window-height="966" + inkscape:window-x="3" + inkscape:window-y="25" /> <metadata - id="metadata13311"> + id="metadata4350"> <rdf:RDF> <cc:Work rdf:about=""> @@ -255,182 +214,80 @@ id="layer1" inkscape:label="Layer 1" inkscape:groupmode="layer"> - <rect - style="fill:#babdb6;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - id="rect2266" - width="11.6187" - height="1.942683" - x="12.205235" - y="14.932331" /> + <g + id="g1504" + style="opacity:0.12663754" + transform="matrix(0.851064,0,0,0.999995,3.148928,-3.9998)"> + <rect + transform="scale(-1,-1)" + y="-48" + x="-11" + height="8" + width="10" + id="rect1506" + style="opacity:1;color:black;fill:url(#radialGradient1512);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> + <rect + y="40" + x="38" + height="8" + width="10" + id="rect1508" + style="opacity:1;color:black;fill:url(#radialGradient1514);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> + <rect + y="40" + x="11" + height="8" + width="27" + id="rect1510" + style="opacity:1;color:black;fill:url(#linearGradient1516);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> + </g> <path sodipodi:type="arc" - style="opacity:0.5;fill:url(#radialGradient2259);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path2257" - sodipodi:cx="10.748654" - sodipodi:cy="10.457643" - sodipodi:rx="6.6449099" - sodipodi:ry="2.3675451" - d="M 17.393564 10.457643 A 6.6449099 2.3675451 0 1 1 4.1037445,10.457643 A 6.6449099 2.3675451 0 1 1 17.393564 10.457643 z" - transform="matrix(2.883092,0,0,2.199173,-2.082694,9.925056)" /> - <path - sodipodi:type="inkscape:offset" - inkscape:radius="-1.0020103" - inkscape:original="M 10.03125 5.5 C 5.2809556 5.6861502 1.5 8.7231084 1.5 12.4375 C 1.5 14.570281 2.4139213 16.850503 4.375 18.125 C 4.790921 19.906271 3.5825788 21.282326 3.375 21.5 C 3.7506605 21.398222 6.7302843 20.58004 7.84375 19.375 C 8.9660824 19.328744 9.5914383 19.40625 10.5 19.40625 C 15.465015 19.40625 19.500001 16.271711 19.5 12.4375 C 19.499999 8.6032883 15.465015 5.5 10.5 5.5 C 10.344844 5.4999998 10.184486 5.4939951 10.03125 5.5 z " - xlink:href="#path13316" - style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" - id="path2268" - inkscape:href="#path13316" - d="M 10.0625,6.5 C 7.8900031,6.5851338 5.9762716,7.3427975 4.625,8.4375 C 3.2737284,9.5322025 2.5,10.920293 2.5,12.4375 C 2.5,14.284032 3.2837785,16.226812 4.90625,17.28125 C 5.1287835,17.423752 5.2860248,17.648382 5.34375,17.90625 C 5.4955807,18.556498 5.4707531,19.125743 5.375,19.65625 C 6.0781419,19.333618 6.8270886,18.976092 7.09375,18.6875 C 7.2809756,18.490079 7.540428,18.377274 7.8125,18.375 C 8.9961476,18.326217 9.6484235,18.40625 10.5,18.40625 C 12.771643,18.40625 14.815021,17.674738 16.25,16.5625 C 17.684979,15.450262 18.5,14.003112 18.5,12.4375 C 18.5,10.871887 17.684227,9.4172787 16.25,8.3125 C 14.815773,7.2077213 12.773745,6.5 10.5,6.5 C 10.318992,6.4999998 10.162289,6.4960896 10.0625,6.5 z " - transform="matrix(-1.936449,0,0,1.942681,47.04675,-6.455167)" /> - <rect - style="fill:#babdb6;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - id="rect2270" - width="11.6187" - height="1.942683" - x="-35.428047" - y="14.914336" - transform="scale(-1,1)" /> - <rect - style="fill:#babdb6;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - id="rect2272" - width="17.428049" - height="1.9426821" - x="-35.428047" - y="18.799704" - transform="scale(-1,1)" /> + style="opacity:0.52838428;fill:url(#radialGradient5241);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path4340" + sodipodi:cx="23.234518" + sodipodi:cy="40.688972" + sodipodi:rx="16.956987" + sodipodi:ry="2.2583797" + d="M 40.191505 40.688972 A 16.956987 2.2583797 0 1 1 6.2775307,40.688972 A 16.956987 2.2583797 0 1 1 40.191505 40.688972 z" + transform="matrix(1.208941,0,0,1.980928,3.410841,15.87176)" /> <path - style="fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.00000012;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 34.348803,4.2295857 C 39.82004,4.6140861 44.142074,9.6804488 44.142074,15.885678 L 44.142074,19.771041 C 44.142074,24.10966 42.054403,27.902245 38.918997,29.909414 L 38.918997,35.433916 L 33.31507,31.427134 L 23.249765,31.427134 C 17.462594,31.427134 12.803609,26.228517 12.803609,19.771041 L 12.803609,15.885678 C 12.803609,9.4282028 17.462594,4.2295857 23.249765,4.2295857 L 33.69592,4.2295857 C 33.92198,4.2295857 34.126396,4.2139557 34.348803,4.2295857 z " - id="path2274" /> - <path - style="fill:url(#radialGradient2243);fill-opacity:1;stroke:#555753;stroke-width:0.99999934;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 34.496821,3.5010743 C 40.084348,3.8964132 44.498251,9.1055933 44.498251,15.485746 L 44.498251,19.480634 C 44.498251,23.941557 41.693725,27.762085 38.491674,29.825839 L 38.491674,35.506073 L 33.441114,31.465307 L 23.161869,31.465307 C 17.251689,31.465307 12.493676,26.120146 12.493676,19.480634 L 12.493676,15.485746 C 12.493676,8.8462358 17.251689,3.5010743 23.161869,3.5010743 L 33.830062,3.5010743 C 34.060926,3.5010743 34.269686,3.4850033 34.496821,3.5010743 z " - id="path2276" - sodipodi:nodetypes="cccccccccccc" /> - <path - sodipodi:type="inkscape:offset" - inkscape:radius="-1.0041453" - inkscape:original="M 23.15625 3.5 C 17.24607 3.5 12.5 8.8604894 12.5 15.5 L 12.5 19.46875 C 12.5 26.108262 17.24607 31.46875 23.15625 31.46875 L 33.4375 31.46875 L 38.5 35.5 L 38.5 29.8125 C 41.702051 27.748746 44.499998 23.929672 44.5 19.46875 L 44.5 15.5 C 44.5 9.1198473 40.087526 3.8953389 34.5 3.5 C 34.272865 3.483929 34.074613 3.5 33.84375 3.5 L 23.15625 3.5 z " - xlink:href="#path2276" - style="fill:url(#radialGradient2260);fill-opacity:1.0;stroke:#eeeeec;stroke-width:0.99999934;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path2241" - inkscape:href="#path2276" - d="M 23.15625,4.5 C 17.853238,4.5 13.5,9.339013 13.5,15.5 L 13.5,19.46875 C 13.5,25.629739 17.853238,30.46875 23.15625,30.46875 L 33.4375,30.46875 C 33.664573,30.468909 33.884889,30.54602 34.0625,30.6875 L 37.5,33.4375 L 37.5,29.8125 C 37.501987,29.469676 37.678723,29.151552 37.96875,28.96875 C 40.920535,27.066295 43.499998,23.509797 43.5,19.46875 L 43.5,15.5 C 43.5,9.5828211 39.440884,4.8540086 34.4375,4.5 C 34.298411,4.4901587 34.121214,4.5 33.84375,4.5 L 23.15625,4.5 z " /> - <path - sodipodi:type="inkscape:offset" - inkscape:radius="-1.0020103" - inkscape:original="M 10.03125 5.5 C 5.2809556 5.6861502 1.5 8.7231084 1.5 12.4375 C 1.5 14.570281 2.4139213 16.850503 4.375 18.125 C 4.790921 19.906271 3.5825788 21.282326 3.375 21.5 C 3.7506605 21.398222 6.7302843 20.58004 7.84375 19.375 C 8.9660824 19.328744 9.5914383 19.40625 10.5 19.40625 C 15.465015 19.40625 19.500001 16.271711 19.5 12.4375 C 19.499999 8.6032883 15.465015 5.5 10.5 5.5 C 10.344844 5.4999998 10.184486 5.4939951 10.03125 5.5 z " - xlink:href="#path13316" - style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" - id="path2288" - inkscape:href="#path13316" - d="M 10.0625,6.5 C 7.8900031,6.5851338 5.9762716,7.3427975 4.625,8.4375 C 3.2737284,9.5322025 2.5,10.920293 2.5,12.4375 C 2.5,14.284032 3.2837785,16.226812 4.90625,17.28125 C 5.1287835,17.423752 5.2860248,17.648382 5.34375,17.90625 C 5.4955807,18.556498 5.4707531,19.125743 5.375,19.65625 C 6.0781419,19.333618 6.8270886,18.976092 7.09375,18.6875 C 7.2809756,18.490079 7.540428,18.377274 7.8125,18.375 C 8.9961476,18.326217 9.6484235,18.40625 10.5,18.40625 C 12.771643,18.40625 14.815021,17.674738 16.25,16.5625 C 17.684979,15.450262 18.5,14.003112 18.5,12.4375 C 18.5,10.871887 17.684227,9.4172787 16.25,8.3125 C 14.815773,7.2077213 12.773745,6.5 10.5,6.5 C 10.318992,6.4999998 10.162289,6.4960896 10.0625,6.5 z " - transform="matrix(-1.942681,0,0,1.942681,47.0578,-6.838631)" /> - <rect - style="fill:#babdb6;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - id="rect2300" - width="11.656093" - height="1.942683" - x="-35.401695" - y="22.301601" - transform="scale(-1,1)" /> + style="opacity:1;fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:0.95516169;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 2.875,7.5 C 2.1210885,7.5 1.5,8.1265217 1.5,8.90625 L 1.5,15.71875 L 1.5,18.46875 L 1.5,26.189031 C 1.5,26.968759 2.1210885,27.595282 2.875,27.595281 L 5.5,27.595281 L 5.5,30.532781 L 9.2020155,27.56625 L 22.125,27.595281 C 22.878911,27.595281 23.5,26.968758 23.5,26.189031 L 23.5,18.46875 L 23.5,15.71875 L 23.5,8.90625 C 23.5,8.1265221 22.878912,7.5000001 22.125,7.5 L 16.15625,7.5 L 8.375,7.5 L 2.875,7.5 z " + id="path4334" + transform="matrix(-1.045455,0,0,1.048433,44.0682,0.636752)" + sodipodi:nodetypes="cccccccccccccccccc" /> <path sodipodi:type="inkscape:offset" - inkscape:radius="-1.0020103" - inkscape:original="M 10.03125 5.5 C 5.2809556 5.6861502 1.5 8.7231084 1.5 12.4375 C 1.5 14.570281 2.4139213 16.850503 4.375 18.125 C 4.790921 19.906271 3.5825788 21.282326 3.375 21.5 C 3.7506605 21.398222 6.7302843 20.58004 7.84375 19.375 C 8.9660824 19.328744 9.5914383 19.40625 10.5 19.40625 C 15.465015 19.40625 19.500001 16.271711 19.5 12.4375 C 19.499999 8.6032883 15.465015 5.5 10.5 5.5 C 10.344844 5.4999998 10.184486 5.4939951 10.03125 5.5 z " - xlink:href="#path13316" - style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" - id="path13434" - inkscape:href="#path13316" - d="M 10.0625,6.5 C 7.8900031,6.5851338 5.9762716,7.3427975 4.625,8.4375 C 3.2737284,9.5322025 2.5,10.920293 2.5,12.4375 C 2.5,14.284032 3.2837785,16.226812 4.90625,17.28125 C 5.1287835,17.423752 5.2860248,17.648382 5.34375,17.90625 C 5.4955807,18.556498 5.4707531,19.125743 5.375,19.65625 C 6.0781419,19.333618 6.8270886,18.976092 7.09375,18.6875 C 7.2809756,18.490079 7.540428,18.377274 7.8125,18.375 C 8.9961476,18.326217 9.6484235,18.40625 10.5,18.40625 C 12.771643,18.40625 14.815021,17.674738 16.25,16.5625 C 17.684979,15.450262 18.5,14.003112 18.5,12.4375 C 18.5,10.871887 17.684227,9.4172787 16.25,8.3125 C 14.815773,7.2077213 12.773745,6.5 10.5,6.5 C 10.318992,6.4999998 10.162289,6.4960896 10.0625,6.5 z " - transform="matrix(-1.318248,0,0,1.318248,41.87276,-10.91182)" /> + inkscape:radius="-0.94924349" + inkscape:original="M 2.875 7.5 C 2.1210885 7.5 1.5 8.1265217 1.5 8.90625 L 1.5 15.71875 L 1.5 18.46875 L 1.5 26.1875 C 1.5 26.967227 2.1210885 27.593751 2.875 27.59375 L 5.5 27.59375 L 5.5 30.53125 L 9.1875 27.5625 L 22.125 27.59375 C 22.878911 27.593749 23.5 26.967227 23.5 26.1875 L 23.5 18.46875 L 23.5 15.71875 L 23.5 8.90625 C 23.5 8.1265221 22.878912 7.5000001 22.125 7.5 L 16.15625 7.5 L 8.375 7.5 L 2.875 7.5 z " + style="opacity:1;fill:none;fill-opacity:1;stroke:white;stroke-width:0.95516169;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path4336" + d="M 2.875,8.4375 C 2.6469872,8.4375 2.4375,8.6305983 2.4375,8.90625 L 2.4375,15.71875 L 2.4375,18.46875 L 2.4375,26.1875 C 2.4375,26.46315 2.6469898,26.65625 2.875,26.65625 L 5.5,26.65625 C 6.0150993,26.662634 6.4311157,27.078651 6.4375,27.59375 L 6.4375,28.5625 L 8.59375,26.8125 C 8.7649594,26.685027 8.9741324,26.618972 9.1875,26.625 L 22.125,26.65625 C 22.353012,26.65625 22.5625,26.463149 22.5625,26.1875 L 22.5625,18.46875 L 22.5625,15.71875 L 22.5625,8.90625 C 22.5625,8.6305986 22.353013,8.4375 22.125,8.4375 L 16.15625,8.4375 L 8.375,8.4375 L 2.875,8.4375 z " + transform="matrix(-1.045455,0,0,1.048433,44.0682,0.636752)" /> <path + transform="matrix(2.539812,0,0,0.410815,-52.0204,75.74948)" sodipodi:type="arc" - style="opacity:0.5;fill:url(#radialGradient3156);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path3140" - sodipodi:cx="10.748654" - sodipodi:cy="10.457643" - sodipodi:rx="6.6449099" - sodipodi:ry="2.3675451" - d="M 17.393564 10.457643 A 6.6449099 2.3675451 0 1 1 4.1037445,10.457643 A 6.6449099 2.3675451 0 1 1 17.393564 10.457643 z" - transform="matrix(2.883092,0,0,2.111891,-11.14725,15.91459)" /> + style="opacity:1;color:black;fill:url(#radialGradient4179);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + id="path4306" + sodipodi:cx="31.112698" + sodipodi:cy="19.008621" + sodipodi:rx="8.6620579" + sodipodi:ry="8.6620579" + d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1 22.45064,19.008621 A 8.6620579 8.6620579 0 1 1 39.774755 19.008621 z" /> + <path + style="opacity:1;fill:#efefef;fill-opacity:1;stroke:#787878;stroke-width:0.95516169;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 2.875,7.5 C 2.1210885,7.5 1.5,8.1265217 1.5,8.90625 L 1.5,15.71875 L 1.5,18.46875 L 1.5,26.189031 C 1.5,26.968759 2.1210885,27.595282 2.875,27.595281 L 5.5,27.595281 L 5.5,30.532781 L 9.2020155,27.56625 L 22.125,27.595281 C 22.878911,27.595281 23.5,26.968758 23.5,26.189031 L 23.5,18.46875 L 23.5,15.71875 L 23.5,8.90625 C 23.5,8.1265221 22.878912,7.5000001 22.125,7.5 L 16.15625,7.5 L 8.375,7.5 L 2.875,7.5 z " + id="rect1326" + transform="matrix(1.045455,0,0,1.048433,3.931818,8.785079)" + sodipodi:nodetypes="cccccccccccccccccc" /> <path sodipodi:type="inkscape:offset" - inkscape:radius="-1.0020103" - inkscape:original="M 10.03125 5.5 C 5.2809556 5.6861502 1.5 8.7231084 1.5 12.4375 C 1.5 14.570281 2.4139213 16.850503 4.375 18.125 C 4.790921 19.906271 3.5825788 21.282326 3.375 21.5 C 3.7506605 21.398222 6.7302843 20.58004 7.84375 19.375 C 8.9660824 19.328744 9.5914383 19.40625 10.5 19.40625 C 15.465015 19.40625 19.500001 16.271711 19.5 12.4375 C 19.499999 8.6032883 15.465015 5.5 10.5 5.5 C 10.344844 5.4999998 10.184486 5.4939951 10.03125 5.5 z " - xlink:href="#path13316" - style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" - id="path13323" - inkscape:href="#path13316" - d="M 10.0625,6.5 C 7.8900031,6.5851338 5.9762716,7.3427975 4.625,8.4375 C 3.2737284,9.5322025 2.5,10.920293 2.5,12.4375 C 2.5,14.284032 3.2837785,16.226812 4.90625,17.28125 C 5.1287835,17.423752 5.2860248,17.648382 5.34375,17.90625 C 5.4955807,18.556498 5.4707531,19.125743 5.375,19.65625 C 6.0781419,19.333618 6.8270886,18.976092 7.09375,18.6875 C 7.2809756,18.490079 7.540428,18.377274 7.8125,18.375 C 8.9961476,18.326217 9.6484235,18.40625 10.5,18.40625 C 12.771643,18.40625 14.815021,17.674738 16.25,16.5625 C 17.684979,15.450262 18.5,14.003112 18.5,12.4375 C 18.5,10.871887 17.684227,9.4172787 16.25,8.3125 C 14.815773,7.2077213 12.773745,6.5 10.5,6.5 C 10.318992,6.4999998 10.162289,6.4960896 10.0625,6.5 z " - transform="matrix(1.942681,0,0,1.942681,0.448052,0.914103)" /> - <rect - style="fill:#babdb6;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - id="rect13438" - width="11.656093" - height="1.942683" - x="12.104144" - y="22.283606" /> - <rect - style="fill:#babdb6;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - id="rect13440" - width="17.484138" - height="1.9426821" - x="12.104144" - y="26.168972" /> - <path - style="opacity:1;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.00000012;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 13.6875,11.006947 C 8.2753561,11.391447 4,16.45781 4,22.663041 L 4,26.548402 C 4,30.887021 6.065124,34.679607 9.166667,36.686777 L 9.166667,42.211278 L 14.71007,38.204496 L 24.666667,38.204496 C 30.391333,38.204496 35,33.005879 35,26.548402 L 35,22.663041 C 35,16.205564 30.391333,11.006947 24.666667,11.006947 L 14.333333,11.006947 C 14.109714,11.006947 13.907506,10.991317 13.6875,11.006947 z " - id="path2262" /> - <path - style="opacity:1;fill:url(#radialGradient2223);fill-opacity:1;stroke:#555753;stroke-width:0.99999958;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 13.498045,10.502236 C 7.9092287,10.897615 3.4943089,16.107317 3.4943089,22.488107 L 3.4943089,26.483398 C 3.4943089,30.944764 6.366081,34.765675 9.5688701,36.829634 L 9.5688701,42.510438 L 14.553995,38.469269 L 24.835613,38.469269 C 30.747154,38.469269 35.506266,33.12357 35.506266,26.483398 L 35.506266,22.488107 C 35.506266,15.847933 30.747154,10.502236 24.835613,10.502236 L 14.164961,10.502236 C 13.934042,10.502236 13.725234,10.486164 13.498045,10.502236 z " - id="rect1326" - sodipodi:nodetypes="cccccccccccc" /> - <path - sodipodi:type="inkscape:offset" - inkscape:radius="-0.96460479" - inkscape:original="M 13.5 10.5 C 7.9111837 10.895379 3.5 16.11921 3.5 22.5 L 3.5 26.46875 C 3.5 30.930116 6.3597109 34.779791 9.5625 36.84375 L 9.5625 42.5 L 14.5625 38.46875 L 24.84375 38.46875 C 30.755291 38.46875 35.5 33.108922 35.5 26.46875 L 35.5 22.5 C 35.499998 15.859825 30.755291 10.5 24.84375 10.5 L 14.15625 10.5 C 13.925331 10.5 13.727189 10.483928 13.5 10.5 z " - xlink:href="#rect1326" - style="opacity:1;fill:url(#radialGradient2239);fill-opacity:1.0;stroke:#eeeeec;stroke-width:0.99999958;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path2221" - inkscape:href="#rect1326" - d="M 13.5625,11.46875 C 8.5346329,11.824445 4.46875,16.563779 4.46875,22.5 L 4.46875,26.46875 C 4.46875,30.517912 7.1302756,34.121511 10.09375,36.03125 C 10.368062,36.210248 10.532808,36.516206 10.53125,36.84375 L 10.53125,40.5 L 13.96875,37.71875 C 14.136444,37.581153 14.345618,37.504088 14.5625,37.5 L 24.84375,37.5 C 30.172238,37.5 34.53125,32.649419 34.53125,26.46875 L 34.53125,22.5 C 34.531248,16.319328 30.172238,11.46875 24.84375,11.46875 L 14.15625,11.46875 C 13.880573,11.46875 13.705156,11.458658 13.5625,11.46875 z " /> - <rect - style="opacity:1;fill:#9a9b96;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2207" - width="19" - height="1" - x="10" - y="19" - rx="0" - ry="2" /> - <rect - style="opacity:1;fill:#9a9b96;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2209" - width="13" - height="1" - x="10" - y="22" - rx="0" - ry="2" /> - <rect - style="opacity:1;fill:#9a9b96;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2211" - width="19" - height="1" - x="10" - y="25" - rx="0" - ry="2" /> - <rect - style="opacity:1;fill:#9a9b96;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2213" - width="12.596705" - height="1" - x="10" - y="28" - rx="0" - ry="2" /> + inkscape:radius="-0.94924349" + inkscape:original="M 2.875 7.5 C 2.1210885 7.5 1.5 8.1265217 1.5 8.90625 L 1.5 15.71875 L 1.5 18.46875 L 1.5 26.1875 C 1.5 26.967227 2.1210885 27.593751 2.875 27.59375 L 5.5 27.59375 L 5.5 30.53125 L 9.1875 27.5625 L 22.125 27.59375 C 22.878911 27.593749 23.5 26.967227 23.5 26.1875 L 23.5 18.46875 L 23.5 15.71875 L 23.5 8.90625 C 23.5 8.1265221 22.878912 7.5000001 22.125 7.5 L 16.15625 7.5 L 8.375 7.5 L 2.875 7.5 z " + style="opacity:1;fill:none;fill-opacity:1;stroke:white;stroke-width:0.95516169;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path5034" + d="M 2.875,8.4375 C 2.6469872,8.4375 2.4375,8.6305983 2.4375,8.90625 L 2.4375,15.71875 L 2.4375,18.46875 L 2.4375,26.1875 C 2.4375,26.46315 2.6469898,26.65625 2.875,26.65625 L 5.5,26.65625 C 6.0150993,26.662634 6.4311157,27.078651 6.4375,27.59375 L 6.4375,28.5625 L 8.59375,26.8125 C 8.7649594,26.685027 8.9741324,26.618972 9.1875,26.625 L 22.125,26.65625 C 22.353012,26.65625 22.5625,26.463149 22.5625,26.1875 L 22.5625,18.46875 L 22.5625,15.71875 L 22.5625,8.90625 C 22.5625,8.6305986 22.353013,8.4375 22.125,8.4375 L 16.15625,8.4375 L 8.375,8.4375 L 2.875,8.4375 z " + transform="matrix(1.045455,0,0,1.048433,3.931818,8.785079)" /> </g> </svg>
--- a/pidgin/pixmaps/status/16/Makefile.am Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/pixmaps/status/16/Makefile.am Fri Apr 27 05:20:10 2007 +0000 @@ -1,14 +1,10 @@ SUBDIRS = rtl scalable EXTRA_DIST = available.png \ - available_i.png \ away.png \ - away_i.png \ busy.png \ - busy_i.png \ chat.png \ extended-away.png \ - extended-away_i.png \ invisible.png \ log-in.png \ log-out.png \
--- a/pidgin/pixmaps/status/16/Makefile.mingw Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/pixmaps/status/16/Makefile.mingw Fri Apr 27 05:20:10 2007 +0000 @@ -18,3 +18,5 @@ cp $(pidginstatuspix_DATA) $(pidginstatuspixdir); \ fi; + $(MAKE) -C rtl -f Makefile.mingw install || exit 1; \ +
--- a/pidgin/pixmaps/status/16/rtl/Makefile.am Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/pixmaps/status/16/rtl/Makefile.am Fri Apr 27 05:20:10 2007 +0000 @@ -1,4 +1,4 @@ -EXTRA_DIST = chat.png extended-away.png extended-away_i.png +EXTRA_DIST = extended-away.png pidginstatuspixdir = $(datadir)/pixmaps/pidgin/status/16/rtl
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/pixmaps/status/16/rtl/Makefile.mingw Fri Apr 27 05:20:10 2007 +0000 @@ -0,0 +1,20 @@ +# +# Makefile.mingw +# +# Description: Makefile for win32 (mingw) version of Pidgin pixmaps +# + +PIDGIN_TREE_TOP := ../../../../.. +include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak + +datadir = $(PIDGIN_INSTALL_DIR) +include ./Makefile.am + +.PHONY: install + +install: + if test '$(pidginstatuspix_DATA)'; then \ + mkdir -p $(pidginstatuspixdir); \ + cp $(pidginstatuspix_DATA) $(pidginstatuspixdir); \ + fi; +
--- a/pidgin/pixmaps/status/22/Makefile.mingw Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/pixmaps/status/22/Makefile.mingw Fri Apr 27 05:20:10 2007 +0000 @@ -18,3 +18,5 @@ cp $(pidginstatuspix_DATA) $(pidginstatuspixdir); \ fi; + $(MAKE) -C rtl -f Makefile.mingw install || exit 1; \ +
--- a/pidgin/pixmaps/status/22/rtl/Makefile.am Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/pixmaps/status/22/rtl/Makefile.am Fri Apr 27 05:20:10 2007 +0000 @@ -1,4 +1,4 @@ -EXTRA_DIST = chat.png extended-away.png +EXTRA_DIST = extended-away.png pidginstatuspixdir = $(datadir)/pixmaps/pidgin/status/22/rtl
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/pixmaps/status/22/rtl/Makefile.mingw Fri Apr 27 05:20:10 2007 +0000 @@ -0,0 +1,20 @@ +# +# Makefile.mingw +# +# Description: Makefile for win32 (mingw) version of Pidgin pixmaps +# + +PIDGIN_TREE_TOP := ../../../../.. +include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak + +datadir = $(PIDGIN_INSTALL_DIR) +include ./Makefile.am + +.PHONY: install + +install: + if test '$(pidginstatuspix_DATA)'; then \ + mkdir -p $(pidginstatuspixdir); \ + cp $(pidginstatuspix_DATA) $(pidginstatuspixdir); \ + fi; +
--- a/pidgin/pixmaps/status/32/Makefile.mingw Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/pixmaps/status/32/Makefile.mingw Fri Apr 27 05:20:10 2007 +0000 @@ -18,3 +18,5 @@ cp $(pidginstatuspix_DATA) $(pidginstatuspixdir); \ fi; + $(MAKE) -C rtl -f Makefile.mingw install || exit 1; \ +
--- a/pidgin/pixmaps/status/32/rtl/Makefile.am Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/pixmaps/status/32/rtl/Makefile.am Fri Apr 27 05:20:10 2007 +0000 @@ -1,4 +1,4 @@ -EXTRA_DIST = chat.png extended-away.png +EXTRA_DIST = extended-away.png pidginstatuspixdir = $(datadir)/pixmaps/pidgin/status/32/rtl
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/pixmaps/status/32/rtl/Makefile.mingw Fri Apr 27 05:20:10 2007 +0000 @@ -0,0 +1,20 @@ +# +# Makefile.mingw +# +# Description: Makefile for win32 (mingw) version of Pidgin pixmaps +# + +PIDGIN_TREE_TOP := ../../../../.. +include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak + +datadir = $(PIDGIN_INSTALL_DIR) +include ./Makefile.am + +.PHONY: install + +install: + if test '$(pidginstatuspix_DATA)'; then \ + mkdir -p $(pidginstatuspixdir); \ + cp $(pidginstatuspix_DATA) $(pidginstatuspixdir); \ + fi; +
--- a/pidgin/pixmaps/status/48/Makefile.mingw Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/pixmaps/status/48/Makefile.mingw Fri Apr 27 05:20:10 2007 +0000 @@ -18,3 +18,5 @@ cp $(pidginstatuspix_DATA) $(pidginstatuspixdir); \ fi; + $(MAKE) -C rtl -f Makefile.mingw install || exit 1; \ +
--- a/pidgin/pixmaps/status/48/rtl/Makefile.am Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/pixmaps/status/48/rtl/Makefile.am Fri Apr 27 05:20:10 2007 +0000 @@ -1,4 +1,4 @@ -EXTRA_DIST = chat.png extended-away.png +EXTRA_DIST = extended-away.png pidginstatuspixdir = $(datadir)/pixmaps/pidgin/status/48/rtl
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/pixmaps/status/48/rtl/Makefile.mingw Fri Apr 27 05:20:10 2007 +0000 @@ -0,0 +1,20 @@ +# +# Makefile.mingw +# +# Description: Makefile for win32 (mingw) version of Pidgin pixmaps +# + +PIDGIN_TREE_TOP := ../../../../.. +include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak + +datadir = $(PIDGIN_INSTALL_DIR) +include ./Makefile.am + +.PHONY: install + +install: + if test '$(pidginstatuspix_DATA)'; then \ + mkdir -p $(pidginstatuspixdir); \ + cp $(pidginstatuspix_DATA) $(pidginstatuspixdir); \ + fi; +
--- a/pidgin/pixmaps/status/Makefile.am Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/pixmaps/status/Makefile.am Fri Apr 27 05:20:10 2007 +0000 @@ -3,7 +3,11 @@ EXTRA_DIST = \ Makefile.mingw \ 16/Makefile.mingw \ + 16/rtl/Makefile.mingw \ 22/Makefile.mingw \ + 22/rtl/Makefile.mingw \ 32/Makefile.mingw \ - 48/Makefile.mingw + 32/rtl/Makefile.mingw \ + 48/Makefile.mingw \ + 48/rtl/Makefile.mingw
--- a/pidgin/pixmaps/toolbar/16/Makefile.am Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/pixmaps/toolbar/16/Makefile.am Fri Apr 27 05:20:10 2007 +0000 @@ -1,7 +1,6 @@ SUBDIRS = scalable -EXTRA_DIST = accounts.png \ - change-bgcolor.png \ +EXTRA_DIST = change-bgcolor.png \ change-fgcolor.png \ emote-select.png \ font-face.png \ @@ -11,10 +10,7 @@ insert-link.png \ message-new.png \ plugins.png \ - typing.png \ - unblock.png \ - user-info.png \ - window-icon.png + unblock.png pidgintoolbarpixdir = $(datadir)/pixmaps/pidgin/toolbar/16 pidgintoolbarpix_DATA = $(EXTRA_DIST)
--- a/pidgin/pixmaps/toolbar/16/scalable/Makefile.am Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/pixmaps/toolbar/16/scalable/Makefile.am Fri Apr 27 05:20:10 2007 +0000 @@ -1,14 +1,5 @@ -EXTRA_DIST = accounts.svg \ - change-bgcolor.svg \ +EXTRA_DIST = change-bgcolor.svg \ change-fgcolor.svg \ - connect.svg \ - disconnect.svg \ emote-select.svg \ font-size-down.svg \ - font-size-up.svg \ - insert-image.svg \ - message-new.svg \ - plugins.svg \ - typing.svg \ - user-info.svg \ - window-icon.svg + font-size-up.svg
--- a/pidgin/pixmaps/toolbar/16/scalable/accounts.svg Fri Apr 27 05:18:14 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,118 +0,0 @@ -<?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://inkscape.sourceforge.net/DTD/s odipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16px" - height="16px" - id="svg2199" - sodipodi:version="0.32" - inkscape:version="0.43" - sodipodi:docbase="/home/hbons/Desktop/Gaim Refresh/toolbars/scalable" - sodipodi:docname="accounts.svg" - inkscape:export-filename="/home/hbons/Desktop/Gaim Refresh/toolbars/accounts.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90"> - <defs - id="defs2201" /> - <sodipodi:namedview - id="base" - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1.0" - inkscape:pageopacity="0.0" - inkscape:pageshadow="2" - inkscape:zoom="38.648618" - inkscape:cx="14.066025" - inkscape:cy="7.486937" - inkscape:current-layer="layer1" - showgrid="true" - inkscape:grid-bbox="true" - inkscape:document-units="px" - fill="#d3d7cf" - inkscape:window-width="1268" - inkscape:window-height="971" - inkscape:window-x="6" - inkscape:window-y="21" /> - <metadata - id="metadata2204"> - <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 - id="layer1" - inkscape:label="Layer 1" - inkscape:groupmode="layer"> - <path - style="opacity:0.75;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 10.281751,1.5284516 C 8.7335853,1.6463733 7.5005015,2.9502205 7.5005014,4.5284516 C 7.5005014,6.1843013 8.8446817,7.5284513 10.500501,7.5284513 C 12.156321,7.5284513 13.500501,6.1843013 13.500501,4.5284516 C 13.500501,2.8726024 12.15632,1.5284515 10.500501,1.5284516 C 10.422884,1.5284516 10.35789,1.5226522 10.281751,1.5284516 z M 8.7505014,7.5193603 C 7.4849597,7.6468123 6.5005014,8.7221143 6.5005014,10.01936 C 6.5005014,11.403089 7.6134857,12.51936 9.0005014,12.51936 L 12.000501,12.51936 C 13.387517,12.51936 14.500501,11.403089 14.5005,10.01936 C 14.5005,8.6356313 13.387517,7.5193603 12.000501,7.5193603 L 9.0005014,7.5193603 C 8.9138129,7.5193603 8.8348708,7.5108633 8.7505014,7.5193603 z " - id="path2187" - sodipodi:nodetypes="cssssccsccsccc" /> - <path - style="opacity:0.75;fill:#d3d7cf;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 10.281751,1.5025775 C 8.7335853,1.6204992 7.5005015,2.9243464 7.5005014,4.5025775 C 7.5005014,6.1584263 8.8446817,7.5025773 10.500501,7.5025773 C 12.156321,7.5025773 13.500501,6.1584273 13.500501,4.5025775 C 13.500501,2.8467283 12.15632,1.5025774 10.500501,1.5025775 C 10.422884,1.5025775 10.35789,1.4967781 10.281751,1.5025775 z M 8.7505014,7.5193603 C 7.4849597,7.6468123 6.5005014,8.7221143 6.5005014,10.01936 C 6.5005014,11.403089 7.6134857,12.51936 9.0005014,12.51936 L 12.000501,12.51936 C 13.387517,12.51936 14.500501,11.403089 14.5005,10.01936 C 14.5005,8.6356313 13.387517,7.5193603 12.000501,7.5193603 L 9.0005014,7.5193603 C 8.9138129,7.5193603 8.8348708,7.5108633 8.7505014,7.5193603 z " - id="path2189" - sodipodi:nodetypes="cssssccsccsccc" /> - <path - sodipodi:type="arc" - style="opacity:0.75;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#eeeeec;stroke-width:0.95726573;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path2191" - sodipodi:cx="4.0769801" - sodipodi:cy="5.9314356" - sodipodi:rx="1.9146039" - sodipodi:ry="1.9146039" - d="M 5.9915841 5.9314356 A 1.9146039 1.9146039 0 1 1 2.1623762,5.9314356 A 1.9146039 1.9146039 0 1 1 5.9915841 5.9314356 z" - transform="matrix(1.044633,0,0,1.044651,6.24111,-1.679591)" /> - <path - sodipodi:type="inkscape:offset" - inkscape:radius="-1.0137123" - inkscape:original="M 4 9.5 C 2.6129841 9.5 1.5 10.616271 1.5 12 C 1.5 13.383729 2.6129843 14.5 4 14.5 L 7 14.5 C 8.3870159 14.5 9.5000001 13.383729 9.5 12 C 9.5 10.616271 8.387016 9.5 7 9.5 L 4 9.5 z " - xlink:href="#rect3093" - style="opacity:0.75;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#eeeeec;stroke-width:1.00000048;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path2193" - d="M 4,10.5 C 3.1568748,10.5 2.5,11.159848 2.5,12 C 2.5,12.840152 3.1568751,13.5 4,13.5 L 7,13.5 C 7.8431252,13.5 8.5000001,12.840152 8.5,12 C 8.5,11.159848 7.8431253,10.5 7,10.5 L 4,10.5 z " - transform="translate(5.000501,-1.980639)" - inkscape:href="#rect3093" /> - <path - style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 5.281635,4.5116692 C 3.7334689,4.6295909 2.5003851,5.9334381 2.500385,7.5116692 C 2.500385,9.1675184 3.8445653,10.511669 5.500385,10.511669 C 7.1562046,10.511669 8.5003847,9.1675186 8.500385,7.5116692 C 8.500385,5.85582 7.1562045,4.5116691 5.500385,4.5116692 C 5.4227685,4.5116692 5.3577743,4.5058698 5.281635,4.5116692 z M 3.750385,10.502578 C 2.4848433,10.63003 1.500385,11.705332 1.500385,13.002578 C 1.500385,14.386307 2.6133693,15.502578 4.000385,15.502578 L 7.000385,15.502578 C 8.3874009,15.502578 9.5003855,14.386307 9.5003845,13.002578 C 9.5003845,11.618849 8.387401,10.502578 7.000385,10.502578 L 4.000385,10.502578 C 3.9136965,10.502578 3.8347544,10.494081 3.750385,10.502578 z " - id="path3120" - sodipodi:nodetypes="cssssccsccsccc" /> - <path - style="opacity:1;fill:#d3d7cf;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 5.281635,4.4857951 C 3.7334689,4.6037168 2.5003851,5.907564 2.500385,7.4857951 C 2.500385,9.1416443 3.8445653,10.485795 5.500385,10.485795 C 7.1562046,10.485795 8.5003847,9.1416445 8.500385,7.4857951 C 8.500385,5.8299459 7.1562045,4.485795 5.500385,4.4857951 C 5.4227685,4.4857951 5.3577743,4.4799957 5.281635,4.4857951 z M 3.750385,10.502578 C 2.4848433,10.63003 1.500385,11.705332 1.500385,13.002578 C 1.500385,14.386307 2.6133693,15.502578 4.000385,15.502578 L 7.000385,15.502578 C 8.3874009,15.502578 9.5003855,14.386307 9.5003845,13.002578 C 9.5003845,11.618849 8.387401,10.502578 7.000385,10.502578 L 4.000385,10.502578 C 3.9136965,10.502578 3.8347544,10.494081 3.750385,10.502578 z " - id="path2207" - sodipodi:nodetypes="cssssccsccsccc" /> - <path - sodipodi:type="arc" - style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#eeeeec;stroke-width:0.95726573;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path3082" - sodipodi:cx="4.0769801" - sodipodi:cy="5.9314356" - sodipodi:rx="1.9146039" - sodipodi:ry="1.9146039" - d="M 5.9915841 5.9314356 A 1.9146039 1.9146039 0 1 1 2.1623762,5.9314356 A 1.9146039 1.9146039 0 1 1 5.9915841 5.9314356 z" - transform="matrix(1.044633,0,0,1.044651,1.240994,1.303627)" /> - <path - sodipodi:type="inkscape:offset" - inkscape:radius="-1.0137123" - inkscape:original="M 4 9.5 C 2.6129841 9.5 1.5 10.616271 1.5 12 C 1.5 13.383729 2.6129843 14.5 4 14.5 L 7 14.5 C 8.3870159 14.5 9.5000001 13.383729 9.5 12 C 9.5 10.616271 8.387016 9.5 7 9.5 L 4 9.5 z " - xlink:href="#rect3093" - style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#eeeeec;stroke-width:1.00000048;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path3101" - d="M 4,10.5 C 3.1568748,10.5 2.5,11.159848 2.5,12 C 2.5,12.840152 3.1568751,13.5 4,13.5 L 7,13.5 C 7.8431252,13.5 8.5000001,12.840152 8.5,12 C 8.5,11.159848 7.8431253,10.5 7,10.5 L 4,10.5 z " - transform="translate(3.85495e-4,1.002579)" /> - </g> -</svg>
--- a/pidgin/pixmaps/toolbar/16/scalable/connect.svg Fri Apr 27 05:18:14 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,211 +0,0 @@ -<?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://inkscape.sourceforge.net/DTD/s odipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16px" - height="16px" - id="svg1307" - sodipodi:version="0.32" - inkscape:version="0.43" - sodipodi:docbase="/home/hbons/Desktop/Gaim Refresh" - sodipodi:docname="connect.svg" - inkscape:export-filename="/home/hbons/Desktop/Gaim Refresh/connect.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90"> - <defs - id="defs1309"> - <linearGradient - inkscape:collect="always" - id="linearGradient2307"> - <stop - style="stop-color:#eeeeec;stop-opacity:1;" - offset="0" - id="stop2309" /> - <stop - style="stop-color:#eeeeec;stop-opacity:0;" - offset="1" - id="stop2311" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - id="linearGradient2287"> - <stop - style="stop-color:#d3d7cf;stop-opacity:1;" - offset="0" - id="stop2289" /> - <stop - style="stop-color:#d3d7cf;stop-opacity:0;" - offset="1" - id="stop2291" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - id="linearGradient2235"> - <stop - style="stop-color:#d3d7cf;stop-opacity:1;" - offset="0" - id="stop2237" /> - <stop - style="stop-color:#d3d7cf;stop-opacity:0;" - offset="1" - id="stop2239" /> - </linearGradient> - <radialGradient - inkscape:collect="always" - xlink:href="#linearGradient2235" - id="radialGradient2243" - cx="3.4638615" - cy="8.5" - fx="3.4638615" - fy="8.5" - r="1.5361387" - gradientTransform="matrix(1,0,0,2.929423,0,-16.4001)" - gradientUnits="userSpaceOnUse" /> - <radialGradient - inkscape:collect="always" - xlink:href="#linearGradient2287" - id="radialGradient2293" - cx="3.4725401" - cy="8.4901399" - fx="3.4725401" - fy="8.4901399" - r="1.8475615" - gradientTransform="matrix(1,0,0,3.215392,0,-18.80899)" - gradientUnits="userSpaceOnUse" /> - <radialGradient - inkscape:collect="always" - xlink:href="#linearGradient2307" - id="radialGradient2313" - cx="3.46875" - cy="8.46875" - fx="3.46875" - fy="8.46875" - r="1.5625002" - gradientTransform="matrix(1,0,0,3.54,0,-21.51062)" - gradientUnits="userSpaceOnUse" /> - </defs> - <sodipodi:namedview - id="base" - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1.0" - inkscape:pageopacity="0.0" - inkscape:pageshadow="2" - inkscape:zoom="22.197802" - inkscape:cx="13.676238" - inkscape:cy="8.4504951" - inkscape:current-layer="layer1" - showgrid="true" - inkscape:grid-bbox="true" - inkscape:document-units="px" - fill="#555753" - inkscape:window-width="1268" - inkscape:window-height="971" - inkscape:window-x="6" - inkscape:window-y="21" /> - <metadata - id="metadata1312"> - <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 - id="layer1" - inkscape:label="Layer 1" - inkscape:groupmode="layer"> - <image - id="image2203" - height="16" - width="16" - sodipodi:absref="/home/hbons/Desktop/Gaim Refresh/gaim/gtk/pixmaps/stock_connect_16.png" - xlink:href="gaim/gtk/pixmaps/stock_connect_16.png" - x="-4.5762377" - y="17" /> - <rect - style="opacity:1;fill:#3465a4;fill-opacity:1;stroke:#204a87;stroke-width:0.9999994;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2231" - width="3.7591434" - height="4.0898862" - x="3.5015876" - y="6.4687538" - ry="1.0811869" - rx="1.0811878" /> - <image - id="image2213" - height="16" - width="16" - sodipodi:absref="/home/hbons/Desktop/Gaim Refresh/gaim/gtk/pixmaps/stock_disconnect_16.png" - xlink:href="gaim/gtk/pixmaps/stock_disconnect_16.png" - x="-17" - y="-9" /> - <rect - style="opacity:1;fill:#edd400;fill-opacity:1;stroke:#c4a000;stroke-width:0.99999964;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2222" - width="5.9919014" - height="1.9889754" - x="8.4049187" - y="10.489324" - rx="1.0811872" - ry="1.0811882" /> - <rect - style="opacity:1;fill:#edd400;fill-opacity:1;stroke:#c4a000;stroke-width:0.99999928;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2224" - width="5.9919014" - height="2.0106792" - x="8.4130182" - y="4.494658" - rx="1.0811872" - ry="1.0811875" /> - <rect - style="opacity:1;fill:#3465a4;fill-opacity:1;stroke:#204a87;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2218" - width="4.5" - height="12" - x="12.5" - y="2.5" - ry="1.0811881" - rx="1.0811881" /> - <path - style="fill:#3465a4;fill-opacity:1;stroke:#204a87;stroke-width:1.00000036;stroke-miterlimit:4;stroke-opacity:1" - d="M 8.4861081,2.4676147 L 9.3875609,2.4676147 C 9.9865394,2.4676147 10.46875,2.9498245 10.46875,3.5488027 L 10.46875,13.386427 C 10.46875,13.985405 9.9865394,14.467615 9.3875609,14.467615 L 8.4861081,14.467615 C 7.8871296,14.467615 6.4138303,13.985405 6.4138303,13.386427 L 6.4138303,3.5488027 C 6.4138303,2.9498245 7.8871296,2.4676147 8.4861081,2.4676147 z " - id="rect2220" - sodipodi:nodetypes="ccccccccc" /> - <path - sodipodi:type="inkscape:offset" - inkscape:radius="-1.0487005" - inkscape:original="M 13.59375 2.5 C 12.994772 2.5 12.5 2.9947717 12.5 3.59375 L 12.5 13.40625 C 12.5 14.005228 12.994772 14.5 13.59375 14.5 L 15.90625 14.5 C 16.505228 14.5 17 14.005228 17 13.40625 L 17 3.59375 C 17 2.9947718 16.505228 2.5 15.90625 2.5 L 13.59375 2.5 z " - xlink:href="#rect2218" - style="opacity:0.14204545;fill:#3465a4;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path2315" - inkscape:href="#rect2218" - d="M 13.59375,3.5625 C 13.572275,3.5625 13.5625,3.5722747 13.5625,3.59375 L 13.5625,13.40625 C 13.5625,13.427725 13.572275,13.4375 13.59375,13.4375 L 15.90625,13.4375 C 15.927725,13.4375 15.9375,13.427725 15.9375,13.40625 L 15.9375,3.59375 C 15.9375,3.5722749 15.927725,3.5625 15.90625,3.5625 L 13.59375,3.5625 z " /> - <path - sodipodi:type="inkscape:offset" - inkscape:radius="-0.97353798" - inkscape:original="M 8.5 2.46875 C 7.9010215 2.46875 6.40625 2.9635219 6.40625 3.5625 L 6.40625 13.375 C 6.40625 13.973978 7.9010218 14.46875 8.5 14.46875 L 9.375 14.46875 C 9.9739785 14.46875 10.46875 13.973978 10.46875 13.375 L 10.46875 3.5625 C 10.46875 2.9635218 9.9739786 2.46875 9.375 2.46875 L 8.5 2.46875 z " - xlink:href="#rect2220" - style="opacity:0.14772728;fill:url(#radialGradient2313);fill-opacity:1;stroke:#ffffff;stroke-width:1.00000036;stroke-miterlimit:4;stroke-opacity:1" - id="path2295" - inkscape:href="#rect2220" - d="M 3.53125,3.4375 C 3.4998166,3.4375 2.9853197,3.5418315 2.65625,3.6875 C 2.5388748,3.7394582 2.4675143,3.7716169 2.40625,3.8125 L 2.40625,13.125 C 2.4675143,13.165883 2.5388748,13.198042 2.65625,13.25 C 2.9853198,13.395668 3.4998167,13.5 3.53125,13.5 L 4.40625,13.5 C 4.4691165,13.5 4.53125,13.437866 4.53125,13.375 L 4.53125,3.5625 C 4.53125,3.4996337 4.4691163,3.4375 4.40625,3.4375 L 3.53125,3.4375 z " /> - <rect - style="opacity:1;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect1351" - width="3" - height="1" - x="0" - y="8" /> - </g> -</svg>
--- a/pidgin/pixmaps/toolbar/16/scalable/disconnect.svg Fri Apr 27 05:18:14 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,201 +0,0 @@ -<?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://inkscape.sourceforge.net/DTD/s odipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16px" - height="16px" - id="svg1307" - sodipodi:version="0.32" - inkscape:version="0.43" - sodipodi:docbase="/home/hbons/Desktop/Gaim Refresh" - sodipodi:docname="connect.svg"> - <defs - id="defs1309"> - <linearGradient - inkscape:collect="always" - id="linearGradient2307"> - <stop - style="stop-color:#eeeeec;stop-opacity:1;" - offset="0" - id="stop2309" /> - <stop - style="stop-color:#eeeeec;stop-opacity:0;" - offset="1" - id="stop2311" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - id="linearGradient2287"> - <stop - style="stop-color:#d3d7cf;stop-opacity:1;" - offset="0" - id="stop2289" /> - <stop - style="stop-color:#d3d7cf;stop-opacity:0;" - offset="1" - id="stop2291" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - id="linearGradient2235"> - <stop - style="stop-color:#d3d7cf;stop-opacity:1;" - offset="0" - id="stop2237" /> - <stop - style="stop-color:#d3d7cf;stop-opacity:0;" - offset="1" - id="stop2239" /> - </linearGradient> - <radialGradient - inkscape:collect="always" - xlink:href="#linearGradient2235" - id="radialGradient2243" - cx="3.4638615" - cy="8.5" - fx="3.4638615" - fy="8.5" - r="1.5361387" - gradientTransform="matrix(1,0,0,2.929423,0,-16.4001)" - gradientUnits="userSpaceOnUse" /> - <radialGradient - inkscape:collect="always" - xlink:href="#linearGradient2287" - id="radialGradient2293" - cx="3.4725401" - cy="8.4901399" - fx="3.4725401" - fy="8.4901399" - r="1.8475615" - gradientTransform="matrix(1,0,0,3.215392,0,-18.80899)" - gradientUnits="userSpaceOnUse" /> - <radialGradient - inkscape:collect="always" - xlink:href="#linearGradient2307" - id="radialGradient2313" - cx="3.46875" - cy="8.46875" - fx="3.46875" - fy="8.46875" - r="1.5625002" - gradientTransform="matrix(1,0,0,3.54,0,-21.51062)" - gradientUnits="userSpaceOnUse" /> - </defs> - <sodipodi:namedview - id="base" - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1.0" - inkscape:pageopacity="0.0" - inkscape:pageshadow="2" - inkscape:zoom="22.197802" - inkscape:cx="8" - inkscape:cy="8" - inkscape:current-layer="layer1" - showgrid="true" - inkscape:grid-bbox="true" - inkscape:document-units="px" - fill="#eeeeec" - inkscape:window-width="1268" - inkscape:window-height="971" - inkscape:window-x="6" - inkscape:window-y="21" /> - <metadata - id="metadata1312"> - <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 - id="layer1" - inkscape:label="Layer 1" - inkscape:groupmode="layer"> - <image - id="image2203" - height="16" - width="16" - sodipodi:absref="/home/hbons/Desktop/Gaim Refresh/gaim/gtk/pixmaps/stock_connect_16.png" - xlink:href="gaim/gtk/pixmaps/stock_connect_16.png" - x="-4.5762377" - y="17" /> - <image - id="image2213" - height="16" - width="16" - sodipodi:absref="/home/hbons/Desktop/Gaim Refresh/gaim/gtk/pixmaps/stock_disconnect_16.png" - xlink:href="gaim/gtk/pixmaps/stock_disconnect_16.png" - x="-17" - y="-9" /> - <rect - style="opacity:1;fill:#3465a4;fill-opacity:1;stroke:#204a87;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2218" - width="4.5" - height="12" - x="12.5" - y="2.5" - ry="1.0811881" - rx="1.0811881" /> - <path - sodipodi:type="inkscape:offset" - inkscape:radius="-1.0487005" - inkscape:original="M 13.59375 2.5 C 12.994772 2.5 12.5 2.9947717 12.5 3.59375 L 12.5 13.40625 C 12.5 14.005228 12.994772 14.5 13.59375 14.5 L 15.90625 14.5 C 16.505228 14.5 17 14.005228 17 13.40625 L 17 3.59375 C 17 2.9947718 16.505228 2.5 15.90625 2.5 L 13.59375 2.5 z " - xlink:href="#rect2218" - style="opacity:0.14204545;fill:#3465a4;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path2315" - inkscape:href="#rect2218" - d="M 13.59375,3.5625 C 13.572275,3.5625 13.5625,3.5722747 13.5625,3.59375 L 13.5625,13.40625 C 13.5625,13.427725 13.572275,13.4375 13.59375,13.4375 L 15.90625,13.4375 C 15.927725,13.4375 15.9375,13.427725 15.9375,13.40625 L 15.9375,3.59375 C 15.9375,3.5722749 15.927725,3.5625 15.90625,3.5625 L 13.59375,3.5625 z " /> - <rect - style="opacity:1;fill:#edd400;fill-opacity:1;stroke:#c4a000;stroke-width:0.99999952;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2222" - width="5.9919014" - height="2.0323851" - x="3.4361691" - y="10.43523" - rx="1.0811872" - ry="1.081188" /> - <rect - style="opacity:1;fill:#edd400;fill-opacity:1;stroke:#c4a000;stroke-width:0.99999952;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2224" - width="5.9919014" - height="2.0323851" - x="3.4442682" - y="4.4676151" - rx="1.0811872" - ry="1.081188" /> - <rect - style="opacity:1;fill:#3465a4;fill-opacity:1;stroke:#204a87;stroke-width:0.99999946;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2231" - width="4.5" - height="4.0898862" - x="-1.5" - y="6.4687538" - ry="1.0811869" - rx="1.0811881" /> - <path - style="fill:#3465a4;fill-opacity:1;stroke:#204a87;stroke-width:1.00000036;stroke-miterlimit:4;stroke-opacity:1" - d="M 3.5173583,2.4676149 L 4.4188111,2.4676149 C 5.0177896,2.4676149 5.4999998,2.9498247 5.4999998,3.5488029 L 5.4999998,13.386427 C 5.4999998,13.985405 5.0177896,14.467615 4.4188111,14.467615 L 3.5173583,14.467615 C 2.9183798,14.467615 1.4450805,13.985405 1.4450805,13.386427 L 1.4450805,3.5488029 C 1.4450805,2.9498247 2.9183798,2.4676149 3.5173583,2.4676149 z " - id="rect2220" - sodipodi:nodetypes="ccccccccc" /> - <path - sodipodi:type="inkscape:offset" - inkscape:radius="-0.97353798" - inkscape:original="M 3.53125 2.46875 C 2.9322715 2.46875 1.4375 2.9635218 1.4375 3.5625 L 1.4375 13.375 C 1.4375 13.973978 2.9322715 14.46875 3.53125 14.46875 L 4.40625 14.46875 C 5.0052285 14.46875 5.4999998 13.973978 5.5 13.375 L 5.5 3.5625 C 5.5 2.9635218 5.0052283 2.46875 4.40625 2.46875 L 3.53125 2.46875 z " - xlink:href="#rect2220" - style="fill:url(#radialGradient2313);fill-opacity:1.0;stroke:#ffffff;stroke-width:1.00000036;stroke-miterlimit:4;stroke-opacity:1;opacity:0.14772727" - id="path2295" - inkscape:href="#rect2220" - d="M 3.53125,3.4375 C 3.4998166,3.4375 2.9853197,3.5418315 2.65625,3.6875 C 2.5388748,3.7394582 2.4675143,3.7716169 2.40625,3.8125 L 2.40625,13.125 C 2.4675143,13.165883 2.5388748,13.198042 2.65625,13.25 C 2.9853198,13.395668 3.4998167,13.5 3.53125,13.5 L 4.40625,13.5 C 4.4691165,13.5 4.53125,13.437866 4.53125,13.375 L 4.53125,3.5625 C 4.53125,3.4996337 4.4691163,3.4375 4.40625,3.4375 L 3.53125,3.4375 z " /> - </g> -</svg>
--- a/pidgin/pixmaps/toolbar/16/scalable/insert-image.svg Fri Apr 27 05:18:14 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,316 +0,0 @@ -<?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://inkscape.sourceforge.net/DTD/s odipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - id="svg2" - sodipodi:version="0.32" - inkscape:version="0.43" - version="1.0" - sodipodi:docbase="/home/hbons/Desktop/Gaim Refresh/toolbars" - sodipodi:docname="insert-image.svg" - inkscape:export-filename="/home/hbons/Desktop/Gaim Refresh/toolbars/insert-image.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90"> - <defs - id="defs4"> - <linearGradient - inkscape:collect="always" - id="linearGradient3527"> - <stop - style="stop-color:#d3d7cf;stop-opacity:1;" - offset="0" - id="stop3529" /> - <stop - style="stop-color:#d3d7cf;stop-opacity:0;" - offset="1" - id="stop3531" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - id="linearGradient8662"> - <stop - style="stop-color:#000000;stop-opacity:1;" - offset="0" - id="stop8664" /> - <stop - style="stop-color:#000000;stop-opacity:0;" - offset="1" - id="stop8666" /> - </linearGradient> - <radialGradient - inkscape:collect="always" - xlink:href="#linearGradient8662" - id="radialGradient2494" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(1,0,0,0.536723,4.952005e-15,16.87306)" - cx="24.837126" - cy="36.421127" - fx="24.837126" - fy="36.421127" - r="15.644737" /> - <linearGradient - inkscape:collect="always" - id="linearGradient2233"> - <stop - style="stop-color:#ffffff;stop-opacity:1;" - offset="0" - id="stop2235" /> - <stop - style="stop-color:#ffffff;stop-opacity:0;" - offset="1" - id="stop2237" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient2233" - id="linearGradient2481" - gradientUnits="userSpaceOnUse" - gradientTransform="translate(-1,-4)" - x1="25" - y1="27.5" - x2="26.673967" - y2="10" /> - <linearGradient - id="linearGradient2834"> - <stop - style="stop-color:#ffffff;stop-opacity:1;" - offset="0" - id="stop2836" /> - <stop - style="stop-color:#b3b3b3;stop-opacity:0.0000000;" - offset="1.0000000" - id="stop2838" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient2834" - id="linearGradient2479" - gradientUnits="userSpaceOnUse" - gradientTransform="translate(-1.861203e-16,-3)" - x1="19.891792" - y1="16.114628" - x2="31.856716" - y2="72.780548" /> - <linearGradient - id="linearGradient2243"> - <stop - id="stop2245" - offset="0" - style="stop-color:#2a5387;stop-opacity:1" /> - <stop - id="stop2247" - offset="1" - style="stop-color:#3465a4;stop-opacity:1;" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient2243" - id="linearGradient2477" - gradientUnits="userSpaceOnUse" - x1="19.988434" - y1="34.98325" - x2="19.988434" - y2="6.4341555" /> - <linearGradient - id="linearGradient3682"> - <stop - style="stop-color:#497fc6;stop-opacity:1;" - offset="0" - id="stop3684" /> - <stop - style="stop-color:#90b3d9;stop-opacity:1;" - offset="1" - id="stop3686" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient3682" - id="linearGradient2475" - gradientUnits="userSpaceOnUse" - x1="29.122221" - y1="33.438889" - x2="14.296363" - y2="6.3463993" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient2233" - id="linearGradient5652" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(0.186481,0,0,0.186481,1.980879,3.495724)" - x1="25" - y1="27.5" - x2="26.673967" - y2="10" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient2834" - id="linearGradient5655" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(0.186481,0,0,0.186481,2.16736,3.682205)" - x1="19.891792" - y1="16.114628" - x2="31.856716" - y2="72.780548" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient3682" - id="linearGradient5658" - gradientUnits="userSpaceOnUse" - x1="29.122221" - y1="33.438889" - x2="14.296363" - y2="6.3463993" - gradientTransform="matrix(0.186481,0,0,0.186481,2.16736,4.241648)" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient2243" - id="linearGradient5660" - gradientUnits="userSpaceOnUse" - x1="19.988434" - y1="34.98325" - x2="19.988434" - y2="6.4341555" - gradientTransform="matrix(0.186481,0,0,0.186481,2.16736,4.241648)" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient3527" - id="linearGradient1344" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(1,0,0,0.999997,0,4.205949e-5)" - x1="8.4662685" - y1="13.058619" - x2="8.4662685" - y2="-1.8813093" /> - </defs> - <sodipodi:namedview - id="base" - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1.0" - inkscape:pageopacity="0.0" - inkscape:pageshadow="2" - inkscape:zoom="36.388907" - inkscape:cx="9.6715554" - inkscape:cy="8.3506222" - inkscape:document-units="px" - inkscape:current-layer="layer1" - showgrid="true" - fill="#729fcf" - borderlayer="top" - inkscape:grid-points="false" - inkscape:window-width="1268" - inkscape:window-height="971" - inkscape:window-x="6" - inkscape:window-y="21" - inkscape:showpageshadow="false" /> - <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:0.4;color:#000000;fill:url(#radialGradient2494);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" - id="path2492" - sodipodi:cx="24.837126" - sodipodi:cy="36.421127" - sodipodi:rx="15.644737" - sodipodi:ry="8.3968935" - d="M 40.481863 36.421127 A 15.644737 8.3968935 0 1 1 9.1923885,36.421127 A 15.644737 8.3968935 0 1 1 40.481863 36.421127 z" - transform="matrix(0.511354,0,0,0.178638,-4.700565,7.993818)" - inkscape:r_cx="true" - inkscape:r_cy="true" /> - <rect - style="opacity:0.25568183;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2237" - width="1" - height="1" - x="23" - y="12" /> - <path - style="fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.00000012;stroke-miterlimit:4;stroke-opacity:1" - d="M 3.311991,0.499958 L 11.793363,0.499958 C 12.813372,1.5198807 13.563469,2.2699146 14.5,3.2063672 L 14.5,14.689474 C 14.5,15.139279 14.137852,15.501396 13.688009,15.501396 L 3.311991,15.501396 C 2.862148,15.501396 2.5,15.139279 2.5,14.689474 L 2.5,1.3118807 C 2.5,0.8620755 2.862148,0.499958 3.311991,0.499958 z " - id="path3517" - sodipodi:nodetypes="ccccccccc" /> - <rect - style="opacity:1;fill:#729fcf;fill-opacity:1;stroke:none;stroke-width:0.9999997;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect3535" - width="12.001637" - height="9.0028343" - x="0.49989274" - y="3.497395" /> - <path - style="fill:url(#linearGradient1344);fill-opacity:1;stroke:#888a85;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 3.311991,0.49999856 L 11.793363,0.49999856 C 12.813372,1.5199182 13.563469,2.2699498 14.5,3.2063996 L 14.5,14.689472 C 14.5,15.139276 14.137852,15.501392 13.688009,15.501392 L 3.311991,15.501392 C 2.862148,15.501392 2.5,15.139276 2.5,14.689472 L 2.5,1.3119188 C 2.5,0.86211497 2.862148,0.49999856 3.311991,0.49999856 z " - id="rect3512" - sodipodi:nodetypes="ccccccccc" /> - <path - sodipodi:type="inkscape:offset" - inkscape:radius="-0.98898512" - inkscape:original="M 3.3125 0.5 C 2.862657 0.5 2.5 0.86269612 2.5 1.3125 L 2.5 14.6875 C 2.5 15.137304 2.862657 15.5 3.3125 15.5 L 13.6875 15.5 C 14.137343 15.5 14.5 15.137304 14.5 14.6875 L 14.5 3.21875 C 13.563469 2.2823002 12.801259 1.5199196 11.78125 0.5 L 3.3125 0.5 z " - xlink:href="#rect3512" - style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path1342" - inkscape:href="#rect3512" - d="M 3.5,1.5 L 3.5,14.5 L 13.5,14.5 L 13.5,3.59375 C 12.805194,2.8989672 12.150498,2.2442197 11.40625,1.5 L 3.5,1.5 z " /> - <rect - style="opacity:1;fill:#729fcf;fill-opacity:1;stroke:#3465a4;stroke-width:0.9999997;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect3482" - width="12.001637" - height="9.0028343" - x="0.49989274" - y="3.497395" - rx="0.89386886" - ry="0.89386886" /> - <path - sodipodi:type="arc" - style="opacity:0.9375;fill:#edd400;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path3480" - sodipodi:cx="7.5" - sodipodi:cy="5.5" - sodipodi:rx="1.5" - sodipodi:ry="1.5" - d="M 9 5.5 A 1.5 1.5 0 1 1 6,5.5 A 1.5 1.5 0 1 1 9 5.5 z" - transform="translate(0,1)" /> - <path - style="opacity:1;fill:#4e9a06;fill-opacity:1;stroke:#3b7c00;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" - d="M 3.0844788,6.7701117 L 1.4964645,9.1644496 L 1.4964645,11.491845 L 11.502499,11.491845 L 11.502499,9.1737298 L 9.9969429,7.6369148 L 7.0238894,9.7054172 L 3.0844788,6.7701117 z " - id="rect3484" - sodipodi:nodetypes="cccccccc" /> - <image - id="image3495" - height="15.625" - width="8" - sodipodi:absref="/home/hbons/Desktop/Tango-Palette.png" - xlink:href="/home/hbons/Desktop/Tango-Palette.png" - x="-10" - y="-2" - style="fill:#8ae234;fill-opacity:1;stroke:#3465a4;stroke-opacity:1" /> - <rect - style="opacity:0.2;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.9999994;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect3555" - width="10.005957" - height="7.0110626" - x="1.4970188" - y="4.4944715" /> - </g> -</svg>
--- a/pidgin/pixmaps/toolbar/16/scalable/message-new.svg Fri Apr 27 05:18:14 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,168 +0,0 @@ -<?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://inkscape.sourceforge.net/DTD/s odipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - id="svg2" - sodipodi:version="0.32" - inkscape:version="0.43" - version="1.0" - sodipodi:docbase="/home/hbons/Desktop/Gaim Refresh/toolbars/scalable" - sodipodi:docname="message-new.svg" - inkscape:export-filename="/home/hbons/Desktop/Gaim Refresh/toolbars/message-new.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90"> - <defs - id="defs4"> - <linearGradient - id="linearGradient12512"> - <stop - style="stop-color:#ffffff;stop-opacity:1.0000000;" - offset="0.0000000" - id="stop12513" /> - <stop - style="stop-color:#fff520;stop-opacity:0.89108908;" - offset="0.50000000" - id="stop12517" /> - <stop - style="stop-color:#fff300;stop-opacity:0.0000000;" - offset="1.0000000" - id="stop12514" /> - </linearGradient> - <radialGradient - inkscape:collect="always" - xlink:href="#linearGradient12512" - id="radialGradient278" - gradientUnits="userSpaceOnUse" - cx="55.000000" - cy="125.00000" - fx="55.000000" - fy="125.00000" - r="14.375000" /> - <linearGradient - inkscape:collect="always" - id="linearGradient2200"> - <stop - style="stop-color:#d3d7cf;stop-opacity:1;" - offset="0" - id="stop2202" /> - <stop - style="stop-color:#d3d7cf;stop-opacity:0;" - offset="1" - id="stop2204" /> - </linearGradient> - <radialGradient - inkscape:collect="always" - xlink:href="#linearGradient2200" - id="radialGradient2206" - cx="9.9988937" - cy="8.963316" - fx="9.9988937" - fy="8.963316" - r="7.003407" - gradientTransform="matrix(2.522332,-1.518129e-16,1.517788e-16,2.521765,-17.1904,-22.80154)" - gradientUnits="userSpaceOnUse" /> - <radialGradient - inkscape:collect="always" - xlink:href="#linearGradient2200" - id="radialGradient2216" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(-2.522332,-1.518129e-16,-1.517788e-16,2.521765,40.1904,-21.83521)" - cx="9.9988937" - cy="8.963316" - fx="9.9988937" - fy="8.963316" - r="7.003407" /> - <radialGradient - inkscape:collect="always" - xlink:href="#linearGradient2200" - id="radialGradient2225" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(-2.522332,-1.518129e-16,-1.517788e-16,2.521765,40.1904,-21.80154)" - cx="9.9988937" - cy="8.963316" - fx="9.9988937" - fy="8.963316" - r="7.003407" /> - </defs> - <sodipodi:namedview - id="base" - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1.0" - inkscape:pageopacity="0.0" - inkscape:pageshadow="2" - inkscape:zoom="22.4" - inkscape:cx="20.932696" - inkscape:cy="7.5173717" - inkscape:document-units="px" - inkscape:current-layer="layer1" - showgrid="true" - fill="#d3d7cf" - inkscape:window-width="1268" - inkscape:window-height="971" - inkscape:window-x="6" - inkscape:window-y="21" - showguides="true" - inkscape:guide-bbox="true"> - <sodipodi:guide - orientation="vertical" - position="-1.9642857" - id="guide1415" /> - </sodipodi:namedview> - <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 - style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 3.4777593,1.503515 C 2.3803814,1.6221462 1.5267372,2.6175088 1.5267372,3.824969 L 1.5267372,10.325041 C 1.5267372,11.612999 2.4918287,12.646495 3.6945395,12.646495 L 4.1281,12.646495 L 4.1281,14.503658 L 6.43139,12.646495 L 12.365748,12.646495 C 13.568459,12.646495 14.533551,11.612999 14.533551,10.325041 L 14.533551,3.824969 C 14.533551,2.5370115 13.568459,1.503515 12.365748,1.503515 L 3.6945395,1.503515 C 3.6193702,1.503515 3.5509178,1.4956063 3.4777593,1.503515 z " - id="path2208" /> - <path - style="opacity:1;fill:url(#radialGradient2206);fill-opacity:1;fill-rule:evenodd;stroke:#555753;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 3.4777593,1.503515 C 2.3803814,1.6221462 1.5267372,2.6175088 1.5267372,3.824969 L 1.5267372,10.325041 C 1.5267372,11.612999 2.6187431,12.483319 3.8214539,12.483319 L 4.5298235,12.483319 L 4.5298235,14.924652 L 7.3107789,12.51023 L 12.365748,12.50145 C 13.568459,12.50145 14.533551,11.612999 14.533551,10.325041 L 14.533551,3.824969 C 14.533551,2.5370115 13.568459,1.503515 12.365748,1.503515 L 3.6945395,1.503515 C 3.6193702,1.503515 3.5509178,1.4956063 3.4777593,1.503515 z " - id="rect1309" - sodipodi:nodetypes="ccccccccccccc" /> - <path - sodipodi:type="inkscape:offset" - inkscape:radius="-1.0358232" - inkscape:original="M 3.46875 1.5 C 2.371372 1.6186312 1.53125 2.6050398 1.53125 3.8125 L 1.53125 10.3125 C 1.53125 11.600458 2.6097892 12.46875 3.8125 12.46875 L 4.53125 12.46875 L 4.53125 14.9375 L 7.3125 12.5 L 12.375 12.5 C 13.577711 12.5 14.53125 11.600458 14.53125 10.3125 L 14.53125 3.8125 C 14.53125 2.5245424 13.577711 1.5 12.375 1.5 L 3.6875 1.5 C 3.6123307 1.5 3.5419085 1.4920913 3.46875 1.5 z " - xlink:href="#rect1309" - style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path2198" - inkscape:href="#rect1309" - d="M 4.59375,8.53125 C 4.0502029,8.5900098 3.5625,9.0855072 3.5625,9.8125 L 3.5625,16.3125 C 3.5625,17.022191 4.108328,17.4375 4.8125,17.4375 L 5.53125,17.4375 C 6.0997296,17.440061 6.5599393,17.90027 6.5625,18.46875 L 6.5625,18.65625 L 7.625,17.71875 C 7.8161378,17.554581 8.0605562,17.465702 8.3125,17.46875 L 13.375,17.46875 C 14.06123,17.46875 14.5,17.089211 14.5,16.3125 L 14.5,9.8125 C 14.5,9.0357897 13.98946,8.53125 13.375,8.53125 L 4.6875,8.53125 C 4.5396732,8.5312504 4.5229283,8.5389061 4.59375,8.53125 z " /> - <path - sodipodi:type="arc" - style="color:#000000;fill:url(#radialGradient278);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25000024;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block" - id="path12511" - sodipodi:cx="55" - sodipodi:cy="125" - sodipodi:rx="14.375" - sodipodi:ry="14.375" - d="M 69.375 125 A 14.375 14.375 0 1 1 40.625,125 A 14.375 14.375 0 1 1 69.375 125 z" - transform="matrix(0.278262,0,0,0.278263,-2.304426,-31.78284)" - inkscape:export-filename="/home/jimmac/ximian_art/icons/nautilus/suse93/stock_new-16.png" - inkscape:export-xdpi="33.852203" - inkscape:export-ydpi="33.852203" /> - </g> -</svg>
--- a/pidgin/pixmaps/toolbar/16/scalable/plugins.svg Fri Apr 27 05:18:14 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,121 +0,0 @@ -<?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://inkscape.sourceforge.net/DTD/s odipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - id="svg2" - sodipodi:version="0.32" - inkscape:version="0.43" - version="1.0" - sodipodi:docbase="/home/hbons/Desktop/Gaim Refresh/toolbars" - sodipodi:docname="plugins.svg" - inkscape:export-filename="/home/hbons/Desktop/Gaim Refresh/toolbars/plugins.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90"> - <defs - id="defs4"> - <linearGradient - inkscape:collect="always" - id="linearGradient3162"> - <stop - style="stop-color:#75507b;stop-opacity:1;" - offset="0" - id="stop3164" /> - <stop - style="stop-color:#75507b;stop-opacity:0;" - offset="1" - id="stop3166" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient3162" - id="linearGradient3168" - x1="8" - y1="10.085922" - x2="8" - y2="-4.356256" - gradientUnits="userSpaceOnUse" /> - </defs> - <sodipodi:namedview - id="base" - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1.0" - inkscape:pageopacity="0.0" - inkscape:pageshadow="2" - inkscape:zoom="51.461686" - inkscape:cx="10.774973" - inkscape:cy="7.1305212" - inkscape:document-units="px" - inkscape:current-layer="layer1" - showgrid="true" - showguides="true" - inkscape:guide-bbox="true" - fill="#75507b" - inkscape:window-width="1268" - inkscape:window-height="971" - inkscape:window-x="6" - inkscape:window-y="21" /> - <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 - style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999934;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 7.9910715,1.4766833 C 5.9906451,1.4766833 6.5989159,3.4804549 6.5989159,4.5580569 L 3.4999998,4.5242239 L 3.4999998,7.5494427 C 5.3502838,7.5494427 6.5,7.5050807 6.5,9.0464584 C 6.5,10.491956 5.0186253,10.512287 3.4999998,10.512287 L 3.5312498,14.499873 L 6.5,14.499873 C 6.5,13.789163 6.1591083,11.505842 8.0239235,11.505842 C 9.9126603,11.505842 9.53125,13.881548 9.53125,14.499873 L 12.5,14.499873 L 12.5,10.481098 C 11.766486,10.481098 9.5312502,10.737203 9.53125,8.9840828 C 9.53125,7.2071466 11.72913,7.518255 12.5,7.518255 L 12.5,4.5242239 L 9.5,4.5242239 C 9.5,3.4415299 10.013818,1.4766833 7.9910715,1.4766833 z " - id="path3152" - sodipodi:nodetypes="cccczccczccczcccz" /> - <path - style="opacity:1;fill:url(#linearGradient3168);fill-opacity:1.0;fill-rule:evenodd;stroke:#5c3566;stroke-width:0.99999934;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 7.9910715,1.4766833 C 6.1690798,1.4766833 6.5989159,3.0325559 6.5989159,4.5580569 L 3.4999998,4.5242239 L 3.4999998,7.5494427 C 4.9931409,7.5494427 6.5,7.3994628 6.5,9.0464584 C 6.5,10.671141 5.0186253,10.512287 3.4999998,10.512287 L 3.5312498,14.499873 L 6.5,14.499873 C 6.5,13.789163 6.1591083,11.505842 8.0239235,11.505842 C 9.9126603,11.505842 9.53125,13.881548 9.53125,14.499873 L 12.5,14.499873 L 12.5,10.481098 C 11.007391,10.481098 9.5312502,10.737203 9.53125,8.9840828 C 9.53125,7.2071466 11.059314,7.518255 12.5,7.518255 L 12.5,4.5242239 L 9.5,4.5242239 C 9.5,2.9949384 9.8352479,1.4766833 7.9910715,1.4766833 z " - id="rect2209" - sodipodi:nodetypes="cccczccczccczcccz" /> - <rect - style="opacity:0.4;fill:#eeeeec;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect3132" - width="1" - height="1.0000001" - x="3" - y="4" /> - <rect - style="opacity:0.4;fill:#eeeeec;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect3134" - width="1" - height="1.0000001" - x="12" - y="4" /> - <rect - style="opacity:0.4;fill:#eeeeec;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect3148" - width="1" - height="1.0000001" - x="12" - y="14" /> - <rect - style="opacity:0.4;fill:#eeeeec;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect3150" - width="1" - height="1.0000001" - x="3" - y="14" /> - </g> -</svg>
--- a/pidgin/pixmaps/toolbar/16/scalable/typing.svg Fri Apr 27 05:18:14 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,193 +0,0 @@ -<?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:sodipodi="http://inkscape.sourceforge.net/DTD/s odipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - id="svg1331" - sodipodi:version="0.32" - inkscape:version="0.43" - version="1.0" - inkscape:export-filename="/home/hbons/Desktop/Gaim Refresh/status/typing3.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90" - sodipodi:docbase="/home/hbons/Desktop/Gaim Refresh/toolbars/scalable" - sodipodi:docname="typing.svg"> - <defs - id="defs1333" /> - <sodipodi:namedview - id="base" - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1.0" - inkscape:pageopacity="0.0" - inkscape:pageshadow="2" - inkscape:zoom="27.857618" - inkscape:cx="15.486242" - inkscape:cy="10.647848" - inkscape:current-layer="layer1" - showgrid="true" - inkscape:grid-bbox="true" - inkscape:document-units="px" - fill="#babdb6" - inkscape:window-width="1268" - inkscape:window-height="972" - inkscape:window-x="6" - inkscape:window-y="21" /> - <metadata - id="metadata1336"> - <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 - id="layer1" - inkscape:label="Layer 1" - inkscape:groupmode="layer"> - <rect - style="opacity:1;fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:1.0000006;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2242" - width="15.99971" - height="3.0001566" - x="1.5002946" - y="1.4998456" - rx="1.3258367" - ry="1.3258374" /> - <rect - style="opacity:1;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2244" - width="1" - height="2.0135684" - x="13.009719" - y="1.9864316" /> - <rect - style="opacity:1;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2246" - width="1" - height="2.0135684" - x="10.009719" - y="1.9864316" /> - <rect - style="opacity:1;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2248" - width="1" - height="2.0135684" - x="7.0097184" - y="1.9864316" /> - <rect - style="opacity:1;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2250" - width="1" - height="2.0135684" - x="4.0097184" - y="1.9864316" /> - <rect - style="opacity:1;fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:1.00000024;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2252" - width="15.990281" - height="3.0001719" - x="3.5097189" - y="10.499027" - rx="1.3258373" - ry="1.3258358" /> - <rect - style="opacity:1;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2258" - width="1" - height="2" - x="9.0097189" - y="10.986431" /> - <rect - style="opacity:1;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2260" - width="1" - height="2" - x="6.0097184" - y="10.986431" /> - <rect - style="opacity:1;fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:1.00000048;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2262" - width="15.999428" - height="2.9989355" - x="1.5002862" - y="7.4998713" - rx="1.3258373" - ry="1.3258364" /> - <rect - style="opacity:1;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2264" - width="1" - height="2.0390401" - x="13.00326" - y="7.9609599" /> - <rect - style="opacity:1;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2266" - width="1" - height="2.0390401" - x="10.00326" - y="7.9609599" /> - <rect - style="opacity:1;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2268" - width="1" - height="2.0390401" - x="7.0032597" - y="7.9609599" /> - <rect - style="opacity:1;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2270" - width="1" - height="2.0390401" - x="4.0032597" - y="7.9609599" /> - <rect - style="opacity:1;fill:#eeeeec;fill-opacity:1;stroke:#babdb6;stroke-width:1.0000006;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2272" - width="15.9997" - height="2.9996767" - x="3.5002952" - y="4.5001583" - rx="1.3258375" - ry="1.3258364" /> - <rect - style="opacity:1;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2274" - width="1" - height="2" - x="15.00326" - y="5" /> - <rect - style="opacity:1;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2276" - width="1" - height="2" - x="12.00326" - y="5" /> - <rect - style="opacity:1;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2278" - width="1" - height="2" - x="9.0032597" - y="5" /> - <rect - style="opacity:1;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2280" - width="1" - height="2" - x="6.0032597" - y="5" /> - </g> -</svg>
--- a/pidgin/pixmaps/toolbar/16/scalable/user-info.svg Fri Apr 27 05:18:14 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,164 +0,0 @@ -<?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://inkscape.sourceforge.net/DTD/s odipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - id="svg2" - sodipodi:version="0.32" - inkscape:version="0.43" - version="1.0" - sodipodi:docbase="/home/hbons/Desktop/Gaim Refresh/toolbars/scalable" - sodipodi:docname="user-info.svg" - inkscape:export-filename="/home/hbons/Desktop/Gaim Refresh/toolbars/user-info.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90"> - <defs - id="defs4"> - <linearGradient - inkscape:collect="always" - id="linearGradient2192"> - <stop - style="stop-color:#ffffff;stop-opacity:1;" - offset="0" - id="stop2194" /> - <stop - style="stop-color:#ffffff;stop-opacity:0;" - offset="1" - id="stop2196" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - id="linearGradient3150"> - <stop - style="stop-color:#2e3436;stop-opacity:1;" - offset="0" - id="stop3152" /> - <stop - style="stop-color:#2e3436;stop-opacity:0;" - offset="1" - id="stop3154" /> - </linearGradient> - <radialGradient - inkscape:collect="always" - xlink:href="#linearGradient3150" - id="radialGradient3156" - cx="10.748654" - cy="10.457643" - fx="10.748654" - fy="10.457643" - r="6.6449099" - gradientTransform="matrix(-0.910086,1.546191e-16,-4.930589e-9,-0.385748,20.53086,14.49165)" - gradientUnits="userSpaceOnUse" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient2192" - id="linearGradient2198" - x1="7.487052" - y1="1.1166894" - x2="7.487052" - y2="16.498425" - gradientUnits="userSpaceOnUse" /> - </defs> - <sodipodi:namedview - id="base" - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1.0" - inkscape:pageopacity="0.0" - inkscape:pageshadow="2" - inkscape:zoom="39.000665" - inkscape:cx="15.428982" - inkscape:cy="6.2295886" - inkscape:document-units="px" - inkscape:current-layer="layer1" - showgrid="true" - fill="#3465a4" - inkscape:window-width="1268" - inkscape:window-height="971" - inkscape:window-x="6" - inkscape:window-y="21" /> - <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:url(#radialGradient3156);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path3140" - sodipodi:cx="10.748654" - sodipodi:cy="10.457643" - sodipodi:rx="6.6449099" - sodipodi:ry="2.3675451" - d="M 17.393564 10.457643 A 6.6449099 2.3675451 0 1 1 4.1037445,10.457643 A 6.6449099 2.3675451 0 1 1 17.393564 10.457643 z" - transform="matrix(1.203929,0,0,1.267135,-4.940617,-0.251247)" /> - <path - sodipodi:type="arc" - style="opacity:1;fill:#3465a4;fill-opacity:1;stroke:#204a87;stroke-width:1.02945173;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path1307" - sodipodi:cx="7.487052" - sodipodi:cy="7.9488554" - sodipodi:rx="6.6921935" - sodipodi:ry="6.6921935" - d="M 14.179245 7.9488554 A 6.6921935 6.6921935 0 1 1 0.79485846,7.9488554 A 6.6921935 6.6921935 0 1 1 14.179245 7.9488554 z" - transform="matrix(0.97139,0,0,0.97139,0.727388,0.278321)" /> - <path - sodipodi:type="arc" - style="opacity:0.3;fill:none;fill-opacity:1.0;stroke:url(#linearGradient2198);stroke-width:1.21670604;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path2184" - sodipodi:cx="7.487052" - sodipodi:cy="7.9488554" - sodipodi:rx="6.6921935" - sodipodi:ry="6.6921935" - d="M 14.179245 7.9488554 A 6.6921935 6.6921935 0 1 1 0.79485846,7.9488554 A 6.6921935 6.6921935 0 1 1 14.179245 7.9488554 z" - transform="matrix(0.82189,0,0,0.82189,1.846698,1.466671)" /> - <path - sodipodi:type="arc" - style="opacity:1;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path2186" - sodipodi:cx="9.0895882" - sodipodi:cy="5.6283822" - sodipodi:rx="1.1153656" - sodipodi:ry="1.1666467" - d="M 10.204954 5.6283822 A 1.1153656 1.1666467 0 1 1 7.9742225,5.6283822 A 1.1153656 1.1666467 0 1 1 10.204954 5.6283822 z" - transform="matrix(0.896567,0,0,0.857158,-0.149426,0.175589)" /> - <path - style="fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" - d="M 6.5,7 L 8.5,7 C 8.777,7 9,7.2982947 9,7.5 C 9,10.525698 9.3517591,8 6.5,8 C 6.2230035,7.9985995 6,7.777 6,7.5 C 6,7.223 6.223,7 6.5,7 z " - id="rect2188" - sodipodi:nodetypes="ccscsc" /> - <rect - style="opacity:1;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2190" - width="2" - height="3" - x="7" - y="8" /> - <rect - style="opacity:1;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect2192" - width="4" - height="1" - x="6" - y="11" - ry="0.5" /> - </g> -</svg>
--- a/pidgin/pixmaps/toolbar/16/scalable/window-icon.svg Fri Apr 27 05:18:14 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,123 +0,0 @@ -<?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://inkscape.sourceforge.net/DTD/s odipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - id="svg2" - sodipodi:version="0.32" - inkscape:version="0.43" - version="1.0" - sodipodi:docbase="/home/hbons/Desktop" - sodipodi:docname="online16.svg" - inkscape:export-filename="/home/hbons/Desktop/online16.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90"> - <defs - id="defs4"> - <linearGradient - inkscape:collect="always" - id="linearGradient2200"> - <stop - style="stop-color:#d3d7cf;stop-opacity:1;" - offset="0" - id="stop2202" /> - <stop - style="stop-color:#d3d7cf;stop-opacity:0;" - offset="1" - id="stop2204" /> - </linearGradient> - <radialGradient - inkscape:collect="always" - xlink:href="#linearGradient2200" - id="radialGradient2206" - cx="9.9988937" - cy="8.963316" - fx="9.9988937" - fy="8.963316" - r="7.003407" - gradientTransform="matrix(2.522332,-1.518129e-16,1.517788e-16,2.521765,-17.1904,-22.80154)" - gradientUnits="userSpaceOnUse" /> - <radialGradient - inkscape:collect="always" - xlink:href="#linearGradient2200" - id="radialGradient2216" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(-2.522332,-1.518129e-16,-1.517788e-16,2.521765,40.1904,-21.83521)" - cx="9.9988937" - cy="8.963316" - fx="9.9988937" - fy="8.963316" - r="7.003407" /> - <radialGradient - inkscape:collect="always" - xlink:href="#linearGradient2200" - id="radialGradient2225" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(-2.522332,-1.518129e-16,-1.517788e-16,2.521765,40.1904,-21.80154)" - cx="9.9988937" - cy="8.963316" - fx="9.9988937" - fy="8.963316" - r="7.003407" /> - </defs> - <sodipodi:namedview - id="base" - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1.0" - inkscape:pageopacity="0.0" - inkscape:pageshadow="2" - inkscape:zoom="22.4" - inkscape:cx="19.950553" - inkscape:cy="6.9370146" - inkscape:document-units="px" - inkscape:current-layer="layer1" - showgrid="true" - fill="#d3d7cf" - inkscape:window-width="1268" - inkscape:window-height="971" - inkscape:window-x="6" - inkscape:window-y="21" /> - <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 - style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 3.4777593,1.503515 C 2.3803814,1.6221462 1.5267372,2.6175088 1.5267372,3.824969 L 1.5267372,10.325041 C 1.5267372,11.612999 2.4918287,12.646495 3.6945395,12.646495 L 4.1281,12.646495 L 4.1281,14.503658 L 6.43139,12.646495 L 12.365748,12.646495 C 13.568459,12.646495 14.533551,11.612999 14.533551,10.325041 L 14.533551,3.824969 C 14.533551,2.5370115 13.568459,1.503515 12.365748,1.503515 L 3.6945395,1.503515 C 3.6193702,1.503515 3.5509178,1.4956063 3.4777593,1.503515 z " - id="path2208" /> - <path - style="opacity:1;fill:url(#radialGradient2206);fill-opacity:1;fill-rule:evenodd;stroke:#555753;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 3.4777593,1.503515 C 2.3803814,1.6221462 1.5267372,2.6175088 1.5267372,3.824969 L 1.5267372,10.325041 C 1.5267372,11.612999 2.6187431,12.483319 3.8214539,12.483319 L 4.5298235,12.483319 L 4.5298235,14.924652 L 7.3107789,12.51023 L 12.365748,12.50145 C 13.568459,12.50145 14.533551,11.612999 14.533551,10.325041 L 14.533551,3.824969 C 14.533551,2.5370115 13.568459,1.503515 12.365748,1.503515 L 3.6945395,1.503515 C 3.6193702,1.503515 3.5509178,1.4956063 3.4777593,1.503515 z " - id="rect1309" - sodipodi:nodetypes="ccccccccccccc" /> - <path - sodipodi:type="inkscape:offset" - inkscape:radius="-1.0358232" - inkscape:original="M 3.46875 1.5 C 2.371372 1.6186312 1.53125 2.6050398 1.53125 3.8125 L 1.53125 10.3125 C 1.53125 11.600458 2.6097892 12.46875 3.8125 12.46875 L 4.53125 12.46875 L 4.53125 14.9375 L 7.3125 12.5 L 12.375 12.5 C 13.577711 12.5 14.53125 11.600458 14.53125 10.3125 L 14.53125 3.8125 C 14.53125 2.5245424 13.577711 1.5 12.375 1.5 L 3.6875 1.5 C 3.6123307 1.5 3.5419085 1.4920913 3.46875 1.5 z " - xlink:href="#rect1309" - style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path2198" - inkscape:href="#rect1309" - d="M 4.59375,8.53125 C 4.0502029,8.5900098 3.5625,9.0855072 3.5625,9.8125 L 3.5625,16.3125 C 3.5625,17.022191 4.108328,17.4375 4.8125,17.4375 L 5.53125,17.4375 C 6.0997296,17.440061 6.5599393,17.90027 6.5625,18.46875 L 6.5625,18.65625 L 7.625,17.71875 C 7.8161378,17.554581 8.0605562,17.465702 8.3125,17.46875 L 13.375,17.46875 C 14.06123,17.46875 14.5,17.089211 14.5,16.3125 L 14.5,9.8125 C 14.5,9.0357897 13.98946,8.53125 13.375,8.53125 L 4.6875,8.53125 C 4.5396732,8.5312504 4.5229283,8.5389061 4.59375,8.53125 z " /> - </g> -</svg>
--- a/pidgin/plugins/contact_priority.c Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/plugins/contact_priority.c Fri Apr 27 05:20:10 2007 +0000 @@ -80,7 +80,7 @@ PurpleAccount *account = NULL; int i; - gboolean last_match = purple_prefs_get_bool("/core/contact/last_match"); + gboolean last_match = purple_prefs_get_bool("/purple/contact/last_match"); sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); @@ -95,7 +95,7 @@ /* Status Spinboxes */ for (i = 0 ; statuses[i].id != NULL && statuses[i].description != NULL ; i++) { - char *pref = g_strconcat("/core/status/scores/", statuses[i].id, NULL); + char *pref = g_strconcat("/purple/status/scores/", statuses[i].id, NULL); hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); @@ -124,7 +124,7 @@ check = gtk_check_button_new_with_label(_("Use last buddy when scores are equal")); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), last_match); - g_signal_connect(G_OBJECT(check), "toggled", G_CALLBACK(pref_update), "/core/contact/last_match"); + g_signal_connect(G_OBJECT(check), "toggled", G_CALLBACK(pref_update), "/purple/contact/last_match"); gtk_box_pack_start(GTK_BOX(hbox), check, FALSE, FALSE, 0); frame = pidgin_make_frame(ret, _("Point values to use for account..."));
--- a/pidgin/plugins/history.c Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/plugins/history.c Fri Apr 27 05:20:10 2007 +0000 @@ -52,7 +52,7 @@ /* If we're not logging, don't show anything. * Otherwise, we might show a very old log. */ - if (!purple_prefs_get_bool("/core/logging/log_ims")) + if (!purple_prefs_get_bool("/purple/logging/log_ims")) return; /* Find buddies for this conversation. */ @@ -96,7 +96,7 @@ { /* If we're not logging, don't show anything. * Otherwise, we might show a very old log. */ - if (!purple_prefs_get_bool("/core/logging/log_chats")) + if (!purple_prefs_get_bool("/purple/logging/log_chats")) return; logs = purple_log_get_logs(PURPLE_LOG_CHAT, name, account); @@ -141,8 +141,8 @@ static void history_prefs_check(PurplePlugin *plugin) { - if (!purple_prefs_get_bool("/core/logging/log_ims") && - !purple_prefs_get_bool("/core/logging/log_chats")) + if (!purple_prefs_get_bool("/purple/logging/log_ims") && + !purple_prefs_get_bool("/purple/logging/log_chats")) { purple_notify_warning(plugin, NULL, _("History Plugin Requires Logging"), _("Logging can be enabled from Tools -> Preferences -> Logging.\n\n" @@ -164,9 +164,9 @@ "conversation-created", plugin, PURPLE_CALLBACK(historize), NULL); - purple_prefs_connect_callback(plugin, "/core/logging/log_ims", + purple_prefs_connect_callback(plugin, "/purple/logging/log_ims", history_prefs_cb, plugin); - purple_prefs_connect_callback(plugin, "/core/logging/log_chats", + purple_prefs_connect_callback(plugin, "/purple/logging/log_chats", history_prefs_cb, plugin); history_prefs_check(plugin);
--- a/pidgin/plugins/perl/common/GtkStatusBox.xs Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/plugins/perl/common/GtkStatusBox.xs Fri Apr 27 05:20:10 2007 +0000 @@ -37,13 +37,9 @@ Pidgin::StatusBox status_box void -pidgin_status_box_set_buddy_icon(status_box, filename) +pidgin_status_box_set_buddy_icon(status_box, img) Pidgin::StatusBox status_box - const char * filename - -const char * -pidgin_status_box_get_buddy_icon(status_box) - Pidgin::StatusBox status_box + Purple::StoredImage img gchar_own * pidgin_status_box_get_message(status_box)
--- a/pidgin/plugins/perl/common/GtkUtils.xs Fri Apr 27 05:18:14 2007 +0000 +++ b/pidgin/plugins/perl/common/GtkUtils.xs Fri Apr 27 05:20:10 2007 +0000 @@ -11,6 +11,7 @@ pidgin_load_accels() gchar_own * -pidgin_convert_buddy_icon(plugin, path) +pidgin_convert_buddy_icon(plugin, path, size) Purple::Plugin plugin const char * path + size_t *size