# HG changeset patch # User Ka-Hing Cheung # Date 1193632879 0 # Node ID 9f0e2db39bc56d116aa0331bcad4453867daab7e # Parent bc34e9806879561dec2a8c16f10083ae9f69f69a# Parent ecaa34fd04731a0fa284ac0f4eea4e22eae98e4e merge of '7ea551cdfc72cb2ec310d0d54d2a7e5badf7535e' and 'c630ec53bad2efe91357c6f37e705fbb1562d4ae' diff -r bc34e9806879 -r 9f0e2db39bc5 config.h.mingw --- a/config.h.mingw Mon Oct 29 04:41:10 2007 +0000 +++ b/config.h.mingw Mon Oct 29 04:41:19 2007 +0000 @@ -377,7 +377,8 @@ /* #define USE_SM 1 */ /* Version number of package */ -/* #define VERSION "2.0.0dev" */ +#define VERSION "@VERSION@" +#define DISPLAY_VERSION "@VERSION@" /* Define to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel and VAX). */ diff -r bc34e9806879 -r 9f0e2db39bc5 configure.ac --- a/configure.ac Mon Oct 29 04:41:10 2007 +0000 +++ b/configure.ac Mon Oct 29 04:41:19 2007 +0000 @@ -283,6 +283,17 @@ AC_SUBST(GLIB_CFLAGS) AC_SUBST(GLIB_LIBS) +AC_ARG_WITH([extraversion], + AC_HELP_STRING([--with-extraversion=STRING], + [extra version number to be displayed in Help->About and --help (for packagers)]), + EXTRA_VERSION=$withval) + +if test x"$EXTRA_VERSION" != "x" ; then + AC_DEFINE_UNQUOTED(DISPLAY_VERSION, "$VERSION-$EXTRA_VERSION", [display version info]) +else + AC_DEFINE_UNQUOTED(DISPLAY_VERSION, "$VERSION", [display version info]) +fi + AC_ARG_WITH(x, [], with_x="$withval", with_x="yes") AC_ARG_ENABLE(gtkui, [AC_HELP_STRING([--disable-gtkui], diff -r bc34e9806879 -r 9f0e2db39bc5 finch/finch.c --- a/finch/finch.c Mon Oct 29 04:41:10 2007 +0000 +++ b/finch/finch.c Mon Oct 29 04:41:19 2007 +0000 @@ -203,7 +203,7 @@ char *text; if (terse) { - text = g_strdup_printf(_("%s. Try `%s -h' for more information.\n"), VERSION, name); + text = g_strdup_printf(_("%s. Try `%s -h' for more information.\n"), DISPLAY_VERSION, name); } else { text = g_strdup_printf(_("%s\n" "Usage: %s [OPTION]...\n\n" @@ -211,7 +211,7 @@ " -d, --debug print debugging messages to stdout\n" " -h, --help display this help and exit\n" " -n, --nologin don't automatically login\n" - " -v, --version display the current version and exit\n"), VERSION, name); + " -v, --version display the current version and exit\n"), DISPLAY_VERSION, name); } purple_print_utf8_to_console(stdout, text); @@ -298,7 +298,7 @@ /* Translators may want to transliterate the name. It is not to be translated. */ gnt_quit(); - printf("%s %s\n", _("Finch"), VERSION); + printf("%s %s\n", _("Finch"), DISPLAY_VERSION); return 0; } diff -r bc34e9806879 -r 9f0e2db39bc5 finch/gntconv.c --- a/finch/gntconv.c Mon Oct 29 04:41:10 2007 +0000 +++ b/finch/gntconv.c Mon Oct 29 04:41:19 2007 +0000 @@ -1039,7 +1039,7 @@ PurpleCmdStatus status; if (!g_ascii_strcasecmp(args[0], "version")) { - tmp = g_strdup_printf("me is using Finch v%s.", VERSION); + tmp = g_strdup_printf("me is using Finch v%s.", DISPLAY_VERSION); markup = g_markup_escape_text(tmp, -1); status = purple_cmd_do_command(conv, tmp, markup, error); diff -r bc34e9806879 -r 9f0e2db39bc5 finch/plugins/gntclipboard.c --- a/finch/plugins/gntclipboard.c Mon Oct 29 04:41:10 2007 +0000 +++ b/finch/plugins/gntclipboard.c Mon Oct 29 04:41:19 2007 +0000 @@ -156,7 +156,7 @@ PURPLE_PRIORITY_DEFAULT, "gntclipboard", N_("GntClipboard"), - VERSION, + DISPLAY_VERSION, N_("Clipboard plugin"), N_("When the gnt clipboard contents change, " "the contents are made available to X, if possible."), diff -r bc34e9806879 -r 9f0e2db39bc5 finch/plugins/gntgf.c --- a/finch/plugins/gntgf.c Mon Oct 29 04:41:10 2007 +0000 +++ b/finch/plugins/gntgf.c Mon Oct 29 04:41:19 2007 +0000 @@ -375,7 +375,7 @@ PURPLE_PRIORITY_DEFAULT, "gntgf", N_("GntGf"), - VERSION, + DISPLAY_VERSION, N_("Toaster plugin"), N_("Toaster plugin"), "Sadrul H Chowdhury ", diff -r bc34e9806879 -r 9f0e2db39bc5 finch/plugins/gnthistory.c --- a/finch/plugins/gnthistory.c Mon Oct 29 04:41:10 2007 +0000 +++ b/finch/plugins/gnthistory.c Mon Oct 29 04:41:19 2007 +0000 @@ -177,7 +177,7 @@ PURPLE_PRIORITY_DEFAULT, HISTORY_PLUGIN_ID, N_("GntHistory"), - VERSION, + DISPLAY_VERSION, N_("Shows recently logged conversations in new conversations."), N_("When a new conversation is opened this plugin will insert " "the last conversation into the current conversation."), diff -r bc34e9806879 -r 9f0e2db39bc5 finch/plugins/lastlog.c --- a/finch/plugins/lastlog.c Mon Oct 29 04:41:10 2007 +0000 +++ b/finch/plugins/lastlog.c Mon Oct 29 04:41:19 2007 +0000 @@ -120,7 +120,7 @@ PURPLE_PRIORITY_DEFAULT, "gntlastlog", N_("GntLastlog"), - VERSION, + DISPLAY_VERSION, N_("Lastlog plugin."), N_("Lastlog plugin."), "Sadrul H Chowdhury ", diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/conversation.h --- a/libpurple/conversation.h Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/conversation.h Mon Oct 29 04:41:19 2007 +0000 @@ -171,9 +171,12 @@ void (*write_im)(PurpleConversation *conv, const char *who, const char *message, PurpleMessageFlags flags, time_t mtime); - /** Write a message to a conversation. This is used rather than - * the chat- or im-specific ops for generic messages, such as system - * messages like "x is now know as y". + /** Write a message to a conversation. This is used rather than the + * chat- or im-specific ops for errors, system messages (such as "x is + * now know as y"), and as the fallback if #write_im and #write_chat + * are not implemented. It should be implemented, or the UI will miss + * conversation error messages and your users will hate you. + * * @see purple_conversation_write() */ void (*write_conv)(PurpleConversation *conv, diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/dbus-analyze-functions.py --- a/libpurple/dbus-analyze-functions.py Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/dbus-analyze-functions.py Mon Oct 29 04:41:19 2007 +0000 @@ -75,7 +75,11 @@ ] pointer = "#pointer#" -myexception = "My Exception" + +class MyException(Exception): + pass + +myexception = MyException() def ctopascal(name): newname = "" @@ -520,7 +524,7 @@ try: self.processfunction(functiontext, paramtexts) - except myexception: + except MyException: sys.stderr.write(myline + "\n") except: sys.stderr.write(myline + "\n") diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/plugins/autoaccept.c --- a/libpurple/plugins/autoaccept.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/plugins/autoaccept.c Mon Oct 29 04:41:19 2007 +0000 @@ -252,7 +252,7 @@ PLUGIN_ID, /* plugin id */ PLUGIN_NAME, /* name */ - VERSION, /* version */ + DISPLAY_VERSION, /* version */ PLUGIN_SUMMARY, /* summary */ PLUGIN_DESCRIPTION, /* description */ PLUGIN_AUTHOR, /* author */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/plugins/buddynote.c --- a/libpurple/plugins/buddynote.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/plugins/buddynote.c Mon Oct 29 04:41:19 2007 +0000 @@ -88,7 +88,7 @@ PURPLE_PRIORITY_DEFAULT, /**< priority */ "core-plugin_pack-buddynote", /**< id */ N_("Buddy Notes"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ N_("Store notes on particular buddies."), /**< summary */ N_("Adds the option to store notes for buddies " "on your buddy list."), /**< description */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/plugins/ciphertest.c --- a/libpurple/plugins/ciphertest.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/plugins/ciphertest.c Mon Oct 29 04:41:19 2007 +0000 @@ -262,7 +262,7 @@ "core-cipher-test", /**< id */ N_("Cipher Test"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("Tests the ciphers that ship with libpurple."), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/plugins/dbus-example.c --- a/libpurple/plugins/dbus-example.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/plugins/dbus-example.c Mon Oct 29 04:41:19 2007 +0000 @@ -153,7 +153,7 @@ "dbus-example", /**< id */ N_("DBus Example"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("DBus Plugin Example"), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/plugins/debug_example.c --- a/libpurple/plugins/debug_example.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/plugins/debug_example.c Mon Oct 29 04:41:19 2007 +0000 @@ -109,7 +109,7 @@ PLUGIN_ID, /* id */ "Debug API Example", /* name */ - VERSION, /* version */ + DISPLAY_VERSION, /* version */ "Debug API Example", /* summary */ "Debug API Example", /* description */ PLUGIN_AUTHOR, /* author */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/plugins/filectl.c --- a/libpurple/plugins/filectl.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/plugins/filectl.c Mon Oct 29 04:41:19 2007 +0000 @@ -246,7 +246,7 @@ FILECTL_PLUGIN_ID, /**< id */ N_("File Control"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("Allows control by entering commands in a file."), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/plugins/helloworld.c --- a/libpurple/plugins/helloworld.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/plugins/helloworld.c Mon Oct 29 04:41:19 2007 +0000 @@ -114,8 +114,8 @@ "core-hello_world", "Hello World!", - VERSION, /* This constant is defined in version.h, but you shouldn't use it for - your own plugins. We use it here because it's our plugin. */ + DISPLAY_VERSION, /* This constant is defined in config.h, but you shouldn't use it for + your own plugins. We use it here because it's our plugin. And we're lazy. */ "Hello World Plugin", "Hello World Plugin", diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/plugins/idle.c --- a/libpurple/plugins/idle.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/plugins/idle.c Mon Oct 29 04:41:19 2007 +0000 @@ -316,7 +316,7 @@ /* This is a cultural reference. Dy'er Mak'er is a song by Led Zeppelin. If that doesn't translate well into your language, drop the 's before translating. */ N_("I'dle Mak'er"), - VERSION, + DISPLAY_VERSION, N_("Allows you to hand-configure how long you've been idle"), N_("Allows you to hand-configure how long you've been idle"), "Eric Warmenhoven ", diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/plugins/ipc-test-client.c --- a/libpurple/plugins/ipc-test-client.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/plugins/ipc-test-client.c Mon Oct 29 04:41:19 2007 +0000 @@ -85,7 +85,7 @@ IPC_TEST_CLIENT_PLUGIN_ID, /**< id */ N_("IPC Test Client"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("Test plugin IPC support, as a client."), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/plugins/ipc-test-server.c --- a/libpurple/plugins/ipc-test-server.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/plugins/ipc-test-server.c Mon Oct 29 04:41:19 2007 +0000 @@ -72,7 +72,7 @@ IPC_TEST_SERVER_PLUGIN_ID, /**< id */ N_("IPC Test Server"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("Test plugin IPC support, as a server."), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/plugins/joinpart.c --- a/libpurple/plugins/joinpart.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/plugins/joinpart.c Mon Oct 29 04:41:19 2007 +0000 @@ -268,7 +268,7 @@ JOINPART_PLUGIN_ID, /**< id */ N_("Join/Part Hiding"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("Hides extraneous join/part messages."), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/plugins/log_reader.c --- a/libpurple/plugins/log_reader.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/plugins/log_reader.c Mon Oct 29 04:41:19 2007 +0000 @@ -2888,7 +2888,7 @@ PURPLE_PRIORITY_DEFAULT, /**< priority */ "core-log_reader", /**< id */ N_("Log Reader"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("Includes other IM clients' logs in the " diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/plugins/mono/loader/mono.c --- a/libpurple/plugins/mono/loader/mono.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/plugins/mono/loader/mono.c Mon Oct 29 04:41:19 2007 +0000 @@ -215,7 +215,7 @@ PURPLE_PRIORITY_DEFAULT, MONO_PLUGIN_ID, N_("Mono Plugin Loader"), - VERSION, + DISPLAY_VERSION, N_("Loads .NET plugins with Mono."), N_("Loads .NET plugins with Mono."), "Eoin Coffey ", diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/plugins/newline.c --- a/libpurple/plugins/newline.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/plugins/newline.c Mon Oct 29 04:41:19 2007 +0000 @@ -66,7 +66,7 @@ "core-plugin_pack-newline", /**< id */ N_("New Line"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ N_("Prepends a newline to displayed message."), /**< summary */ N_("Prepends a newline to messages so that the " "rest of the message appears below the " diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/plugins/notify_example.c --- a/libpurple/plugins/notify_example.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/plugins/notify_example.c Mon Oct 29 04:41:19 2007 +0000 @@ -135,7 +135,7 @@ PLUGIN_ID, /* id */ "Notify API Example", /* name */ - VERSION, /* version */ + DISPLAY_VERSION, /* version */ "Notify API Example", /* summary */ "Notify API Example", /* description */ PLUGIN_AUTHOR, /* author */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/plugins/offlinemsg.c --- a/libpurple/plugins/offlinemsg.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/plugins/offlinemsg.c Mon Oct 29 04:41:19 2007 +0000 @@ -225,7 +225,7 @@ PLUGIN_ID, /* plugin id */ PLUGIN_NAME, /* name */ - VERSION, /* version */ + DISPLAY_VERSION, /* version */ PLUGIN_SUMMARY, /* summary */ PLUGIN_DESCRIPTION, /* description */ PLUGIN_AUTHOR, /* author */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/plugins/perl/perl.c --- a/libpurple/plugins/perl/perl.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/plugins/perl/perl.c Mon Oct 29 04:41:19 2007 +0000 @@ -599,7 +599,7 @@ PERL_PLUGIN_ID, /**< id */ N_("Perl Plugin Loader"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ N_("Provides support for loading perl plugins."), /**< summary */ N_("Provides support for loading perl plugins."), /**< description */ "Christian Hammond ", /**< author */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/plugins/pluginpref_example.c --- a/libpurple/plugins/pluginpref_example.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/plugins/pluginpref_example.c Mon Oct 29 04:41:19 2007 +0000 @@ -131,7 +131,7 @@ "core-pluginpref_example", /**< id */ "Pluginpref Example", /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ "An example of how to use pluginprefs", /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/plugins/psychic.c --- a/libpurple/plugins/psychic.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/plugins/psychic.c Mon Oct 29 04:41:19 2007 +0000 @@ -147,7 +147,7 @@ PLUGIN_ID, /**< id */ PLUGIN_NAME, /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ PLUGIN_SUMMARY, /**< summary */ PLUGIN_DESC, /**< description */ PLUGIN_AUTHOR, /**< author */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/plugins/signals-test.c --- a/libpurple/plugins/signals-test.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/plugins/signals-test.c Mon Oct 29 04:41:19 2007 +0000 @@ -709,7 +709,7 @@ SIGNAL_TEST_PLUGIN_ID, /**< id */ N_("Signals Test"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("Test to see that all signals are working properly."), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/plugins/simple.c --- a/libpurple/plugins/simple.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/plugins/simple.c Mon Oct 29 04:41:19 2007 +0000 @@ -35,7 +35,7 @@ SIMPLE_PLUGIN_ID, /**< id */ N_("Simple Plugin"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("Tests to see that most things are working."), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/plugins/ssl/ssl-gnutls.c --- a/libpurple/plugins/ssl/ssl-gnutls.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/plugins/ssl/ssl-gnutls.c Mon Oct 29 04:41:19 2007 +0000 @@ -993,7 +993,7 @@ SSL_GNUTLS_PLUGIN_ID, /**< id */ N_("GNUTLS"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("Provides SSL support through GNUTLS."), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/plugins/ssl/ssl-nss.c --- a/libpurple/plugins/ssl/ssl-nss.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/plugins/ssl/ssl-nss.c Mon Oct 29 04:41:19 2007 +0000 @@ -814,7 +814,7 @@ SSL_NSS_PLUGIN_ID, /**< id */ N_("NSS"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("Provides SSL support through Mozilla NSS."), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/plugins/ssl/ssl.c --- a/libpurple/plugins/ssl/ssl.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/plugins/ssl/ssl.c Mon Oct 29 04:41:19 2007 +0000 @@ -92,7 +92,7 @@ SSL_PLUGIN_ID, /**< id */ N_("SSL"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("Provides a wrapper around SSL support libraries."), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/plugins/statenotify.c --- a/libpurple/plugins/statenotify.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/plugins/statenotify.c Mon Oct 29 04:41:19 2007 +0000 @@ -146,7 +146,7 @@ STATENOTIFY_PLUGIN_ID, /**< id */ N_("Buddy State Notification"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("Notifies in a conversation window when a buddy goes or returns from " "away or idle."), diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/plugins/tcl/tcl.c --- a/libpurple/plugins/tcl/tcl.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/plugins/tcl/tcl.c Mon Oct 29 04:41:19 2007 +0000 @@ -421,7 +421,7 @@ PURPLE_PRIORITY_DEFAULT, "core-tcl", N_("Tcl Plugin Loader"), - VERSION, + DISPLAY_VERSION, N_("Provides support for loading Tcl plugins"), N_("Provides support for loading Tcl plugins"), "Ethan Blanton ", diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/protocols/bonjour/bonjour.c --- a/libpurple/protocols/bonjour/bonjour.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/protocols/bonjour/bonjour.c Mon Oct 29 04:41:19 2007 +0000 @@ -476,7 +476,7 @@ "prpl-bonjour", /**< id */ "Bonjour", /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("Bonjour Protocol Plugin"), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/protocols/gg/gg.c --- a/libpurple/protocols/gg/gg.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/protocols/gg/gg.c Mon Oct 29 04:41:19 2007 +0000 @@ -2148,7 +2148,7 @@ "prpl-gg", /* id */ "Gadu-Gadu", /* name */ - VERSION, /* version */ + DISPLAY_VERSION, /* version */ N_("Gadu-Gadu Protocol Plugin"), /* summary */ N_("Polish popular IM"), /* description */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/protocols/irc/irc.c --- a/libpurple/protocols/irc/irc.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/protocols/irc/irc.c Mon Oct 29 04:41:19 2007 +0000 @@ -910,7 +910,7 @@ "prpl-irc", /**< id */ "IRC", /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ N_("IRC Protocol Plugin"), /** summary */ N_("The IRC Protocol Plugin that Sucks Less"), /** description */ NULL, /**< author */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/protocols/jabber/libxmpp.c --- a/libpurple/protocols/jabber/libxmpp.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/protocols/jabber/libxmpp.c Mon Oct 29 04:41:19 2007 +0000 @@ -165,7 +165,7 @@ "prpl-jabber", /**< id */ "XMPP", /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("XMPP Protocol Plugin"), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/protocols/msn/msn.c --- a/libpurple/protocols/msn/msn.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/protocols/msn/msn.c Mon Oct 29 04:41:19 2007 +0000 @@ -617,7 +617,12 @@ * XXX: blocked icon overlay isn't always accurate for MSN. * XXX: This can die as soon as purple_privacy_check() knows that * XXX: this prpl always honors both the allow and deny lists. */ - if (user) + /* While the above comment may be strictly correct (the privacy API needs + * rewriteing), purple_privacy_check() is going to be more accurate at + * indicating whether a particular buddy is going to be able to message + * you, which is the important information that this is trying to convey. + */ + if (full && user) { purple_notify_user_info_add_pair(user_info, _("Blocked"), ((user->list_op & (1 << MSN_LIST_BL)) ? _("Yes") : _("No"))); @@ -2260,7 +2265,7 @@ "prpl-msn", /**< id */ "MSN", /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("Windows Live Messenger Protocol Plugin"), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/protocols/myspace/user.c --- a/libpurple/protocols/myspace/user.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/protocols/myspace/user.c Mon Oct 29 04:41:19 2007 +0000 @@ -203,14 +203,6 @@ /* Ignore because PurpleBuddy knows this already */ g_free(value_str); } else if (g_str_equal(key_str, "ImageURL") || g_str_equal(key_str, "AvatarURL")) { - if (user->temporary_user) { - /* This user will be destroyed soon; don't try to look up its image or avatar, - * since that won't return immediately and we will end up accessing freed data. - */ - g_free(value_str); - return; - } - const gchar *previous_url; if (user->temporary_user) { @@ -220,7 +212,15 @@ g_free(value_str); return; } - + + if (user->temporary_user) { + /* This user will be destroyed soon; don't try to look up its image or avatar, + * since that won't return immediately and we will end up accessing freed data. + */ + g_free(value_str); + return; + } + g_free(user->image_url); user->image_url = value_str; @@ -233,7 +233,7 @@ NULL, 0, NULL); return; } - + /* TODO: use ETag for checksum */ previous_url = purple_buddy_icons_get_checksum_for_user(user->buddy); diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/protocols/novell/novell.c --- a/libpurple/protocols/novell/novell.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/protocols/novell/novell.c Mon Oct 29 04:41:19 2007 +0000 @@ -3518,7 +3518,7 @@ PURPLE_PRIORITY_DEFAULT, /**< priority */ "prpl-novell", /**< id */ "GroupWise", /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("Novell GroupWise Messenger Protocol Plugin"), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/protocols/oscar/libaim.c --- a/libpurple/protocols/oscar/libaim.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/protocols/oscar/libaim.c Mon Oct 29 04:41:19 2007 +0000 @@ -113,7 +113,7 @@ "prpl-aim", /**< id */ "AIM", /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("AIM Protocol Plugin"), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/protocols/oscar/libicq.c --- a/libpurple/protocols/oscar/libicq.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/protocols/oscar/libicq.c Mon Oct 29 04:41:19 2007 +0000 @@ -113,7 +113,7 @@ "prpl-icq", /**< id */ "ICQ", /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("ICQ Protocol Plugin"), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/protocols/qq/qq.c --- a/libpurple/protocols/qq/qq.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/protocols/qq/qq.c Mon Oct 29 04:41:19 2007 +0000 @@ -720,7 +720,7 @@ "prpl-qq", /**< id */ "QQ", /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("QQ Protocol Plugin"), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/protocols/sametime/sametime.c --- a/libpurple/protocols/sametime/sametime.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/protocols/sametime/sametime.c Mon Oct 29 04:41:19 2007 +0000 @@ -5667,7 +5667,7 @@ PLUGIN_ID, /**< id */ PLUGIN_NAME, /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ PLUGIN_SUMMARY, /**< summary */ PLUGIN_DESC, /**< description */ PLUGIN_AUTHOR, /**< author */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/protocols/silc/buddy.c --- a/libpurple/protocols/silc/buddy.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/protocols/silc/buddy.c Mon Oct 29 04:41:19 2007 +0000 @@ -934,8 +934,11 @@ /* Create dir if it doesn't exist */ if ((g_stat(filename, &st)) == -1) { if (errno == ENOENT) { - if (pw->pw_uid == geteuid()) - g_mkdir(filename, 0755); + if (pw->pw_uid == geteuid()) { + int ret = g_mkdir(filename, 0755); + if (ret < 0) + return; + } } } diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/protocols/silc/chat.c --- a/libpurple/protocols/silc/chat.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/protocols/silc/chat.c Mon Oct 29 04:41:19 2007 +0000 @@ -160,15 +160,17 @@ unsigned char *pk; SilcUInt32 pk_len; pk = silc_pkcs_public_key_encode(channel->founder_key, &pk_len); - fingerprint = silc_hash_fingerprint(NULL, pk, pk_len); - babbleprint = silc_hash_babbleprint(NULL, pk, pk_len); + if (pk) { + fingerprint = silc_hash_fingerprint(NULL, pk, pk_len); + babbleprint = silc_hash_babbleprint(NULL, pk, pk_len); - g_string_append_printf(s, _("
Founder Key Fingerprint:
%s"), fingerprint); - g_string_append_printf(s, _("
Founder Key Babbleprint:
%s"), babbleprint); + g_string_append_printf(s, _("
Founder Key Fingerprint:
%s"), fingerprint); + g_string_append_printf(s, _("
Founder Key Babbleprint:
%s"), babbleprint); - silc_free(fingerprint); - silc_free(babbleprint); - silc_free(pk); + silc_free(fingerprint); + silc_free(babbleprint); + silc_free(pk); + } } buf = g_string_free(s, FALSE); @@ -460,6 +462,8 @@ silc_dlist_start(channel_pubkeys); while ((public_key = silc_dlist_get(channel_pubkeys))) { pk = silc_pkcs_public_key_encode(public_key, &pk_len); + if (!pk) + continue; fingerprint = silc_hash_fingerprint(NULL, pk + 4, pk_len - 4); babbleprint = silc_hash_babbleprint(NULL, pk + 4, pk_len - 4); @@ -1013,9 +1017,6 @@ SilcClient client = sg->client; SilcClientConnection conn = sg->conn; const char *channel, *passphrase, *parentch; -#if 0 - PurpleChat *chat; -#endif if (!conn) return; @@ -1071,22 +1072,6 @@ return; } -#if 0 - /* If the channel is not on buddy list, automatically add it there. */ - chat = purple_blist_find_chat(sg->account, channel); - if (!chat) { - data = g_hash_table_new_full(g_str_hash, g_str_equal, - g_free, g_free); - g_hash_table_replace(data, g_strdup("channel"), - g_strdup(channel)); - if (passphrase) - g_hash_table_replace(data, g_strdup("passphrase"), - g_strdup(passphrase)); - chat = purple_chat_new(sg->account, NULL, data); - purple_blist_add_chat(chat, NULL, NULL); - } -#endif - /* XXX We should have other properties here as well: 1. whether to try to authenticate to the channel 1a. with default key, @@ -1320,7 +1305,7 @@ ret = silc_client_send_channel_message(client, conn, channel, key, - flags, NULL, + flags, sg->sha1hash, buf->data, silc_buffer_len(buf)); silc_mime_partial_free(list); @@ -1334,7 +1319,8 @@ /* Send channel message */ ret = silc_client_send_channel_message(client, conn, channel, key, - flags, NULL, (unsigned char *)msg2, + flags, sg->sha1hash, + (unsigned char *)msg2, strlen(msg2)); if (ret) { serv_got_chat_in(gc, id, purple_connection_get_display_name(gc), 0, msg, diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/protocols/silc/ops.c --- a/libpurple/protocols/silc/ops.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/protocols/silc/ops.c Mon Oct 29 04:41:19 2007 +0000 @@ -1274,13 +1274,15 @@ unsigned char *pk; SilcUInt32 pk_len; pk = silc_pkcs_public_key_encode(client_entry->public_key, &pk_len); - fingerprint = silc_hash_fingerprint(NULL, pk, pk_len); - babbleprint = silc_hash_babbleprint(NULL, pk, pk_len); - purple_notify_user_info_add_pair(user_info, _("Public Key Fingerprint"), fingerprint); - purple_notify_user_info_add_pair(user_info, _("Public Key Babbleprint"), babbleprint); - silc_free(fingerprint); - silc_free(babbleprint); - silc_free(pk); + if (pk) { + fingerprint = silc_hash_fingerprint(NULL, pk, pk_len); + babbleprint = silc_hash_babbleprint(NULL, pk, pk_len); + purple_notify_user_info_add_pair(user_info, _("Public Key Fingerprint"), fingerprint); + purple_notify_user_info_add_pair(user_info, _("Public Key Babbleprint"), babbleprint); + silc_free(fingerprint); + silc_free(babbleprint); + silc_free(pk); + } } #if 0 /* XXX for now, let's not show attrs here */ @@ -1346,13 +1348,15 @@ unsigned char *pk; SilcUInt32 pk_len; pk = silc_pkcs_public_key_encode(client_entry->public_key, &pk_len); - fingerprint = silc_hash_fingerprint(NULL, pk, pk_len); - babbleprint = silc_hash_babbleprint(NULL, pk, pk_len); - purple_notify_user_info_add_pair(user_info, _("Public Key Fingerprint"), fingerprint); - purple_notify_user_info_add_pair(user_info, _("Public Key Babbleprint"), babbleprint); - silc_free(fingerprint); - silc_free(babbleprint); - silc_free(pk); + if (pk) { + fingerprint = silc_hash_fingerprint(NULL, pk, pk_len); + babbleprint = silc_hash_babbleprint(NULL, pk, pk_len); + purple_notify_user_info_add_pair(user_info, _("Public Key Fingerprint"), fingerprint); + purple_notify_user_info_add_pair(user_info, _("Public Key Babbleprint"), babbleprint); + silc_free(fingerprint); + silc_free(babbleprint); + silc_free(pk); + } } purple_notify_userinfo(gc, nickname, user_info, NULL, NULL); diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/protocols/silc/pk.c --- a/libpurple/protocols/silc/pk.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/protocols/silc/pk.c Mon Oct 29 04:41:19 2007 +0000 @@ -158,6 +158,11 @@ NULL, &hostname, &ip, &port); pk = silc_pkcs_public_key_encode(public_key, &pk_len); + if (!pk) { + if (completion) + completion(FALSE, context); + return; + } if (conn_type == SILC_CONN_SERVER || conn_type == SILC_CONN_ROUTER) { diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/protocols/silc/silc.c --- a/libpurple/protocols/silc/silc.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/protocols/silc/silc.c Mon Oct 29 04:41:19 2007 +0000 @@ -128,6 +128,7 @@ NULL, 0); } +#if __SILC_TOOLKIT_VERSION < SILC_VERSION(1,1,1) static gboolean silcpurple_scheduler(gpointer *context) { @@ -135,6 +136,105 @@ silc_client_run_one(client); return TRUE; } +#else +typedef struct { + SilcPurple sg; + SilcUInt32 fd; + guint tag; +} *SilcPurpleTask; + +/* A timeout occurred. Call SILC scheduler. */ + +static gboolean +silcpurple_scheduler_timeout(gpointer context) +{ + SilcPurpleTask task = (SilcPurpleTask)context; + silc_client_run_one(task->sg->client); + silc_dlist_del(task->sg->tasks, task); + silc_free(task); + return FALSE; +} + +/* An fd task event occurred. Call SILC scheduler. */ + +static void +silcpurple_scheduler_fd(gpointer data, gint fd, PurpleInputCondition cond) +{ + SilcClient client = (SilcClient)data; + silc_client_run_one(client); +} + +/* SILC Scheduler notify callback. This is called whenever task is added to + or deleted from SILC scheduler. It's also called when fd task events + change. Here we add same tasks to glib's main loop. */ + +static void +silcpurple_scheduler(SilcSchedule schedule, + SilcBool added, SilcTask task, + SilcBool fd_task, SilcUInt32 fd, + SilcTaskEvent event, + long seconds, long useconds, + void *context) +{ + SilcClient client = (SilcClient)context; + PurpleConnection *gc = client->application; + SilcPurple sg = gc->proto_data; + SilcPurpleTask ptask = NULL; + + if (added) { + if (fd_task) { + /* Add fd or change fd events */ + PurpleInputCondition e = 0; + + silc_dlist_start(sg->tasks); + while ((ptask = silc_dlist_get(sg->tasks))) + if (ptask->fd == fd) { + purple_input_remove(ptask->tag); + break; + } + + if (event & SILC_TASK_READ) + e |= PURPLE_INPUT_READ; + if (event & SILC_TASK_WRITE) + e |= PURPLE_INPUT_WRITE; + + if (e) { + if (!ptask) { + ptask = silc_calloc(1, sizeof(*ptask)); + ptask->fd = fd; + silc_dlist_add(sg->tasks, ptask); + } + ptask->tag = purple_input_add(fd, e, silcpurple_scheduler_fd, + client); + } else if (ptask) { + silc_dlist_del(sg->tasks, ptask); + silc_free(ptask); + } + } else { + /* Add timeout */ + ptask = silc_calloc(1, sizeof(*ptask)); + ptask->sg = sg; + ptask->tag = purple_timeout_add((seconds * 1000) + + (useconds / 1000), + silcpurple_scheduler_timeout, + ptask); + silc_dlist_add(sg->tasks, ptask); + } + } else { + if (fd_task) { + /* Remove fd */ + silc_dlist_start(sg->tasks); + while ((ptask = silc_dlist_get(sg->tasks))) + if (ptask->fd == fd) { + purple_input_remove(ptask->tag); + silc_dlist_del(sg->tasks, ptask); + silc_free(ptask); + break; + } + } + } +} +#endif /* __SILC_TOOLKIT_VERSION */ static void silcpurple_connect_cb(SilcClient client, SilcClientConnection conn, @@ -316,6 +416,8 @@ return; } + silc_hash_alloc("sha1", &sg->sha1hash); + /* Wrap socket to TCP stream */ silc_socket_tcp_stream_create(source, TRUE, FALSE, sg->client->schedule, @@ -324,21 +426,11 @@ static void silcpurple_running(SilcClient client, void *context) { - PurpleAccount *account = context; - PurpleConnection *gc = account->gc; - SilcPurple sg; + SilcPurple sg = context; + PurpleConnection *gc = sg->gc; + PurpleAccount *account = purple_connection_get_account(gc); char pkd[256], prd[256]; - sg = silc_calloc(1, sizeof(*sg)); - if (!sg) - return; - memset(sg, 0, sizeof(*sg)); - sg->client = client; - sg->gc = gc; - sg->account = account; - sg->scheduler = SILC_PTR_TO_32(gc->proto_data); - gc->proto_data = sg; - /* Progress */ purple_connection_update_progress(gc, _("Connecting to SILC Server"), 1, 5); @@ -375,10 +467,10 @@ { SilcClient client; PurpleConnection *gc; + SilcPurple sg; SilcClientParams params; const char *cipher, *hmac; char *username, *hostname, *realname, **up; - guint scheduler; int i; gc = account->gc; @@ -431,11 +523,21 @@ break; } + sg = silc_calloc(1, sizeof(*sg)); + if (!sg) + return; + sg->client = client; + sg->gc = gc; + sg->account = account; + gc->proto_data = sg; + /* Init SILC client */ if (!silc_client_init(client, username, hostname, realname, - silcpurple_running, account)) { + silcpurple_running, sg)) { gc->wants_to_die = TRUE; purple_connection_error(gc, _("Cannot initialize SILC protocol")); + gc->proto_data = NULL; + silc_free(sg); return; } @@ -443,20 +545,32 @@ if (!silcpurple_check_silc_dir(gc)) { gc->wants_to_die = TRUE; purple_connection_error(gc, _("Error loading SILC key pair")); + gc->proto_data = NULL; + silc_free(sg); return; } +#if __SILC_TOOLKIT_VERSION < SILC_VERSION(1,1,1) /* Schedule SILC using Glib's event loop */ - scheduler = purple_timeout_add(300, (GSourceFunc)silcpurple_scheduler, client); - gc->proto_data = SILC_32_TO_PTR(scheduler); + sg->scheduler = purple_timeout_add(300, (GSourceFunc)silcpurple_scheduler, client); +#else + /* Run SILC scheduler */ + sg->tasks = silc_dlist_init(); + silc_schedule_set_notify(client->schedule, silcpurple_scheduler, + client); + silc_client_run_one(client); +#endif /* __SILC_TOOLKIT_VERSION */ } static int silcpurple_close_final(gpointer *context) { SilcPurple sg = (SilcPurple)context; + silc_client_stop(sg->client, NULL, NULL); silc_client_free(sg->client); + if (sg->sha1hash) + silc_hash_free(sg->sha1hash); if (sg->mimeass) silc_mime_assembler_free(sg->mimeass); silc_free(sg); @@ -467,16 +581,33 @@ silcpurple_close(PurpleConnection *gc) { SilcPurple sg = gc->proto_data; +#if __SILC_TOOLKIT_VERSION >= SILC_VERSION(1,1,1) + SilcPurpleTask task; +#endif /* __SILC_TOOLKIT_VERSION */ g_return_if_fail(sg != NULL); /* Send QUIT */ silc_client_command_call(sg->client, sg->conn, NULL, - "QUIT", "Download Pidgin: " PURPLE_WEBSITE, NULL); + "QUIT", "Download Pidgin: " PURPLE_WEBSITE, + NULL); if (sg->conn) silc_client_close_connection(sg->client, sg->conn); +#if __SILC_TOOLKIT_VERSION >= SILC_VERSION(1,1,1) + if (sg->conn) + silc_client_run_one(sg->client); + silc_schedule_set_notify(sg->client->schedule, NULL, NULL); + + silc_dlist_start(sg->tasks); + while ((task = silc_dlist_get(sg->tasks))) { + purple_input_remove(task->tag); + silc_free(task); + } + silc_dlist_uninit(sg->tasks); +#endif /* __SILC_TOOLKIT_VERSION */ + purple_timeout_remove(sg->scheduler); purple_timeout_add(1, (GSourceFunc)silcpurple_close_final, sg); } @@ -1155,7 +1286,7 @@ silc_dlist_start(list); while ((buf = silc_dlist_get(list)) != SILC_LIST_END) silc_client_send_private_message(client, conn, - client_entry, im->flags, NULL, + client_entry, im->flags, sg->sha1hash, buf->data, silc_buffer_len(buf)); silc_mime_partial_free(list); @@ -1167,7 +1298,7 @@ /* Send the message */ silc_client_send_private_message(client, conn, client_entry, im->flags, - NULL, (unsigned char *)im->message, im->message_len); + sg->sha1hash, (unsigned char *)im->message, im->message_len); purple_conv_im_write(PURPLE_CONV_IM(convo), conn->local_entry->nickname, im->message, 0, time(NULL)); goto out; @@ -1259,7 +1390,7 @@ while ((buf = silc_dlist_get(list)) != SILC_LIST_END) ret = silc_client_send_private_message(client, conn, - client_entry, mflags, NULL, + client_entry, mflags, sg->sha1hash, buf->data, silc_buffer_len(buf)); silc_mime_partial_free(list); @@ -1271,7 +1402,7 @@ /* Send private message directly */ ret = silc_client_send_private_message(client, conn, client_entry, - mflags, NULL, + mflags, sg->sha1hash, (unsigned char *)msg, strlen(msg)); diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/protocols/silc/silcpurple.h --- a/libpurple/protocols/silc/silcpurple.h Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/protocols/silc/silcpurple.h Mon Oct 29 04:41:19 2007 +0000 @@ -35,6 +35,9 @@ #include "server.h" #include "util.h" +#undef SILC_VERSION +#define SILC_VERSION(a, b, c) (((a) << 24) + ((b) << 16) + ((c) << 8)) + /* Default public and private key file names */ #define SILCPURPLE_PUBLIC_KEY_NAME "public_key.pub" #define SILCPURPLE_PRIVATE_KEY_NAME "private_key.prv" @@ -68,7 +71,9 @@ SilcClientConnection conn; SilcPublicKey public_key; SilcPrivateKey private_key; + SilcHash sha1hash; + SilcDList tasks; guint scheduler; PurpleConnection *gc; PurpleAccount *account; diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/protocols/silc/util.c --- a/libpurple/protocols/silc/util.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/protocols/silc/util.c Mon Oct 29 04:41:19 2007 +0000 @@ -347,8 +347,12 @@ key_len = silc_pkcs_public_key_get_len(public_key); pk = silc_pkcs_public_key_encode(public_key, &pk_len); + if (!pk) + return; fingerprint = silc_hash_fingerprint(NULL, pk, pk_len); babbleprint = silc_hash_babbleprint(NULL, pk, pk_len); + if (!fingerprint || !babbleprint) + return; s = g_string_new(""); if (ident->realname) diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/protocols/silc/wb.c --- a/libpurple/protocols/silc/wb.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/protocols/silc/wb.c Mon Oct 29 04:41:19 2007 +0000 @@ -254,10 +254,10 @@ static void silcpurple_wb_request(SilcClient client, const unsigned char *message, - SilcUInt32 message_len, SilcClientEntry sender, - SilcChannelEntry channel) + SilcUInt32 message_len, SilcClientEntry sender, + SilcChannelEntry channel) { - char tmp[128]; + char tmp[256]; SilcPurpleWbRequest req; PurpleConnection *gc; SilcPurple sg; @@ -274,20 +274,24 @@ else wb = silcpurple_wb_init_ch(sg, channel); - silcpurple_wb_parse(wb->proto_data, wb, (unsigned char *)message, - message_len); + silcpurple_wb_parse(wb->proto_data, wb, + (unsigned char *)message, + message_len); return; } + /* Close any previous unaccepted requests */ + purple_request_close_with_handle(sender); + if (!channel) { g_snprintf(tmp, sizeof(tmp), - _("%s sent message to whiteboard. Would you like " - "to open the whiteboard?"), sender->nickname); + _("%s sent message to whiteboard. Would you like " + "to open the whiteboard?"), sender->nickname); } else { g_snprintf(tmp, sizeof(tmp), - _("%s sent message to whiteboard on %s channel. " - "Would you like to open the whiteboard?"), - sender->nickname, channel->channel_name); + _("%s sent message to whiteboard on %s channel. " + "Would you like to open the whiteboard?"), + sender->nickname, channel->channel_name); } req = silc_calloc(1, sizeof(*req)); @@ -299,10 +303,10 @@ req->channel = channel; req->sg = sg; - 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)); + purple_request_action(sender, _("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)); } /* Process incoming whiteboard message */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/protocols/silc10/buddy.c --- a/libpurple/protocols/silc10/buddy.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/protocols/silc10/buddy.c Mon Oct 29 04:41:19 2007 +0000 @@ -939,8 +939,11 @@ /* Create dir if it doesn't exist */ if ((g_stat(filename, &st)) == -1) { if (errno == ENOENT) { - if (pw->pw_uid == geteuid()) - g_mkdir(filename, 0755); + if (pw->pw_uid == geteuid()) { + int ret = g_mkdir(filename, 0755); + if (ret < 0) + return; + } } } diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/protocols/silc10/wb.c --- a/libpurple/protocols/silc10/wb.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/protocols/silc10/wb.c Mon Oct 29 04:41:19 2007 +0000 @@ -279,6 +279,9 @@ return; } + /* Close any previous unaccepted requests */ + purple_request_close_with_handle(sender); + if (!channel) { g_snprintf(tmp, sizeof(tmp), _("%s sent message to whiteboard. Would you like " @@ -299,7 +302,7 @@ req->channel = channel; req->sg = sg; - purple_request_action(gc, _("Whiteboard"), tmp, NULL, 1, + purple_request_action(sender, _("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)); diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/protocols/simple/simple.c --- a/libpurple/protocols/simple/simple.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/protocols/simple/simple.c Mon Oct 29 04:41:19 2007 +0000 @@ -321,7 +321,7 @@ return retval; } -static void fill_auth(struct simple_account_data *sip, gchar *hdr, struct sip_auth *auth) { +static void fill_auth(struct simple_account_data *sip, const gchar *hdr, struct sip_auth *auth) { int i = 0; const char *authuser; char *tmp; @@ -592,7 +592,7 @@ static struct transaction *transactions_find(struct simple_account_data *sip, struct sipmsg *msg) { struct transaction *trans; GSList *transactions = sip->transactions; - gchar *cseq = sipmsg_find_header(msg, "CSeq"); + const gchar *cseq = sipmsg_find_header(msg, "CSeq"); if (cseq) { while(transactions) { @@ -800,7 +800,7 @@ } static gboolean simple_add_lcs_contacts(struct simple_account_data *sip, struct sipmsg *msg, struct transaction *tc) { - gchar *tmp; + const gchar *tmp; xmlnode *item, *group, *isc; const char *name_group; PurpleBuddy *b; @@ -960,7 +960,7 @@ static void process_incoming_message(struct simple_account_data *sip, struct sipmsg *msg) { gchar *from; - gchar *contenttype; + const gchar *contenttype; gboolean found = FALSE; from = parse_from(sipmsg_find_header(msg, "From")); @@ -1015,7 +1015,7 @@ gboolean process_register_response(struct simple_account_data *sip, struct sipmsg *msg, struct transaction *tc) { - gchar *tmp; + const gchar *tmp; purple_debug(PURPLE_DEBUG_MISC, "simple", "in process register response response: %d\n", msg->response); switch (msg->response) { case 200: @@ -1072,7 +1072,7 @@ static void process_incoming_notify(struct simple_account_data *sip, struct sipmsg *msg) { gchar *from; - gchar *fromhdr; + const gchar *fromhdr; gchar *basicstatus_data; xmlnode *pidf; xmlnode *basicstatus = NULL, *tuple, *status; @@ -1255,8 +1255,8 @@ gchar *theirtag = find_tag(from_hdr); gchar *ourtag = find_tag(sipmsg_find_header(msg, "To")); gboolean tagadded = FALSE; - gchar *callid = sipmsg_find_header(msg, "Call-ID"); - gchar *expire = sipmsg_find_header(msg, "Expire"); + const gchar *callid = sipmsg_find_header(msg, "Call-ID"); + const gchar *expire = sipmsg_find_header(msg, "Expire"); gchar *tmp; struct simple_watcher *watcher = watcher_find(sip, from); if(!ourtag) { @@ -1264,14 +1264,14 @@ ourtag = gentag(); } if(!watcher) { /* new subscription */ - gchar *acceptheader = sipmsg_find_header(msg, "Accept"); + const gchar *acceptheader = sipmsg_find_header(msg, "Accept"); gboolean needsxpidf = FALSE; if(!purple_privacy_check(sip->account, from)) { send_sip_response(sip->gc, msg, 202, "Ok", NULL); goto privend; } if(acceptheader) { - gchar *tmp = acceptheader; + const gchar *tmp = acceptheader; gboolean foundpidf = FALSE; gboolean foundxpidf = FALSE; while(tmp && tmp < acceptheader + strlen(acceptheader)) { @@ -1289,7 +1289,6 @@ tmp = 0; } if(!foundpidf && foundxpidf) needsxpidf = TRUE; - g_free(acceptheader); } watcher = watcher_create(sip, from, callid, ourtag, theirtag, needsxpidf); } @@ -1314,8 +1313,6 @@ g_free(from); g_free(theirtag); g_free(ourtag); - g_free(callid); - g_free(expire); } static void process_input_message(struct simple_account_data *sip, struct sipmsg *msg) { @@ -1337,7 +1334,8 @@ struct transaction *trans = transactions_find(sip, msg); if(trans) { if(msg->response == 407) { - gchar *resend, *auth, *ptmp; + gchar *resend, *auth; + const gchar *ptmp; if(sip->proxy.retries > 3) return; sip->proxy.retries++; @@ -1381,7 +1379,8 @@ /* This is encountered when a generic (MESSAGE, NOTIFY, etc) * was denied until further authorization is provided. */ - gchar *resend, *auth, *ptmp; + gchar *resend, *auth; + const gchar *ptmp; if(sip->registrar.retries > SIMPLE_REGISTER_RETRY_MAX) return; sip->registrar.retries++; @@ -1889,7 +1888,7 @@ "prpl-simple", /**< id */ "SIMPLE", /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ N_("SIP/SIMPLE Protocol Plugin"), /** summary */ N_("The SIP/SIMPLE Protocol Plugin"), /** description */ "Thomas Butter ", /**< author */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/protocols/simple/simple.h --- a/libpurple/protocols/simple/simple.h Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/protocols/simple/simple.h Mon Oct 29 04:41:19 2007 +0000 @@ -127,7 +127,7 @@ int retries; int transport; /* 0 = tcp, 1 = udp */ int fd; - gchar *cseq; + const gchar *cseq; struct sipmsg *msg; TransCallback callback; }; diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/protocols/simple/sipmsg.c --- a/libpurple/protocols/simple/sipmsg.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/protocols/simple/sipmsg.c Mon Oct 29 04:41:19 2007 +0000 @@ -58,6 +58,7 @@ gchar *dummy; gchar *dummy2; gchar *tmp; + const gchar *tmp2; int i=1; if(!lines[0]) return NULL; parts = g_strsplit(lines[0], " ", 3); @@ -100,14 +101,16 @@ g_strfreev(parts); } g_strfreev(lines); - msg->bodylen = strtol(sipmsg_find_header(msg, "Content-Length"),NULL,10); + tmp2 = sipmsg_find_header(msg, "Content-Length"); + if (tmp2 != NULL) + msg->bodylen = strtol(tmp2, NULL, 10); if(msg->response) { - tmp = sipmsg_find_header(msg, "CSeq"); - if(!tmp) { + tmp2 = sipmsg_find_header(msg, "CSeq"); + if(!tmp2) { /* SHOULD NOT HAPPEN */ msg->method = 0; } else { - parts = g_strsplit(tmp, " ", 2); + parts = g_strsplit(tmp2, " ", 2); msg->method = g_strdup(parts[1]); g_strfreev(parts); } @@ -192,7 +195,7 @@ return; } -gchar *sipmsg_find_header(struct sipmsg *msg, const gchar *name) { +const gchar *sipmsg_find_header(struct sipmsg *msg, const gchar *name) { GSList *tmp; struct siphdrelement *elem; tmp = msg->headers; diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/protocols/simple/sipmsg.h --- a/libpurple/protocols/simple/sipmsg.h Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/protocols/simple/sipmsg.h Mon Oct 29 04:41:19 2007 +0000 @@ -43,7 +43,7 @@ struct sipmsg *sipmsg_parse_header(const gchar *header); void sipmsg_add_header(struct sipmsg *msg, const gchar *name, const gchar *value); void sipmsg_free(struct sipmsg *msg); -gchar *sipmsg_find_header(struct sipmsg *msg, const gchar *name); +const gchar *sipmsg_find_header(struct sipmsg *msg, const gchar *name); void sipmsg_remove_header(struct sipmsg *msg, const gchar *name); void sipmsg_print(const struct sipmsg *msg); char *sipmsg_to_string(const struct sipmsg *msg); diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/protocols/toc/toc.c --- a/libpurple/protocols/toc/toc.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/protocols/toc/toc.c Mon Oct 29 04:41:19 2007 +0000 @@ -2301,7 +2301,7 @@ "prpl-toc", /**< id */ "TOC", /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("TOC Protocol Plugin"), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/protocols/yahoo/yahoo.c --- a/libpurple/protocols/yahoo/yahoo.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/protocols/yahoo/yahoo.c Mon Oct 29 04:41:19 2007 +0000 @@ -4355,7 +4355,7 @@ PURPLE_PRIORITY_DEFAULT, /**< priority */ "prpl-yahoo", /**< id */ "Yahoo", /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("Yahoo Protocol Plugin"), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/protocols/zephyr/zephyr.c --- a/libpurple/protocols/zephyr/zephyr.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/protocols/zephyr/zephyr.c Mon Oct 29 04:41:19 2007 +0000 @@ -2941,7 +2941,7 @@ "prpl-zephyr", /**< id */ "Zephyr", /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("Zephyr Protocol Plugin"), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/prpl.h --- a/libpurple/prpl.h Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/prpl.h Mon Oct 29 04:41:19 2007 +0000 @@ -339,6 +339,15 @@ void (*remove_group)(PurpleConnection *gc, PurpleGroup *group); + /** Gets the real name of a participant in a chat. For example, on + * XMPP this turns a chat room nick foo into + * room@server/foo + * @param gc the connection on which the room is. + * @param id the ID of the chat room. + * @param who the nickname of the chat participant. + * @return the real name of the participant. This string must be + * freed by the caller. + */ char *(*get_cb_real_name)(PurpleConnection *gc, int id, const char *who); void (*set_chat_topic)(PurpleConnection *gc, int id, const char *topic); @@ -354,6 +363,11 @@ gboolean (*can_receive_file)(PurpleConnection *, const char *who); void (*send_file)(PurpleConnection *, const char *who, const char *filename); PurpleXfer *(*new_xfer)(PurpleConnection *, const char *who); + + /** Checks whether offline messages to @a buddy are supported. + * @return @c TRUE if @a buddy can be sent messages while they are + * offline, or @c FALSE if not. + */ gboolean (*offline_message)(const PurpleBuddy *buddy); PurpleWhiteboardPrplOps *whiteboard_prpl_ops; diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/util.c --- a/libpurple/util.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/util.c Mon Oct 29 04:41:19 2007 +0000 @@ -1642,7 +1642,7 @@ pt->src_tag = "font"; pt->dest_tag = "span"; tags = g_list_prepend(tags, pt); - if(style->len) + if(style->len && xhtml) g_string_append_printf(xhtml, "", g_strstrip(style->str)); else pt->ignore = TRUE; @@ -3067,9 +3067,6 @@ ret[j++] = text[i]; } - purple_debug_misc("purple_str_add_cr", "got: %s, leaving with %s\n", - text, ret); - return ret; } diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/win32/global.mak --- a/libpurple/win32/global.mak Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/win32/global.mak Mon Oct 29 04:41:19 2007 +0000 @@ -71,8 +71,7 @@ ) PURPLE_VERSION := $(PIDGIN_VERSION) -DEFINES += -DVERSION=\"$(PIDGIN_VERSION)\" \ - -DHAVE_CONFIG_H +DEFINES += -DHAVE_CONFIG_H # Use -g flag when building debug version of Pidgin (including plugins). # Use -fnative-struct instead of -mms-bitfields when using mingw 1.1 diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/win32/targets.mak --- a/libpurple/win32/targets.mak Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/win32/targets.mak Mon Oct 29 04:41:19 2007 +0000 @@ -5,15 +5,15 @@ # files for better handling of cross directory dependencies # -$(PIDGIN_CONFIG_H): $(PIDGIN_TREE_TOP)/config.h.mingw - cp $(PIDGIN_TREE_TOP)/config.h.mingw $(PIDGIN_CONFIG_H) +$(PIDGIN_CONFIG_H): $(PIDGIN_CONFIG_H).mingw $(PIDGIN_TREE_TOP)/configure.ac + sed -e 's/@VERSION@/$(PIDGIN_VERSION)/' $@.mingw > $@ $(PURPLE_VERSION_H): $(PURPLE_VERSION_H).in $(PIDGIN_TREE_TOP)/configure.ac - cp $(PURPLE_VERSION_H).in $(PURPLE_VERSION_H) + cp $@.in $@ awk 'BEGIN {FS="[\\(\\)\\[\\]]"} \ - /^m4_define..purple_major_version/ {system("sed -i -e s/@PURPLE_MAJOR_VERSION@/"$$5"/ $(PURPLE_VERSION_H)");} \ - /^m4_define..purple_minor_version/ {system("sed -i -e s/@PURPLE_MINOR_VERSION@/"$$5"/ $(PURPLE_VERSION_H)");} \ - /^m4_define..purple_micro_version/ {system("sed -i -e s/@PURPLE_MICRO_VERSION@/"$$5"/ $(PURPLE_VERSION_H)"); exit}' $(PIDGIN_TREE_TOP)/configure.ac + /^m4_define..purple_major_version/ {system("sed -i -e s/@PURPLE_MAJOR_VERSION@/"$$5"/ $@");} \ + /^m4_define..purple_minor_version/ {system("sed -i -e s/@PURPLE_MINOR_VERSION@/"$$5"/ $@");} \ + /^m4_define..purple_micro_version/ {system("sed -i -e s/@PURPLE_MICRO_VERSION@/"$$5"/ $@"); exit}' $(PIDGIN_TREE_TOP)/configure.ac $(PURPLE_DLL) $(PURPLE_DLL).a: $(PURPLE_VERSION_H) $(MAKE) -C $(PURPLE_TOP) -f $(MINGW_MAKEFILE) libpurple.dll @@ -30,9 +30,6 @@ $(PIDGIN_EXE): $(MAKE) -C $(PIDGIN_TOP) -f $(MINGW_MAKEFILE) pidgin.exe -$(PIDGIN_PORTABLE_EXE): - $(MAKE) -C $(PIDGIN_TOP) -f $(MINGW_MAKEFILE) pidgin-portable.exe - # Installation Directories $(PIDGIN_INSTALL_DIR): mkdir -p $(PIDGIN_INSTALL_DIR) diff -r bc34e9806879 -r 9f0e2db39bc5 libpurple/win32/win32dep.c --- a/libpurple/win32/win32dep.c Mon Oct 29 04:41:10 2007 +0000 +++ b/libpurple/win32/win32dep.c Mon Oct 29 04:41:19 2007 +0000 @@ -525,7 +525,7 @@ char *newenv; purple_debug_info("wpurple", "wpurple_init start\n"); - purple_debug_info("wpurple", "libpurple version: " VERSION "\n"); + purple_debug_info("wpurple", "libpurple version: " DISPLAY_VERSION "\n"); purple_debug_info("wpurple", "Glib:%u.%u.%u\n", diff -r bc34e9806879 -r 9f0e2db39bc5 pidgin/gtkblist.c --- a/pidgin/gtkblist.c Mon Oct 29 04:41:10 2007 +0000 +++ b/pidgin/gtkblist.c Mon Oct 29 04:41:19 2007 +0000 @@ -111,7 +111,7 @@ static GtkWidget *accountmenu = NULL; static guint visibility_manager_count = 0; -static gboolean gtk_blist_obscured = FALSE; +static GdkVisibilityState gtk_blist_visibility = GDK_VISIBILITY_UNOBSCURED; static gboolean editing_blist = FALSE; static GList *pidgin_blist_sort_methods = NULL; @@ -174,11 +174,14 @@ ***************************************************/ static gboolean gtk_blist_visibility_cb(GtkWidget *w, GdkEventVisibility *event, gpointer data) { - if (event->state == GDK_VISIBILITY_FULLY_OBSCURED) - gtk_blist_obscured = TRUE; - else if (gtk_blist_obscured) { - gtk_blist_obscured = FALSE; - pidgin_blist_refresh_timer(purple_get_blist()); + GdkVisibilityState old_state = gtk_blist_visibility; + gtk_blist_visibility = event->state; + + if (gtk_blist_visibility == GDK_VISIBILITY_FULLY_OBSCURED && + old_state != GDK_VISIBILITY_FULLY_OBSCURED) { + + /* no longer fully obscured */ + pidgin_blist_refresh_timer(purple_get_blist()); } /* continue to handle event normally */ @@ -3765,7 +3768,8 @@ { PurpleBlistNode *gnode, *cnode; - if (gtk_blist_obscured || !GTK_WIDGET_VISIBLE(gtkblist->window)) + if (gtk_blist_visibility == GDK_VISIBILITY_FULLY_OBSCURED + || !GTK_WIDGET_VISIBLE(gtkblist->window)) return TRUE; for(gnode = list->root; gnode; gnode = gnode->next) { @@ -6328,7 +6332,8 @@ { if (gtkblist && gtkblist->window) { if (GTK_WIDGET_VISIBLE(gtkblist->window)) { - purple_blist_set_visible(PIDGIN_WINDOW_ICONIFIED(gtkblist->window) || gtk_blist_obscured); + purple_blist_set_visible(PIDGIN_WINDOW_ICONIFIED(gtkblist->window) || + gtk_blist_visibility != GDK_VISIBILITY_UNOBSCURED); } else { purple_blist_set_visible(TRUE); } diff -r bc34e9806879 -r 9f0e2db39bc5 pidgin/gtkconv.c --- a/pidgin/gtkconv.c Mon Oct 29 04:41:10 2007 +0000 +++ b/pidgin/gtkconv.c Mon Oct 29 04:41:19 2007 +0000 @@ -359,7 +359,7 @@ PurpleCmdStatus status; if (!g_ascii_strcasecmp(args[0], "version")) { - tmp = g_strdup_printf("me is using %s v%s.", "Pidgin", VERSION); + tmp = g_strdup_printf("me is using %s v%s.", "Pidgin", DISPLAY_VERSION); markup = g_markup_escape_text(tmp, -1); status = purple_cmd_do_command(conv, tmp, markup, error); diff -r bc34e9806879 -r 9f0e2db39bc5 pidgin/gtkdialogs.c --- a/pidgin/gtkdialogs.c Mon Oct 29 04:41:10 2007 +0000 +++ b/pidgin/gtkdialogs.c Mon Oct 29 04:41:19 2007 +0000 @@ -315,7 +315,7 @@ context = gtk_widget_get_pango_context(widget); layout = pango_layout_new(context); - markup = g_strdup_printf("%s", VERSION); + markup = g_strdup_printf("%s", DISPLAY_VERSION); pango_layout_set_font_description(layout, style->font_desc); pango_layout_set_markup(layout, markup, strlen(markup)); g_free(markup); @@ -382,7 +382,7 @@ gdk_pixbuf_unref(pixbuf); /* Insert the logo */ obj = gtk_widget_get_accessible(logo); - tmp = g_strconcat(PIDGIN_NAME, " " VERSION, NULL); + tmp = g_strconcat(PIDGIN_NAME, " " DISPLAY_VERSION, NULL); atk_object_set_description(obj, tmp); g_free(tmp); gtk_box_pack_start(GTK_BOX(vbox), logo, FALSE, FALSE, 0); @@ -394,7 +394,7 @@ str = g_string_sized_new(4096); g_string_append_printf(str, - "
%s %s


", PIDGIN_NAME, VERSION); + "
%s %s


", PIDGIN_NAME, DISPLAY_VERSION); g_string_append_printf(str, _("%s is a graphical modular messaging client based on " diff -r bc34e9806879 -r 9f0e2db39bc5 pidgin/gtkmain.c --- a/pidgin/gtkmain.c Mon Oct 29 04:41:10 2007 +0000 +++ b/pidgin/gtkmain.c Mon Oct 29 04:41:19 2007 +0000 @@ -383,7 +383,7 @@ char *text; if (terse) { - text = g_strdup_printf(_("%s %s. Try `%s -h' for more information.\n"), PIDGIN_NAME, VERSION, name); + text = g_strdup_printf(_("%s %s. Try `%s -h' for more information.\n"), PIDGIN_NAME, DISPLAY_VERSION, name); } else { text = g_strdup_printf(_("%s %s\n" "Usage: %s [OPTION]...\n\n" @@ -397,7 +397,7 @@ #ifndef WIN32 " --display=DISPLAY X display to use\n" #endif - " -v, --version display the current version and exit\n"), PIDGIN_NAME, VERSION, name); + " -v, --version display the current version and exit\n"), PIDGIN_NAME, DISPLAY_VERSION, name); } purple_print_utf8_to_console(stdout, text); @@ -527,7 +527,7 @@ "LSchiere (via AIM). Contact information for Sean and Luke \n" "on other protocols is at\n" "%swiki/DeveloperPages\n"), - PIDGIN_NAME, VERSION, PURPLE_DEVEL_WEBSITE, PURPLE_DEVEL_WEBSITE, PURPLE_DEVEL_WEBSITE + PIDGIN_NAME, DISPLAY_VERSION, PURPLE_DEVEL_WEBSITE, PURPLE_DEVEL_WEBSITE, PURPLE_DEVEL_WEBSITE ); /* we have to convert the message (UTF-8 to console @@ -654,7 +654,7 @@ } /* show version message */ if (opt_version) { - printf("%s %s\n", PIDGIN_NAME, VERSION); + printf("%s %s\n", PIDGIN_NAME, DISPLAY_VERSION); #ifdef HAVE_SIGNAL_H g_free(segfault_message); #endif @@ -691,7 +691,7 @@ if (!gui_check) { char *display = gdk_get_display(); - printf("%s %s\n", PIDGIN_NAME, VERSION); + printf("%s %s\n", PIDGIN_NAME, DISPLAY_VERSION); g_warning("cannot open display: %s", display ? display : "unset"); g_free(display); diff -r bc34e9806879 -r 9f0e2db39bc5 pidgin/gtkprefs.c --- a/pidgin/gtkprefs.c Mon Oct 29 04:41:10 2007 +0000 +++ b/pidgin/gtkprefs.c Mon Oct 29 04:41:19 2007 +0000 @@ -1113,12 +1113,25 @@ purple_prefs_set_string("/purple/proxy/password", gtk_entry_get_text(entry)); } +static void +proxy_button_clicked_cb(GtkWidget *button, gpointer null) +{ + GError *err = NULL; + + if (g_spawn_command_line_async ("gnome-network-preferences", &err)) + return; + + purple_notify_error(NULL, NULL, _("Cannot start proxy configuration program."), err->message); + g_error_free(err); +} + static GtkWidget * network_page() { GtkWidget *ret; GtkWidget *vbox, *hbox, *entry; GtkWidget *table, *label, *auto_ip_checkbox, *ports_checkbox, *spin_button; + GtkWidget *warning, *proxy_button; GtkSizeGroup *sg; PurpleProxyInfo *proxy_info = NULL; @@ -1201,9 +1214,33 @@ g_signal_connect(G_OBJECT(ports_checkbox), "clicked", G_CALLBACK(pidgin_toggle_sensitive), spin_button); - if (!purple_running_gnome()) { - vbox = pidgin_make_frame(ret, _("Proxy Server")); - prefs_proxy_frame = gtk_vbox_new(FALSE, 0); + vbox = pidgin_make_frame(ret, _("Proxy Server")); + prefs_proxy_frame = gtk_vbox_new(FALSE, 0); + + if (purple_running_gnome()) { + warning = hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); + gtk_container_add(GTK_CONTAINER(vbox), hbox); + + label = gtk_label_new(NULL); + gtk_label_set_markup(GTK_LABEL(label), + _("Proxy configuration program was not found.")); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); + + hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); + gtk_container_add(GTK_CONTAINER(vbox), hbox); + label = gtk_label_new(_("Proxy preferences are configured in\n" + "GNOME Control Center: Desktop Preferences")); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); + gtk_widget_show(label); + + hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); + gtk_container_add(GTK_CONTAINER(vbox), hbox); + proxy_button = gtk_button_new_with_mnemonic(_("Configure _Proxy")); + g_signal_connect(G_OBJECT(proxy_button), "clicked", + G_CALLBACK(proxy_button_clicked_cb), NULL); + gtk_box_pack_start(GTK_BOX(hbox), proxy_button, FALSE, FALSE, 0); + gtk_widget_show(proxy_button); + } else { pidgin_prefs_dropdown(vbox, _("Proxy _type:"), PURPLE_PREF_STRING, "/purple/proxy/type", _("No proxy"), "none", @@ -1303,8 +1340,21 @@ /* Only hide table if not running gnome otherwise we hide the IP address table! */ if (!purple_running_gnome() && (proxy_info == NULL || purple_proxy_info_get_type(proxy_info) == PURPLE_PROXY_NONE || - purple_proxy_info_get_type(proxy_info) == PURPLE_PROXY_USE_ENVVAR)) + purple_proxy_info_get_type(proxy_info) == PURPLE_PROXY_USE_ENVVAR)) { gtk_widget_hide(table); + } else { + gchar *path; + path = g_find_program_in_path("gnome-network-preferences"); + if (path != NULL) { + gtk_widget_set_sensitive(proxy_button, TRUE); + gtk_widget_hide(warning); + g_free(path); + } else { + gtk_widget_set_sensitive(proxy_button, FALSE); + gtk_widget_show(warning); + } + } + return ret; } diff -r bc34e9806879 -r 9f0e2db39bc5 pidgin/gtkutils.c --- a/pidgin/gtkutils.c Mon Oct 29 04:41:10 2007 +0000 +++ b/pidgin/gtkutils.c Mon Oct 29 04:41:19 2007 +0000 @@ -2858,7 +2858,7 @@ gtk_window_set_urgency_hint(window, urgent); #elif defined _WIN32 winpidgin_window_flash(window, urgent); -#else +#elif defined GDK_WINDOWING_X11 GdkWindow *gdkwin; XWMHints *hints; @@ -2880,6 +2880,8 @@ XSetWMHints(GDK_WINDOW_XDISPLAY(gdkwin), GDK_WINDOW_XWINDOW(gdkwin), hints); XFree(hints); +#else + /* do something else? */ #endif } diff -r bc34e9806879 -r 9f0e2db39bc5 pidgin/plugins/cap/cap.c --- a/pidgin/plugins/cap/cap.c Mon Oct 29 04:41:10 2007 +0000 +++ b/pidgin/plugins/cap/cap.c Mon Oct 29 04:41:19 2007 +0000 @@ -934,7 +934,7 @@ PURPLE_PRIORITY_DEFAULT, /**< priority */ CAP_PLUGIN_ID, /**< id */ N_("Contact Availability Prediction"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ N_("Contact Availability Prediction plugin."), /** summary */ N_("The contact availability plugin (cap) is used to display statistical information about buddies in a users contact list."), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 pidgin/plugins/contact_priority.c --- a/pidgin/plugins/contact_priority.c Mon Oct 29 04:41:10 2007 +0000 +++ b/pidgin/plugins/contact_priority.c Mon Oct 29 04:41:19 2007 +0000 @@ -185,7 +185,7 @@ CONTACT_PRIORITY_PLUGIN_ID, /**< id */ N_("Contact Priority"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /**< summary */ N_("Allows for controlling the values associated with different buddy states."), /**< description */ diff -r bc34e9806879 -r 9f0e2db39bc5 pidgin/plugins/convcolors.c --- a/pidgin/plugins/convcolors.c Mon Oct 29 04:41:10 2007 +0000 +++ b/pidgin/plugins/convcolors.c Mon Oct 29 04:41:19 2007 +0000 @@ -340,7 +340,7 @@ PLUGIN_ID, /* plugin id */ PLUGIN_NAME, /* name */ - VERSION, /* version */ + DISPLAY_VERSION, /* version */ PLUGIN_SUMMARY, /* summary */ PLUGIN_DESCRIPTION, /* description */ PLUGIN_AUTHOR, /* author */ diff -r bc34e9806879 -r 9f0e2db39bc5 pidgin/plugins/crazychat/cc_pidgin_plugin.c --- a/pidgin/plugins/crazychat/cc_pidgin_plugin.c Mon Oct 29 04:41:10 2007 +0000 +++ b/pidgin/plugins/crazychat/cc_pidgin_plugin.c Mon Oct 29 04:41:19 2007 +0000 @@ -144,7 +144,7 @@ CRAZYCHAT_PLUGIN_ID, /**< id */ N_("Crazychat"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("Plugin to establish a Crazychat session."), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 pidgin/plugins/extplacement.c --- a/pidgin/plugins/extplacement.c Mon Oct 29 04:41:10 2007 +0000 +++ b/pidgin/plugins/extplacement.c Mon Oct 29 04:41:19 2007 +0000 @@ -144,7 +144,7 @@ PURPLE_PRIORITY_DEFAULT, /**< priority */ "gtk-extplacement", /**< id */ N_("ExtPlacement"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ N_("Extra conversation placement options."), /**< summary */ /** description */ N_("Restrict the number of conversations per windows," diff -r bc34e9806879 -r 9f0e2db39bc5 pidgin/plugins/gestures/gestures.c --- a/pidgin/plugins/gestures/gestures.c Mon Oct 29 04:41:10 2007 +0000 +++ b/pidgin/plugins/gestures/gestures.c Mon Oct 29 04:41:19 2007 +0000 @@ -293,7 +293,7 @@ GESTURES_PLUGIN_ID, /**< id */ N_("Mouse Gestures"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("Provides support for mouse gestures"), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 pidgin/plugins/gevolution/gevolution.c --- a/pidgin/plugins/gevolution/gevolution.c Mon Oct 29 04:41:10 2007 +0000 +++ b/pidgin/plugins/gevolution/gevolution.c Mon Oct 29 04:41:19 2007 +0000 @@ -525,7 +525,7 @@ GEVOLUTION_PLUGIN_ID, /**< id */ N_("Evolution Integration"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("Provides integration with Evolution."), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 pidgin/plugins/gtk-signals-test.c --- a/pidgin/plugins/gtk-signals-test.c Mon Oct 29 04:41:10 2007 +0000 +++ b/pidgin/plugins/gtk-signals-test.c Mon Oct 29 04:41:19 2007 +0000 @@ -158,7 +158,7 @@ GTK_SIGNAL_TEST_PLUGIN_ID, /**< id */ N_("GTK Signals Test"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("Test to see that all ui signals are working properly."), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 pidgin/plugins/gtkbuddynote.c --- a/pidgin/plugins/gtkbuddynote.c Mon Oct 29 04:41:10 2007 +0000 +++ b/pidgin/plugins/gtkbuddynote.c Mon Oct 29 04:41:19 2007 +0000 @@ -72,7 +72,7 @@ PURPLE_PRIORITY_DEFAULT, /**< priority */ "gtkbuddynote", /**< id */ N_("Buddy Notes"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ N_("Store notes on particular buddies."), /**< summary */ N_("Adds the option to store notes for buddies " "on your buddy list."), /**< description */ diff -r bc34e9806879 -r 9f0e2db39bc5 pidgin/plugins/history.c --- a/pidgin/plugins/history.c Mon Oct 29 04:41:10 2007 +0000 +++ b/pidgin/plugins/history.c Mon Oct 29 04:41:19 2007 +0000 @@ -193,7 +193,7 @@ PURPLE_PRIORITY_DEFAULT, HISTORY_PLUGIN_ID, N_("History"), - VERSION, + DISPLAY_VERSION, N_("Shows recently logged conversations in new conversations."), N_("When a new conversation is opened this plugin will insert " "the last conversation into the current conversation."), diff -r bc34e9806879 -r 9f0e2db39bc5 pidgin/plugins/iconaway.c --- a/pidgin/plugins/iconaway.c Mon Oct 29 04:41:10 2007 +0000 +++ b/pidgin/plugins/iconaway.c Mon Oct 29 04:41:19 2007 +0000 @@ -80,7 +80,7 @@ ICONAWAY_PLUGIN_ID, /**< id */ N_("Iconify on Away"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("Iconifies the buddy list and your conversations when you go away."), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 pidgin/plugins/mailchk.c --- a/pidgin/plugins/mailchk.c Mon Oct 29 04:41:10 2007 +0000 +++ b/pidgin/plugins/mailchk.c Mon Oct 29 04:41:19 2007 +0000 @@ -158,7 +158,7 @@ PURPLE_PRIORITY_DEFAULT, MAILCHK_PLUGIN_ID, N_("Mail Checker"), - VERSION, + DISPLAY_VERSION, N_("Checks for new local mail."), N_("Adds a small box to the buddy list that" " shows if you have new mail."), diff -r bc34e9806879 -r 9f0e2db39bc5 pidgin/plugins/markerline.c --- a/pidgin/plugins/markerline.c Mon Oct 29 04:41:10 2007 +0000 +++ b/pidgin/plugins/markerline.c Mon Oct 29 04:41:19 2007 +0000 @@ -281,7 +281,7 @@ PLUGIN_ID, /* plugin id */ PLUGIN_NAME, /* name */ - VERSION, /* version */ + DISPLAY_VERSION, /* version */ PLUGIN_SUMMARY, /* summary */ PLUGIN_DESCRIPTION, /* description */ PLUGIN_AUTHOR, /* author */ diff -r bc34e9806879 -r 9f0e2db39bc5 pidgin/plugins/musicmessaging/musicmessaging.c --- a/pidgin/plugins/musicmessaging/musicmessaging.c Mon Oct 29 04:41:10 2007 +0000 +++ b/pidgin/plugins/musicmessaging/musicmessaging.c Mon Oct 29 04:41:19 2007 +0000 @@ -681,7 +681,7 @@ MUSICMESSAGING_PLUGIN_ID, /**< id */ "Music Messaging", /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ N_("Music Messaging Plugin for collaborative composition."), /** summary */ N_("The Music Messaging Plugin allows a number of users to simultaneously work on a piece of music by editting a common score in real-time."), diff -r bc34e9806879 -r 9f0e2db39bc5 pidgin/plugins/notify.c --- a/pidgin/plugins/notify.c Mon Oct 29 04:41:10 2007 +0000 +++ b/pidgin/plugins/notify.c Mon Oct 29 04:41:19 2007 +0000 @@ -905,7 +905,7 @@ NOTIFY_PLUGIN_ID, /**< id */ N_("Message Notification"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("Provides a variety of ways of notifying you of unread messages."), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 pidgin/plugins/pidgininc.c --- a/pidgin/plugins/pidgininc.c Mon Oct 29 04:41:10 2007 +0000 +++ b/pidgin/plugins/pidgininc.c Mon Oct 29 04:41:19 2007 +0000 @@ -89,7 +89,7 @@ PURPLEINC_PLUGIN_ID, /**< id */ N_("Pidgin Demonstration Plugin"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("An example plugin that does stuff - see the description."), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 pidgin/plugins/pidginrc.c --- a/pidgin/plugins/pidginrc.c Mon Oct 29 04:41:10 2007 +0000 +++ b/pidgin/plugins/pidginrc.c Mon Oct 29 04:41:19 2007 +0000 @@ -536,7 +536,7 @@ PURPLE_PRIORITY_DEFAULT, "purplerc", N_("Pidgin GTK+ Theme Control"), - VERSION, + DISPLAY_VERSION, N_("Provides access to commonly used gtkrc settings."), N_("Provides access to commonly used gtkrc settings."), "Etan Reisner ", diff -r bc34e9806879 -r 9f0e2db39bc5 pidgin/plugins/raw.c --- a/pidgin/plugins/raw.c Mon Oct 29 04:41:10 2007 +0000 +++ b/pidgin/plugins/raw.c Mon Oct 29 04:41:19 2007 +0000 @@ -173,7 +173,7 @@ PURPLE_PRIORITY_DEFAULT, RAW_PLUGIN_ID, N_("Raw"), - VERSION, + DISPLAY_VERSION, N_("Lets you send raw input to text-based protocols."), N_("Lets you send raw input to text-based protocols (XMPP, MSN, IRC, " "TOC). Hit 'Enter' in the entry box to send. Watch the debug window."), diff -r bc34e9806879 -r 9f0e2db39bc5 pidgin/plugins/relnot.c --- a/pidgin/plugins/relnot.c Mon Oct 29 04:41:10 2007 +0000 +++ b/pidgin/plugins/relnot.c Mon Oct 29 04:41:19 2007 +0000 @@ -141,7 +141,7 @@ "gtk-relnot", /**< id */ N_("Release Notification"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("Checks periodically for new releases."), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 pidgin/plugins/spellchk.c --- a/pidgin/plugins/spellchk.c Mon Oct 29 04:41:10 2007 +0000 +++ b/pidgin/plugins/spellchk.c Mon Oct 29 04:41:19 2007 +0000 @@ -2368,7 +2368,7 @@ PURPLE_PRIORITY_DEFAULT, SPELLCHECK_PLUGIN_ID, N_("Text replacement"), - VERSION, + DISPLAY_VERSION, N_("Replaces text in outgoing messages according to user-defined rules."), N_("Replaces text in outgoing messages according to user-defined rules."), "Eric Warmenhoven ", diff -r bc34e9806879 -r 9f0e2db39bc5 pidgin/plugins/ticker/ticker.c --- a/pidgin/plugins/ticker/ticker.c Mon Oct 29 04:41:10 2007 +0000 +++ b/pidgin/plugins/ticker/ticker.c Mon Oct 29 04:41:19 2007 +0000 @@ -354,7 +354,7 @@ TICKER_PLUGIN_ID, /**< id */ N_("Buddy Ticker"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("A horizontal scrolling version of the buddy list."), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 pidgin/plugins/timestamp.c --- a/pidgin/plugins/timestamp.c Mon Oct 29 04:41:10 2007 +0000 +++ b/pidgin/plugins/timestamp.c Mon Oct 29 04:41:19 2007 +0000 @@ -200,7 +200,7 @@ TIMESTAMP_PLUGIN_ID, /**< id */ N_("Timestamp"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("Display iChat-style timestamps"), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 pidgin/plugins/timestamp_format.c --- a/pidgin/plugins/timestamp_format.c Mon Oct 29 04:41:10 2007 +0000 +++ b/pidgin/plugins/timestamp_format.c Mon Oct 29 04:41:19 2007 +0000 @@ -149,7 +149,7 @@ "core-timestamp_format", /**< id */ N_("Message Timestamp Formats"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("Customizes the message timestamp formats."), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 pidgin/plugins/win32/transparency/win2ktrans.c --- a/pidgin/plugins/win32/transparency/win2ktrans.c Mon Oct 29 04:41:10 2007 +0000 +++ b/pidgin/plugins/win32/transparency/win2ktrans.c Mon Oct 29 04:41:19 2007 +0000 @@ -691,7 +691,7 @@ PURPLE_PRIORITY_DEFAULT, /**< priority */ WINTRANS_PLUGIN_ID, /**< id */ N_("Transparency"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("Variable Transparency for the buddy list and conversations."), /** description */ diff -r bc34e9806879 -r 9f0e2db39bc5 pidgin/plugins/win32/winprefs/winprefs.c --- a/pidgin/plugins/win32/winprefs/winprefs.c Mon Oct 29 04:41:10 2007 +0000 +++ b/pidgin/plugins/win32/winprefs/winprefs.c Mon Oct 29 04:41:19 2007 +0000 @@ -369,7 +369,7 @@ PURPLE_PRIORITY_DEFAULT, WINPREFS_PLUGIN_ID, N_("Windows Pidgin Options"), - VERSION, + DISPLAY_VERSION, N_("Options specific to Pidgin for Windows."), N_("Provides options specific to Pidgin for Windows , such as buddy list docking."), "Herman Bloggs ", diff -r bc34e9806879 -r 9f0e2db39bc5 pidgin/plugins/xmppconsole.c --- a/pidgin/plugins/xmppconsole.c Mon Oct 29 04:41:10 2007 +0000 +++ b/pidgin/plugins/xmppconsole.c Mon Oct 29 04:41:19 2007 +0000 @@ -858,7 +858,7 @@ "gtk-xmpp", /**< id */ N_("XMPP Console"), /**< name */ - VERSION, /**< version */ + DISPLAY_VERSION, /**< version */ /** summary */ N_("Send and receive raw XMPP stanzas."), /** description */