Mercurial > pidgin
changeset 16954:fc3f3714b72a
merge of 'b1655161d189d8a10376daa730773dfb3d44bf78'
and 'bde617e75fa19a626e5ed9112805d28983ec47e6'
author | Nathan Walp <nwalp@pidgin.im> |
---|---|
date | Wed, 09 May 2007 01:50:50 +0000 (2007-05-09) |
parents | ab45289d2c36 (diff) d177369ce625 (current diff) |
children | abbbc8374c74 |
files | |
diffstat | 69 files changed, 573 insertions(+), 655 deletions(-) [+] |
line wrap: on
line diff
--- a/AUTHORS Wed May 09 01:50:06 2007 +0000 +++ b/AUTHORS Wed May 09 01:50:50 2007 +0000 @@ -14,7 +14,7 @@ ICQ: 96642211 Yahoo: SeanEgn MSN: seanegn@hotmail.com - Jabber: seanegn@jabber.org + XMPP: seanegn@jabber.org Gadu-Gadu: 1511497 Daniel 'datallah' Atallah - Developer @@ -55,7 +55,7 @@ Rob Flynn <gaim@robflynn.com> - maintainer Adam Fritzler - libfaim maintainer Syd Logan - hacker and designated driver [lazy bum] -Jim Seymour - Jabber developer +Jim Seymour - XMPP developer Mark Spencer <markster@marko.net> - original author Eric Warmenhoven <eric@warmenhoven.org> - lead developer
--- a/COPYRIGHT Wed May 09 01:50:06 2007 +0000 +++ b/COPYRIGHT Wed May 09 01:50:50 2007 +0000 @@ -161,6 +161,7 @@ Nigel Horne Jensen Hornick Juanjo Molinero Horno +Dustin Howett Nathanael Hoyle Greg Hudson Magnus Hult
--- a/ChangeLog Wed May 09 01:50:06 2007 +0000 +++ b/ChangeLog Wed May 09 01:50:50 2007 +0000 @@ -4,6 +4,13 @@ * Buddy list update speedups when buddy icons are not being displayed. (Scott Wolchok) + Finch: + * Userlist in chat windows, which can be turned on or off using + "/users" command. + * Menus in the conversation windows. + * Improved tab completion support. + * Ctrl+c prompts with a dialog before exiting. + version 2.0.0 (5/3/2007): * The project has new names - libpurple for the core, Pidgin for the GTK+ UI and Finch for the ncurses based console UI (AOL LLC)
--- a/README Wed May 09 01:50:06 2007 +0000 +++ b/README Wed May 09 01:50:50 2007 +0000 @@ -4,7 +4,7 @@ libpurple is a library intended to be used by programmers seeking to write an IM client that connects to many IM networks. It supports -AIM, ICQ, Jabber, MSN and Yahoo!, among others. +AIM, ICQ, XMPP, MSN and Yahoo!, among others. Pidgin is an graphical IM client written in C which uses the GTK+ toolkit.
--- a/autogen.sh Wed May 09 01:50:06 2007 +0000 +++ b/autogen.sh Wed May 09 01:50:50 2007 +0000 @@ -2,7 +2,7 @@ CONFIGURE_ARGS="" if [ -f configure.args ] ; then - CONFIGURE_ARGS="${CONFIGURE_ARGS} `cat configure.args`" + . configure.args fi (glib-gettextize --version) < /dev/null > /dev/null 2>&1 || {
--- a/config.h.mingw Wed May 09 01:50:06 2007 +0000 +++ b/config.h.mingw Wed May 09 01:50:50 2007 +0000 @@ -4,65 +4,26 @@ /* configure arguments */ /* #undef CONFIG_ARGS */ -/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP - systems. This function is required for `alloca.c' support on those systems. - */ -/* #undef CRAY_STACKSEG_END */ - -/* Define to 1 if using `alloca.c'. */ -/* #undef C_ALLOCA */ - /* Define if debugging is enabled. */ /* #undef DEBUG */ -/* Use binary relocation? */ -/* #undef ENABLE_BINRELOC */ - /* Define if mono enabled. */ /* #undef ENABLE_MONO */ -/* Define to 1 if translation of program messages to the user's native - language is requested. */ +/* always defined to indicate that i18n is enabled */ #define ENABLE_NLS 1 -/* Define to make assertions fatal (useful for debugging). */ -/* #undef PURPLE_FATAL_ASSERTS */ - -/* Define if plugins are enabled. */ -#define PURPLE_PLUGINS 1 - -/* Define to 1 if you have `alloca', as a function or macro. */ -#define HAVE_ALLOCA 1 - -/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix). - */ -/* #undef HAVE_ALLOCA_H */ - -/* Define to 1 if you have the <alsa/asoundlib.h> header file. */ -/* #undef HAVE_ALSA_ASOUNDLIB_H */ - /* Define if you have the external 'altzone' variable. */ /* #undef HAVE_ALTZONE */ -/* Define to 1 if you have the <argz.h> header file. */ -/* #undef HAVE_ARGZ_H */ - /* Define to 1 if you have the <arpa/nameser_compat.h> header file. */ /* #undef HAVE_ARPA_NAMESER_COMPAT_H */ -/* Define to 1 if you have the `asprintf' function. */ -/* #undef HAVE_ASPRINTF */ - /* Define to 1 if you have the `atexit' function. */ #define HAVE_ATEXIT 1 -/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the - CoreFoundation framework. */ -/* #undef HAVE_CFLOCALECOPYCURRENT */ - -/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in - the CoreFoundation framework. */ -/* #undef HAVE_CFPREFERENCESCOPYAPPVALUE */ +/* Define to 1 if you have the `bind_textdomain_codeset' function. */ +/* #undef HAVE_BIND_TEXTDOMAIN_CODESET */ /* Define to 1 if you have the `connect' function. */ /* #undef HAVE_CONNECT */ @@ -73,39 +34,19 @@ /* Define if you have the external 'daylight' variable. */ #define HAVE_DAYLIGHT 1 -/* Define if we are re using DBUS. */ +/* Define if we are using D-Bus. */ /* #undef HAVE_DBUS */ -/* Define if the GNU dcgettext() function is already present or preinstalled. - */ +/* Define to 1 if you have the `dcgettext' function. */ /* #undef HAVE_DCGETTEXT */ -/* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you - don't. */ -/* #undef HAVE_DECL_FEOF_UNLOCKED */ - -/* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if - you don't. */ -/* #undef HAVE_DECL_FGETS_UNLOCKED */ - -/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you - don't. */ -/* #undef HAVE_DECL_GETC_UNLOCKED */ - -/* Define to 1 if you have the declaration of `_snprintf', and to 0 if you - don't. */ -#define HAVE_DECL__SNPRINTF 1 - -/* Define to 1 if you have the declaration of `_snwprintf', and to 0 if you - don't. */ -#define HAVE_DECL__SNWPRINTF 1 +/* Define to 1 if you have the declaration of `tzname', and to 0 if you don't. + */ +/* #undef HAVE_DECL_TZNAME */ /* Define to 1 if you have the <dlfcn.h> header file. */ /* #undef HAVE_DLFCN_H */ -/* Define to 1 if you have the `dlopen' function. */ -/* #undef HAVE_DLOPEN */ - /* whether or not we have dot */ /* #undef HAVE_DOT */ @@ -121,68 +62,28 @@ /* Define to 1 if you have the <fcntl.h> header file. */ #define HAVE_FCNTL_H 1 -/* Define to 1 if you have the `fwprintf' function. */ -#define HAVE_FWPRINTF 1 - /* Define to 1 if you have the getaddrinfo function. */ /* TODO: Use this on new enough versions of Windows */ /* #define HAVE_GETADDRINFO 1 */ -/* Define to 1 if you have the `getcwd' function. */ -#define HAVE_GETCWD 1 - -/* Define to 1 if you have the `getegid' function. */ -/* #define HAVE_GETEGID 1 */ - -/* Define to 1 if you have the `geteuid' function. */ -/* #define HAVE_GETEUID 1 */ - -/* Define to 1 if you have the `getgid' function. */ -/* #define HAVE_GETGID 1 */ - /* Define to 1 if you have the `gethostid' function. */ /* #define HAVE_GETHOSTID 1 */ /* Define to 1 if you have the `getopt_long' function. */ /* #define HAVE_GETOPT_LONG 1 */ -/* Define to 1 if you have the `getpagesize' function. */ -#define HAVE_GETPAGESIZE 1 - /* Define if the GNU gettext() function is already present or preinstalled. */ /* #define HAVE_GETTEXT 1 */ -/* Define to 1 if you have the `getuid' function. */ -/* #define HAVE_GETUID 1 */ - -/* Pidgin always has GLib, but Linphone can be built without it */ -/* #undef HAVE_GLIB */ - /* Define if you have GNUTLS */ /* #define HAVE_GNUTLS 1 */ /* Define to 1 if you have the <gnutls/gnutls.h> header file. */ /* #define HAVE_GNUTLS_GNUTLS_H 1 */ -/* Define if you have the iconv() function. */ -/* #define HAVE_ICONV 1 */ - -/* Defined when we have ilbc codec lib */ -/* #undef HAVE_ILBC */ - -/* Define to 1 if you have the <iLBC_decode.h> header file. */ -/* #undef HAVE_ILBC_DECODE_H */ - -/* Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>. */ -#define HAVE_INTMAX_T 1 - /* Define if <inttypes.h> exists and doesn't clash with <sys/types.h>. */ #define HAVE_INTTYPES_H 1 -/* Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and - declares uintmax_t. */ -#define HAVE_INTTYPES_H_WITH_UINTMAX 1 - /* Define if we have IOKit */ /* #undef HAVE_IOKIT */ @@ -201,15 +102,15 @@ /* Define to 1 if you have the `krb_set_key' function. */ /* #undef HAVE_KRB_SET_KEY */ -/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */ -/* #define HAVE_LANGINFO_CODESET 1 */ - /* Define if your <locale.h> file defines LC_MESSAGES. */ /* #define HAVE_LC_MESSAGES 1 */ /* Define to 1 if you have libgadu. */ #define HAVE_LIBGADU 1 +/* Define if you have NetworkManager */ +/* #undef HAVE_LIBNM */ + /* Define to 1 if you have the `nsl' library (-lnsl). */ /* #define HAVE_LIBNSL 1 */ @@ -219,24 +120,12 @@ /* Define to 1 if you have the `socket' library (-lsocket). */ /* #undef HAVE_LIBSOCKET */ -/* Define to 1 if you have the <limits.h> header file. */ -#define HAVE_LIMITS_H 1 - /* Define to 1 if you have the <locale.h> header file. */ #define HAVE_LOCALE_H 1 -/* Define if you have the 'long double' type. */ -#define HAVE_LONG_DOUBLE 1 - -/* Define if you have the 'long long' type. */ -#define HAVE_LONG_LONG 1 - /* Define to 1 if you have the `lrand48' function. */ /* #define HAVE_LRAND48 1 */ -/* Define to 1 if you have the <machine/soundcard.h> header file. */ -/* #undef HAVE_MACHINE_SOUNDCARD_H */ - /* Define to 1 if you have the <malloc.h> header file. */ #define HAVE_MALLOC_H 1 @@ -249,12 +138,6 @@ /* Define to 1 if you have the <memory.h> header file. */ #define HAVE_MEMORY_H 1 -/* Define to 1 if you have the `mempcpy' function. */ -/* #define HAVE_MEMPCPY 1*/ - -/* Define to 1 if you have a working `mmap' system call. */ -/* #define HAVE_MMAP 1 */ - /* Define to 1 if you have the `mono_jit_init' function. */ /* #undef HAVE_MONO_JIT_INIT */ @@ -264,12 +147,6 @@ /* Define to 1 if you have the <mono/metadata/object.h> header file. */ /* #undef HAVE_MONO_METADATA_OBJECT_H */ -/* Define to 1 if you have the `munmap' function. */ -/* #define HAVE_MUNMAP 1 */ - -/* Define to 1 if you have the <nl_types.h> header file. */ -/* #define HAVE_NL_TYPES_H 1 */ - /* Define to 1 if you have the <nspr.h> header file. */ /* #undef HAVE_NSPR_H */ @@ -297,24 +174,15 @@ /* Define to 1 if you have the `perl_run' function. */ /* #define HAVE_PERL_RUN 1 */ -/* Define if your printf() function supports format strings with positions. */ -#define HAVE_POSIX_PRINTF 1 - /* Define to 1 if you have the <prio.h> header file. */ /* #undef HAVE_PRIO_H */ -/* Define to 1 if you have the `putenv' function. */ -#define HAVE_PUTENV 1 - /* Define to 1 if you have the `random' function. */ /* #define HAVE_RANDOM 1 */ /* Define to 1 if you have the <regex.h> header file. */ /* #define HAVE_REGEX_H 1 */ -/* Define to 1 if you have the `setenv' function. */ -/* #define HAVE_SETENV 1 */ - /* Define to 1 if you have the `setlocale' function. */ #define HAVE_SETLOCALE 1 @@ -333,12 +201,6 @@ /* Define to 1 if you have the `snprintf' function. */ #define HAVE_SNPRINTF 1 -/* Define to 1 if you have the <soundcard.h> header file. */ -/* #undef HAVE_SOUNDCARD_H */ - -/* Define to 1 if you have the <speex.h> header file. */ -/* #undef HAVE_SPEEX_H */ - /* Define if you have SSL */ #define HAVE_SSL 1 @@ -351,25 +213,12 @@ /* Define to 1 if you have the <stdarg.h> header file. */ #define HAVE_STDARG_H 1 -/* Define to 1 if you have the <stddef.h> header file. */ -#define HAVE_STDDEF_H 1 - /* Define to 1 if you have the <stdint.h> header file. */ #define HAVE_STDINT_H 1 -/* Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares - uintmax_t. */ -#define HAVE_STDINT_H_WITH_UINTMAX 1 - /* Define to 1 if you have the <stdlib.h> header file. */ #define HAVE_STDLIB_H 1 -/* Define to 1 if you have the `stpcpy' function. */ -/* #define HAVE_STPCPY 1 */ - -/* Define to 1 if you have the `strcasecmp' function. */ -#define HAVE_STRCASECMP 1 - /* Define to 1 if you have the `strchr' function. */ #define HAVE_STRCHR 1 @@ -394,15 +243,9 @@ /* Define to 1 if you have the `strstr' function. */ #define HAVE_STRSTR 1 -/* Define to 1 if you have the `strtoul' function. */ -#define HAVE_STRTOUL 1 - /* Define to 1 if `tm_zone' is member of `struct tm'. */ /* #define HAVE_STRUCT_TM_TM_ZONE 1 */ -/* Define to 1 if you have the <sys/audio.h> header file. */ -/* #undef HAVE_SYS_AUDIO_H */ - /* Define to 1 if you have the <sys/cdefs.h> header file. */ /* #define HAVE_SYS_CDEFS_H 1 */ @@ -418,15 +261,9 @@ /* Define to 1 if you have the <sys/msgbuf.h> header file. */ /* #undef HAVE_SYS_MSGBUF_H */ -/* Define to 1 if you have the <sys/param.h> header file. */ -/* #define HAVE_SYS_PARAM_H 1 */ - /* Define to 1 if you have the <sys/select.h> header file. */ /* #define HAVE_SYS_SELECT_H 1 */ -/* Define to 1 if you have the <sys/soundcard.h> header file. */ -/* #undef HAVE_SYS_SOUNDCARD_H */ - /* Define to 1 if you have the <sys/stat.h> header file. */ #define HAVE_SYS_STAT_H 1 @@ -464,61 +301,28 @@ `HAVE_STRUCT_TM_TM_ZONE' instead. */ /* #define HAVE_TM_ZONE 1 */ -/* Define to 1 if you have the `tsearch' function. */ -/* #define HAVE_TSEARCH 1 */ - /* Define to 1 if you don't have `tm_zone' but do have the external array `tzname'. */ /* #undef HAVE_TZNAME */ -/* Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>. */ -#define HAVE_UINTMAX_T 1 - /* Define to 1 if you have the <unistd.h> header file. */ #define HAVE_UNISTD_H 1 -/* Define if you have the 'unsigned long long' type. */ -#define HAVE_UNSIGNED_LONG_LONG 1 - /* Define to 1 if you have the `vprintf' function. */ #define HAVE_VPRINTF 1 -/* Compile with Voice/Video support */ -/* #undef HAVE_VV */ - -/* Define if you have the 'wchar_t' type. */ -#define HAVE_WCHAR_T 1 - -/* Define to 1 if you have the `wcslen' function. */ -#define HAVE_WCSLEN 1 - -/* Define if you have the 'wint_t' type. */ -#define HAVE_WINT_T 1 +/* Define to 1 if you have X11 */ +/* #define HAVE_X11 1 */ /* Define to 1 if you have the <X11/SM/SMlib.h> header file. */ /* #define HAVE_X11_SM_SMLIB_H 1 */ -/* Define to 1 if you have the `__argz_count' function. */ -/* #define HAVE___ARGZ_COUNT 1 */ - -/* Define to 1 if you have the `__argz_next' function. */ -/* #define HAVE___ARGZ_NEXT 1 */ - -/* Define to 1 if you have the `__argz_stringify' function. */ -/* #define HAVE___ARGZ_STRINGIFY 1 */ - -/* Define to 1 if you have the `__fsetlocking' function. */ -/* #define HAVE___FSETLOCKING 1 */ - -/* Define as const if the declaration of iconv() needs const. */ -/* #define ICONV_CONST */ - -/* Define if integer division by zero raises signal SIGFPE. */ -/* #define INTDIV0_RAISES_SIGFPE 1 */ - /* Define if external libzephyr should be used. */ /* #undef LIBZEPHYR_EXT */ +/* Define to 1 if you don't have wide-character support. */ +/* #undef NO_WIDECHAR */ + /* Define if old perl is installed. */ /* #undef OLD_PERL */ @@ -540,23 +344,17 @@ /* Define to the version of this package. */ /* #define PACKAGE_VERSION "2.0.0dev" */ -/* Define if <inttypes.h> exists and defines unusable PRI* macros. */ -/* #undef PRI_MACROS_BROKEN */ +/* Define to make assertions fatal (useful for debugging). */ +/* #define PURPLE_FATAL_ASSERTS 1 */ + +/* Define if plugins are enabled. */ +#define PURPLE_PLUGINS 1 /* Define as the return type of signal handlers (`int' or `void'). */ #define RETSIGTYPE void -/* Define as the maximum value of type 'size_t', if the system doesn't define - it. */ -/* #undef SIZE_MAX */ - -/* If using the C implementation of alloca, define if you know the - direction of stack growth for your system; otherwise it will be - automatically deduced at run-time. - STACK_DIRECTION > 0 => grows toward higher addresses - STACK_DIRECTION < 0 => grows toward lower addresses - STACK_DIRECTION = 0 => direction of growth unknown */ -/* #undef STACK_DIRECTION */ +/* The size of `time_t', as computed by sizeof. */ +#define SIZEOF_TIME_T 4 /* Loads static protocol plugin module initialization functions. */ #ifndef STATIC_PROTO_INIT @@ -569,10 +367,10 @@ /* Define to 1 if your <sys/time.h> declares `struct tm'. */ /* #undef TM_IN_SYS_TIME */ -/* Define if we're using libao and libaudiofile for sound playing */ -/* #define USE_AO 1 */ +/* Use GStreamer for playing sounds */ +/* #define USE_GSTREAMER 1 */ -/* do we have gtkspell? */ +/* Define if we're using GtkSpell */ #define USE_GTKSPELL 1 /* Define if we're using XScreenSaver. */ @@ -603,48 +401,14 @@ /* Define for large files, on AIX-style hosts. */ /* #undef _LARGE_FILES */ -/* Defined when alsa support is enabled */ -/* #undef __ALSA_ENABLED__ */ - -/* Jack support */ -/* #undef __JACK_ENABLED__ */ - /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ -/* Define to `__inline__' or `__inline' if that's what the C compiler - calls it, or to nothing if 'inline' is not supported under any name. */ -#ifndef __cplusplus -/* #undef inline */ -#endif - -/* Define to `long' if <sys/types.h> does not define. */ -/* #undef off_t */ - -/* Define as the type of the result of subtracting two pointers, if the system - doesn't define it. */ -/* #undef ptrdiff_t */ - -/* Define to empty if the C compiler doesn't support this keyword. */ -/* #undef signed */ - -/* Define to `unsigned' if <sys/types.h> does not define. */ -/* #undef size_t */ - /* socklen_t size */ -/* #define socklen_t int */ - -/* Define to unsigned long or unsigned long long if <stdint.h> and - <inttypes.h> don't define. */ -/* #undef uintmax_t */ - -#define HAVE_LIBXML 1 +/* #undef socklen_t */ /* * Following are added for Win32 version of Pidgin */ #define HAVE_VSNPRINTF 1 -#define SIZEOF_TIME_T 4 - -#define PIDGIN_NAME "Pidgin"
--- a/configure.ac Wed May 09 01:50:06 2007 +0000 +++ b/configure.ac Wed May 09 01:50:50 2007 +0000 @@ -93,8 +93,6 @@ GNT_LT_VERSION_INFO="gnt_lt_current:gnt_micro_version:gnt_minor_version" AC_SUBST(GNT_LT_VERSION_INFO) -AC_DEFINE(PIDGIN_NAME, "Pidgin", [The user-visible application name]) - AC_PATH_PROG(sedpath, sed) dnl Storing configure arguments @@ -141,6 +139,19 @@ ALL_LINGUAS="af am ar az bg bn bs ca ca@valencia cs da de dz el en_AU en_CA en_GB eo es et eu fa fi fr gl gu he hi hu id it ja ka kn ko ku lt mk my_MM nb ne nl nn pa pl pt_BR pt ps ro ru sk sl sq sr sr@Latn sv ta te th tr uk vi xh zh_CN zh_HK zh_TW" AM_GLIB_GNU_GETTEXT +dnl If we don't have msgfmt, then po/ is going to fail -- ensure that +dnl AM_GLIB_GNU_GETTEXT found it. + +if test x$MSGFMT = xno -o x$GMSGFMT = x +then + AC_ERROR([ + +The msgfmt command is required to build libpurple. If it is installed +on your system, ensure that it is in your path. If it is not, install +GNU gettext to continue. +]) +fi + dnl we don't use autobreak on cygwin!! dnl AC_CYGWIN @@ -1922,6 +1933,7 @@ AC_CHECK_HEADERS(sys/file.h sys/filio.h sys/ioctl.h sys/msgbuf.h) AC_CHECK_HEADERS(sys/select.h sys/uio.h sys/utsname.h sys/wait.h) AC_CHECK_HEADERS(termios.h) +AC_CHECK_HEADERS(sys/sysctl.h sys/socket.h) AC_VAR_TIMEZONE_EXTERNALS AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff,
--- a/doc/finch.1.in Wed May 09 01:50:06 2007 +0000 +++ b/doc/finch.1.in Wed May 09 01:50:50 2007 +0000 @@ -30,7 +30,7 @@ .SH DESCRIPTION .PP \fBfinch\fR is a console-based modular messaging client capable of using -AIM, MSN, Yahoo!, Jabber, ICQ, IRC, SILC, Novell GroupWise, Lotus Sametime, +AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, Novell GroupWise, Lotus Sametime, Zephyr, Gadu-Gadu, and QQ all at once. It has many common features found in other clients, as well as many unique features. Finch is not endorsed by or affiliated with America Online, ICQ, Microsoft, or Yahoo.
--- a/doc/pidgin.1.in Wed May 09 01:50:06 2007 +0000 +++ b/doc/pidgin.1.in Wed May 09 01:50:50 2007 +0000 @@ -28,7 +28,7 @@ .SH DESCRIPTION .PP -Pidgin is a modular messaging client capable of using AIM, MSN, Yahoo!, Jabber, +Pidgin is a modular messaging client capable of using AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, SIP/SIMPLE Novell GroupWise, Lotus Sametime, Bonjour, Zephyr, Gadu-Gadu, and QQ all at once. It has many common features found in other clients, as well as many unique features. Pidgin is not endorsed by or
--- a/finch/finch.c Wed May 09 01:50:06 2007 +0000 +++ b/finch/finch.c Wed May 09 01:50:50 2007 +0000 @@ -274,7 +274,9 @@ } /* show version message */ if (opt_version) { - printf("Finch %s\n", VERSION); + /* Translators may want to transliterate the name. + It is not to be translated. */ + printf("%s %s\n", _("Finch"), VERSION); return 0; } @@ -303,7 +305,7 @@ char *text = g_strdup_printf(_( "%s encountered errors migrating your settings " "from %s to %s. Please investigate and complete the " - "migration by hand. Please report this error at http://developer.pidgin.im"), "Finch", + "migration by hand. Please report this error at http://developer.pidgin.im"), _("Finch"), old, purple_user_dir()); g_free(old);
--- a/finch/gntblist.c Wed May 09 01:50:06 2007 +0000 +++ b/finch/gntblist.c Wed May 09 01:50:50 2007 +0000 @@ -280,6 +280,8 @@ error = _("You must provide a group."); else if (!account) error = _("You must select an account."); + else if (!purple_account_is_connected(account)) + error = _("The selected account is not online."); if (error) { @@ -819,6 +821,13 @@ static void finch_blist_get_buddy_info_cb(PurpleBuddy *buddy, PurpleBlistNode *selected) { + /* Add a userinfo with a "Retrieving information", which will later be updated + * when the server finally returns the information. */ + PurpleNotifyUserInfo *info = purple_notify_user_info_new(); + purple_notify_user_info_add_pair(info, _("Information"), _("Retrieving...")); + purple_notify_userinfo(buddy->account->gc, purple_buddy_get_name(buddy), info, NULL, NULL); + purple_notify_user_info_destroy(info); + serv_get_info(buddy->account->gc, purple_buddy_get_name(buddy)); } @@ -2168,7 +2177,7 @@ gnt_menu_add_item(GNT_MENU(sub), item); gnt_menuitem_set_callback(GNT_MENU_ITEM(item), send_im_select, NULL); - item = gnt_menuitem_check_new(_("Toggle offline buddies")); + item = gnt_menuitem_check_new(_("Show offline buddies")); gnt_menuitem_check_set_checked(GNT_MENU_ITEM_CHECK(item), purple_prefs_get_bool(PREF_ROOT "/showoffline")); gnt_menu_add_item(GNT_MENU(sub), item);
--- a/finch/gntconv.c Wed May 09 01:50:06 2007 +0000 +++ b/finch/gntconv.c Wed May 09 01:50:50 2007 +0000 @@ -789,7 +789,7 @@ PurpleCmdStatus status; if (!g_ascii_strcasecmp(args[0], "version")) { - tmp = g_strdup_printf("me is using %s.", VERSION); + tmp = g_strdup_printf("me is using Finch v%s.", VERSION); markup = g_markup_escape_text(tmp, -1); status = purple_cmd_do_command(conv, tmp, markup, error);
--- a/finch/gntnotify.c Wed May 09 01:50:06 2007 +0000 +++ b/finch/gntnotify.c Wed May 09 01:50:50 2007 +0000 @@ -27,6 +27,7 @@ #include <gntbutton.h> #include <gntlabel.h> #include <gnttree.h> +#include <gntutils.h> #include <util.h> @@ -72,11 +73,26 @@ if (primary) gnt_box_add_widget(GNT_BOX(window), gnt_label_new_with_format(primary, pf)); - if (secondary) - gnt_box_add_widget(GNT_BOX(window), - gnt_label_new_with_format(secondary, sf)); button = gnt_button_new(_("OK")); + + if (secondary) { + GntWidget *msg; + if (type == PURPLE_NOTIFY_FORMATTED) { + int width = -1, height = -1; + msg = gnt_text_view_new(); + gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(msg), secondary, sf); + gnt_text_view_scroll(GNT_TEXT_VIEW(msg), 0); + gnt_text_view_attach_scroll_widget(GNT_TEXT_VIEW(msg), button); + gnt_util_get_text_bound(secondary, &width, &height); + gnt_widget_set_size(msg, width + 3, height + 1); + } else { + msg = gnt_label_new_with_format(secondary, sf); + } + gnt_box_add_widget(GNT_BOX(window), msg); + g_object_set_data(G_OBJECT(window), "info-widget", msg); + } + gnt_box_add_widget(GNT_BOX(window), button); g_signal_connect_swapped(G_OBJECT(button), "activate", G_CALLBACK(gnt_widget_destroy), window); @@ -219,19 +235,63 @@ url ? &url : NULL); } +/** User information. **/ +static GHashTable *userinfo; + +static char * +userinfo_hash(PurpleAccount *account, const char *who) +{ + char key[256]; + snprintf(key, sizeof(key), "%s - %s", purple_account_get_username(account), purple_normalize(account, who)); + return g_utf8_strup(key, -1); +} + +static void +remove_userinfo(GntWidget *widget, gpointer key) +{ + g_hash_table_remove(userinfo, key); +} + static void * finch_notify_userinfo(PurpleConnection *gc, const char *who, PurpleNotifyUserInfo *user_info) { - /* Xeroxed from gtknotify.c */ char *primary; char *info; void *ui_handle; - - primary = g_strdup_printf(_("Info for %s"), who); + char *key = userinfo_hash(purple_connection_get_account(gc), who); + info = purple_notify_user_info_get_text_with_newline(user_info, "<BR>"); - ui_handle = finch_notify_formatted(_("Buddy Information"), primary, NULL, info); + + ui_handle = g_hash_table_lookup(userinfo, key); + if (ui_handle != NULL) { + GntTextView *msg = GNT_TEXT_VIEW(g_object_get_data(G_OBJECT(ui_handle), "info-widget")); + char *strip = purple_markup_strip_html(info); + int tvw, tvh, width, height, ntvw, ntvh; + + gnt_widget_get_size(GNT_WIDGET(ui_handle), &width, &height); + gnt_widget_get_size(GNT_WIDGET(msg), &tvw, &tvh); + + /* Ideally, I would replace the information in "info". But replacing tagged text is a + * bit nasty right now. So clear the view and add the new stuff instead. */ + gnt_text_view_clear(msg); + gnt_text_view_append_text_with_flags(msg, strip, GNT_TEXT_FLAG_NORMAL); + gnt_text_view_scroll(msg, 0); + gnt_util_get_text_bound(strip, &ntvw, &ntvh); + ntvw += 3; + ntvh++; + + gnt_screen_resize_widget(GNT_WIDGET(ui_handle), width + (ntvw - tvw), height + (ntvh - tvh)); + g_free(strip); + g_free(key); + } else { + primary = g_strdup_printf(_("Info for %s"), who); + ui_handle = finch_notify_formatted(_("Buddy Information"), primary, NULL, info); + g_hash_table_insert(userinfo, key, ui_handle); + g_free(primary); + g_signal_connect(G_OBJECT(ui_handle), "destroy", G_CALLBACK(remove_userinfo), key); + } + g_free(info); - g_free(primary); return ui_handle; } @@ -365,10 +425,12 @@ void finch_notify_init() { + userinfo = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); } void finch_notify_uninit() { + g_hash_table_destroy(userinfo); }
--- a/finch/gntplugin.c Wed May 09 01:50:06 2007 +0000 +++ b/finch/gntplugin.c Wed May 09 01:50:50 2007 +0000 @@ -105,6 +105,20 @@ { PurplePlugin *plugin = current; char *text; + GList *list = NULL, *iter = NULL; + + /* If the selected plugin was unseen before, mark it as seen. But save the list + * only when the plugin list is closed. So if the user enables a plugin, and it + * crashes, it won't get marked as seen so the user can fix the bug and still + * quickly find the plugin in the list. + * I probably mean 'plugin developers' by 'users' here. */ + list = g_object_get_data(G_OBJECT(widget), "seen-list"); + if (list) + iter = g_list_find_custom(list, plugin->path, (GCompareFunc)strcmp); + if (!iter) { + list = g_list_prepend(list, g_strdup(plugin->path)); + g_object_set_data(G_OBJECT(widget), "seen-list", list); + } /* XXX: Use formatting and stuff */ gnt_text_view_clear(GNT_TEXT_VIEW(plugins.aboot)); @@ -121,6 +135,11 @@ static void reset_plugin_window(GntWidget *window, gpointer null) { + GList *list = g_object_get_data(G_OBJECT(plugins.tree), "seen-list"); + purple_prefs_set_path_list("/finch/plugins/seen", list); + g_list_foreach(list, (GFunc)g_free, NULL); + g_list_free(list); + plugins.window = NULL; plugins.tree = NULL; plugins.aboot = NULL; @@ -214,6 +233,8 @@ { GntWidget *window, *tree, *box, *aboot, *button; GList *iter; + GList *seen; + if (plugins.window) return; @@ -244,6 +265,7 @@ gnt_widget_set_size(aboot, 40, 20); gnt_box_add_widget(GNT_BOX(box), aboot); + seen = purple_prefs_get_path_list("/finch/plugins/seen"); for (iter = purple_plugins_get_all(); iter; iter = iter->next) { PurplePlugin *plug = iter->data; @@ -256,10 +278,13 @@ gnt_tree_add_choice(GNT_TREE(tree), plug, gnt_tree_create_row(GNT_TREE(tree), plug->info->name), NULL, NULL); gnt_tree_set_choice(GNT_TREE(tree), plug, purple_plugin_is_loaded(plug)); + if (!g_list_find_custom(seen, plug->path, (GCompareFunc)strcmp)) + gnt_tree_set_row_flags(GNT_TREE(tree), plug, GNT_TEXT_FLAG_BOLD); } gnt_tree_set_col_width(GNT_TREE(tree), 0, 30); g_signal_connect(G_OBJECT(tree), "toggled", G_CALLBACK(plugin_toggled_cb), NULL); g_signal_connect(G_OBJECT(tree), "selection_changed", G_CALLBACK(selection_changed), NULL); + g_object_set_data(G_OBJECT(tree), "seen-list", seen); box = gnt_hbox_new(FALSE); gnt_box_add_widget(GNT_BOX(window), box);
--- a/finch/gntprefs.c Wed May 09 01:50:06 2007 +0000 +++ b/finch/gntprefs.c Wed May 09 01:50:50 2007 +0000 @@ -39,6 +39,7 @@ purple_prefs_add_none("/finch/plugins"); purple_prefs_add_path_list("/finch/plugins/loaded", NULL); + purple_prefs_add_path_list("/finch/plugins/seen", NULL); purple_prefs_add_none("/finch/conversations"); purple_prefs_add_bool("/finch/conversations/timestamps", TRUE);
--- a/finch/gntrequest.c Wed May 09 01:50:06 2007 +0000 +++ b/finch/gntrequest.c Wed May 09 01:50:50 2007 +0000 @@ -497,7 +497,9 @@ field->ui_data = combo; all = purple_request_field_account_get_show_all(field); - def = purple_request_field_account_get_default_value(field); + def = purple_request_field_account_get_value(field); + if (!def) + def = purple_request_field_account_get_default_value(field); if (all) list = purple_accounts_get_all();
--- a/finch/libgnt/wms/Makefile.am Wed May 09 01:50:06 2007 +0000 +++ b/finch/libgnt/wms/Makefile.am Wed May 09 01:50:50 2007 +0000 @@ -15,7 +15,6 @@ AM_CPPFLAGS = \ -DDATADIR=\"$(datadir)\" \ - -DVERSION=\"$(VERSION)\" \ -I$(top_srcdir)/libpurple \ -I$(top_srcdir)/finch \ -I$(top_srcdir)/finch/libgnt \
--- a/finch/plugins/Makefile.am Wed May 09 01:50:06 2007 +0000 +++ b/finch/plugins/Makefile.am Wed May 09 01:50:50 2007 +0000 @@ -32,7 +32,6 @@ AM_CPPFLAGS = \ -DDATADIR=\"$(datadir)\" \ - -DVERSION=\"$(VERSION)\" \ -I$(top_builddir)/libpurple \ -I$(top_srcdir)/libpurple \ -I$(top_srcdir) \
--- a/libpurple/internal.h Wed May 09 01:50:06 2007 +0000 +++ b/libpurple/internal.h Wed May 09 01:50:50 2007 +0000 @@ -183,6 +183,7 @@ #define purple_strlcat(dest, src) g_strlcat(dest, src, sizeof(dest)) #define PURPLE_WEBSITE "http://pidgin.im/" +#define PURPLE_DEVEL_WEBSITE "http://developer.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. */
--- a/libpurple/log.c Wed May 09 01:50:06 2007 +0000 +++ b/libpurple/log.c Wed May 09 01:50:50 2007 +0000 @@ -778,7 +778,7 @@ if (tz_off != PURPLE_NO_TZ_OFF) tm.tm_gmtoff = tz_off - tm.tm_gmtoff; - if (rest == NULL || (end = strchr(rest, '.')) == NULL || strchr(rest, ' ') != NULL) + if (stamp == 0 || rest == NULL || (end = strchr(rest, '.')) == NULL || strchr(rest, ' ') != NULL) { log = purple_log_new(type, name, account, NULL, stamp, NULL); } @@ -792,7 +792,7 @@ #else time_t stamp = purple_str_to_time(filename, FALSE, &tm, NULL, NULL); - log = purple_log_new(type, name, account, NULL, stamp, &tm); + log = purple_log_new(type, name, account, NULL, stamp, (stamp != 0) ? &tm : NULL); #endif log->logger = logger;
--- a/libpurple/nat-pmp.c Wed May 09 01:50:06 2007 +0000 +++ b/libpurple/nat-pmp.c Wed May 09 01:50:50 2007 +0000 @@ -29,64 +29,58 @@ */ #include "nat-pmp.h" +#include "internal.h" #include "debug.h" #include "signals.h" #include "network.h" -#include <sys/types.h> -#ifndef _WIN32 -#include <arpa/inet.h> -#include <netinet/in.h> -#include <sys/socket.h> +#ifdef HAVE_SYS_SYSCTL_H #include <sys/sysctl.h> - -#include <net/if.h> -#include <net/route.h> - -#include <netdb.h> -#include <err.h> #endif -#include <stdio.h> -#include <stdlib.h> -#include <string.h> +#ifdef HAVE_SYS_SOCKET_H +#include <sys/socket.h> +#endif -#include <errno.h> +/* We will need sysctl() and NET_RT_DUMP, both of which are not present + * on all platforms, to continue. */ +#if defined(HAVE_SYS_SYSCTL_H) && defined(NET_RT_DUMP) -#ifdef NET_RT_DUMP +#include <sys/types.h> +#include <net/route.h> #define PMP_DEBUG 1 typedef struct { - uint8_t version; - uint8_t opcode; + guint8 version; + guint8 opcode; } PurplePmpIpRequest; typedef struct { - uint8_t version; - uint8_t opcode; /* 128 + n */ - uint16_t resultcode; - uint32_t epoch; - uint32_t address; + guint8 version; + guint8 opcode; /* 128 + n */ + guint16 resultcode; + guint32 epoch; + guint32 address; } PurplePmpIpResponse; typedef struct { - uint8_t version; - uint8_t opcode; + guint8 version; + guint8 opcode; char reserved[2]; - uint16_t privateport; - uint16_t publicport; - uint32_t lifetime; + guint16 privateport; + guint16 publicport; + guint32 lifetime; } PurplePmpMapRequest; struct _PurplePmpMapResponse { - uint8_t version; - uint8_t opcode; - uint16_t resultcode; - uint32_t epoch; - uint16_t privateport; - uint16_t publicport; - uint32_t lifetime; + guint8 version; + guint8 opcode; + guint16 resultcode; + guint32 epoch; + guint16 privateport; + guint16 publicport; + guint32 lifetime; }; typedef struct _PurplePmpMapResponse PurplePmpMapResponse; @@ -549,4 +543,4 @@ { } -#endif /* #ifndef NET_RT_DUMP */ +#endif /* #if !(defined(HAVE_SYS_SYCTL_H) && defined(NET_RT_DUMP)) */
--- a/libpurple/nat-pmp.h Wed May 09 01:50:06 2007 +0000 +++ b/libpurple/nat-pmp.h Wed May 09 01:50:50 2007 +0000 @@ -31,7 +31,6 @@ #ifndef _PURPLE_NAT_PMP_H #define _PURPLE_NAT_PMP_H -#include <stdint.h> #include <glib.h> #define PURPLE_PMP_LIFETIME 3600 /* 3600 seconds */
--- a/libpurple/plugins/Makefile.am Wed May 09 01:50:06 2007 +0000 +++ b/libpurple/plugins/Makefile.am Wed May 09 01:50:50 2007 +0000 @@ -127,7 +127,6 @@ AM_CPPFLAGS = \ -DDATADIR=\"$(datadir)\" \ - -DVERSION=\"$(VERSION)\" \ -I$(top_srcdir)/libpurple \ -I$(top_builddir)/libpurple \ $(DEBUG_CFLAGS) \
--- a/libpurple/plugins/mono/loader/Makefile.am Wed May 09 01:50:06 2007 +0000 +++ b/libpurple/plugins/mono/loader/Makefile.am Wed May 09 01:50:50 2007 +0000 @@ -17,7 +17,6 @@ mono_la_LIBADD = $(MONO_LIBS) AM_CPPFLAGS = \ - -DVERSION=\"$(VERSION)\" \ -I$(top_srcdir) \ -I$(top_srcdir)/libpurple \ $(DEBUG_CFLAGS) \
--- a/libpurple/plugins/perl/Makefile.am Wed May 09 01:50:06 2007 +0000 +++ b/libpurple/plugins/perl/Makefile.am Wed May 09 01:50:50 2007 +0000 @@ -152,7 +152,6 @@ fi AM_CPPFLAGS = \ - -DVERSION=\"$(VERSION)\" \ -I$(top_srcdir) \ -I$(top_srcdir)/libpurple \ -I$(top_builddir)/libpurple \
--- a/libpurple/plugins/psychic.c Wed May 09 01:50:06 2007 +0000 +++ b/libpurple/plugins/psychic.c Wed May 09 01:50:50 2007 +0000 @@ -21,7 +21,7 @@ #define PLUGIN_SUMMARY N_("Psychic mode for incoming conversation") #define PLUGIN_DESC N_("Causes conversation windows to appear as other" \ " users begin to message you. This works for" \ - " AIM, ICQ, Jabber, Sametime, and Yahoo!") + " AIM, ICQ, XMPP, Sametime, and Yahoo!") #define PLUGIN_AUTHOR "Christopher O'Brien <siege@preoccupied.net>"
--- a/libpurple/plugins/tcl/Makefile.am Wed May 09 01:50:06 2007 +0000 +++ b/libpurple/plugins/tcl/Makefile.am Wed May 09 01:50:50 2007 +0000 @@ -12,7 +12,6 @@ EXTRA_DIST = signal-test.tcl Makefile.mingw AM_CPPFLAGS = \ - -DVERSION=\"$(VERSION)\" \ -I$(top_srcdir) \ -I$(top_srcdir)/libpurple \ -I$(top_builddir)/libpurple \
--- a/libpurple/prefs.c Wed May 09 01:50:06 2007 +0000 +++ b/libpurple/prefs.c Wed May 09 01:50:50 2007 +0000 @@ -937,7 +937,7 @@ if(pref->type != PURPLE_PREF_PATH_LIST) { purple_debug_error("prefs", - "purple_prefs_set_path_list: %s not a string list pref\n", + "purple_prefs_set_path_list: %s not a path list pref\n", name); return; }
--- a/libpurple/protocols/bonjour/bonjour.c Wed May 09 01:50:06 2007 +0000 +++ b/libpurple/protocols/bonjour/bonjour.c Wed May 09 01:50:50 2007 +0000 @@ -602,7 +602,7 @@ option = purple_account_option_string_new(_("AIM Account"), "AIM", ""); prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); - option = purple_account_option_string_new(_("Jabber Account"), "jid", ""); + option = purple_account_option_string_new(_("XMPP Account"), "jid", ""); prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); my_protocol = plugin;
--- a/libpurple/protocols/irc/Makefile.am Wed May 09 01:50:06 2007 +0000 +++ b/libpurple/protocols/irc/Makefile.am Wed May 09 01:50:50 2007 +0000 @@ -1,4 +1,4 @@ -EXTRA_DIST = PROTOCOL Makefile.mingw +EXTRA_DIST = Makefile.mingw pkgdir = $(libdir)/purple-$(PURPLE_MAJOR_VERSION)
--- a/libpurple/protocols/irc/irc.h Wed May 09 01:50:06 2007 +0000 +++ b/libpurple/protocols/irc/irc.h Wed May 09 01:50:50 2007 +0000 @@ -142,8 +142,8 @@ void irc_msg_ping(struct irc_conn *irc, const char *name, const char *from, char **args); void irc_msg_pong(struct irc_conn *irc, const char *name, const char *from, char **args); void irc_msg_privmsg(struct irc_conn *irc, const char *name, const char *from, char **args); +void irc_msg_quit(struct irc_conn *irc, const char *name, const char *from, char **args); void irc_msg_regonly(struct irc_conn *irc, const char *name, const char *from, char **args); -void irc_msg_quit(struct irc_conn *irc, const char *name, const char *from, char **args); void irc_msg_time(struct irc_conn *irc, const char *name, const char *from, char **args); void irc_msg_topic(struct irc_conn *irc, const char *name, const char *from, char **args); void irc_msg_unavailable(struct irc_conn *irc, const char *name, const char *from, char **args);
--- a/libpurple/protocols/irc/msgs.c Wed May 09 01:50:06 2007 +0000 +++ b/libpurple/protocols/irc/msgs.c Wed May 09 01:50:50 2007 +0000 @@ -1079,7 +1079,7 @@ if (!args || !args[1] || !args[2] || !gc) return; - msg = g_strdup_printf(_("Cannot join %s:"), args[1]); + msg = g_strdup_printf(_("Cannot join %s: Registration is required."), args[1]); purple_notify_error(gc, _("Cannot join channel"), msg, args[2]); g_free(msg); }
--- a/libpurple/protocols/irc/parse.c Wed May 09 01:50:06 2007 +0000 +++ b/libpurple/protocols/irc/parse.c Wed May 09 01:50:50 2007 +0000 @@ -91,6 +91,7 @@ { "442", "nc:", irc_msg_notinchan }, /* Not in channel */ { "473", "nc:", irc_msg_inviteonly }, /* Tried to join invite-only */ { "474", "nc:", irc_msg_banned }, /* Banned from channel */ + { "477", "nc:", irc_msg_regonly }, /* Registration Required */ { "478", "nct:", irc_msg_banfull }, /* Banlist is full */ { "482", "nc:", irc_msg_notop }, /* Need to be op to do that */ { "501", "n:", irc_msg_badmode }, /* Unknown mode flag */
--- a/libpurple/protocols/jabber/buddy.c Wed May 09 01:50:06 2007 +0000 +++ b/libpurple/protocols/jabber/buddy.c Wed May 09 01:50:50 2007 +0000 @@ -575,8 +575,8 @@ if(x_vc_data != NULL) xmlnode_free(x_vc_data); - purple_request_fields(gc, _("Edit Jabber vCard"), - _("Edit Jabber vCard"), + purple_request_fields(gc, _("Edit XMPP vCard"), + _("Edit XMPP vCard"), _("All items below are optional. Enter only the " "information with which you feel comfortable."), fields, @@ -1729,7 +1729,7 @@ if(!instructions) { instructions = g_strdup(_("Fill in one or more fields to search " - "for any matching Jabber users.")); + "for any matching XMPP users.")); } if(xmlnode_get_child(query, "first")) { @@ -1757,8 +1757,8 @@ usi->js = js; usi->directory_server = g_strdup(from); - purple_request_fields(js->gc, _("Search for Jabber users"), - _("Search for Jabber users"), instructions, fields, + purple_request_fields(js->gc, _("Search for XMPP users"), + _("Search for XMPP users"), instructions, fields, _("Search"), G_CALLBACK(user_search_cb), _("Cancel"), G_CALLBACK(user_search_cancel_cb), NULL, NULL, NULL, @@ -1793,7 +1793,7 @@ purple_request_input(gc, _("Enter a User Directory"), _("Enter a User Directory"), _("Select a user directory to search"), - js->user_directories ? js->user_directories->data : "users.jabber.org", + js->user_directories ? js->user_directories->data : NULL, FALSE, FALSE, NULL, _("Search Directory"), PURPLE_CALLBACK(jabber_user_search_ok), _("Cancel"), NULL,
--- a/libpurple/protocols/jabber/chat.c Wed May 09 01:50:06 2007 +0000 +++ b/libpurple/protocols/jabber/chat.c Wed May 09 01:50:50 2007 +0000 @@ -75,8 +75,6 @@ if (js->chat_servers) g_hash_table_insert(defaults, "server", g_strdup(js->chat_servers->data)); - else - g_hash_table_insert(defaults, "server", g_strdup("conference.jabber.org")); if (chat_name != NULL) { JabberID *jid = jabber_id_new(chat_name); @@ -782,7 +780,7 @@ purple_request_input(gc, _("Enter a Conference Server"), _("Enter a Conference Server"), _("Select a conference server to query"), - js->chat_servers ? js->chat_servers->data : "conference.jabber.org", + js->chat_servers ? js->chat_servers->data : NULL, FALSE, FALSE, NULL, _("Find Rooms"), PURPLE_CALLBACK(roomlist_ok_cb), _("Cancel"), PURPLE_CALLBACK(roomlist_cancel_cb),
--- a/libpurple/protocols/jabber/google.c Wed May 09 01:50:06 2007 +0000 +++ b/libpurple/protocols/jabber/google.c Wed May 09 01:50:50 2007 +0000 @@ -398,7 +398,7 @@ *(p+1) == '<')) { bold_count++; in_bold = FALSE; - } else if (preceding_space && !in_bold) { + } else if (preceding_space && !in_bold && !g_unichar_isspace(*(p+1))) { bold_count++; in_bold = TRUE; } @@ -409,7 +409,7 @@ *(p+1) == '<')) { italic_count++; in_italic = FALSE; - } else if (preceding_space && !in_italic) { + } else if (preceding_space && !in_italic && !g_unichar_isspace(*(p+1))) { italic_count++; in_italic = TRUE; } @@ -445,7 +445,7 @@ str = g_string_append(str, "</b>"); in_bold = FALSE; bold_count--; - } else if (preceding_space && bold_count > 1) { + } else if (preceding_space && bold_count > 1 && !g_unichar_isspace(*(p+1))) { str = g_string_append(str, "<b>"); bold_count--; in_bold = TRUE; @@ -459,7 +459,7 @@ str = g_string_append(str, "</i>"); italic_count--; in_italic = FALSE; - } else if (preceding_space && italic_count > 1) { + } else if (preceding_space && italic_count > 1 && !g_unichar_isspace(*(p+1))) { str = g_string_append(str, "<i>"); italic_count--; in_italic = TRUE;
--- a/libpurple/protocols/jabber/jabber.c Wed May 09 01:50:06 2007 +0000 +++ b/libpurple/protocols/jabber/jabber.c Wed May 09 01:50:50 2007 +0000 @@ -556,16 +556,20 @@ g_free, (GDestroyNotify)jabber_buddy_free); js->chats = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify)jabber_chat_free); - js->chat_servers = g_list_append(NULL, g_strdup("conference.jabber.org")); js->user = jabber_id_new(purple_account_get_username(account)); js->next_id = g_random_int(); js->write_buffer = purple_circ_buffer_new(512); if(!js->user) { - purple_connection_error(gc, _("Invalid Jabber ID")); + purple_connection_error(gc, _("Invalid XMPP ID")); return; } - + + if (!js->user->domain || *(js->user->domain) == '\0') { + purple_connection_error(gc, _("Invalid XMPP ID. Domain must be set.")); + return; + } + if(!js->user->resource) { char *me; js->user->resource = g_strdup("Home"); @@ -868,8 +872,8 @@ instructions = g_strdup(_("Please fill out the information below " "to register your new account.")); - purple_request_fields(js->gc, _("Register New Jabber Account"), - _("Register New Jabber Account"), instructions, fields, + purple_request_fields(js->gc, _("Register New XMPP Account"), + _("Register New XMPP Account"), instructions, fields, _("Register"), G_CALLBACK(jabber_register_cb), _("Cancel"), G_CALLBACK(jabber_register_cancel_cb), purple_connection_get_account(js->gc), NULL, NULL, @@ -907,7 +911,7 @@ js->next_id = g_random_int(); if(!js->user) { - purple_connection_error(gc, _("Invalid Jabber ID")); + purple_connection_error(gc, _("Invalid XMPP ID")); return; } @@ -1374,8 +1378,8 @@ purple_request_field_string_set_masked(field, TRUE); purple_request_field_group_add_field(group, field); - purple_request_fields(js->gc, _("Change Jabber Password"), - _("Change Jabber Password"), _("Please enter your new password"), + purple_request_fields(js->gc, _("Change XMPP Password"), + _("Change XMPP Password"), _("Please enter your new password"), fields, _("OK"), G_CALLBACK(jabber_password_change_cb), _("Cancel"), NULL, purple_connection_get_account(gc), NULL, NULL, @@ -1489,7 +1493,7 @@ } else if(xmlnode_get_child(error, "item-not-found")) { text = _("Item Not Found"); } else if(xmlnode_get_child(error, "jid-malformed")) { - text = _("Malformed Jabber ID"); + text = _("Malformed XMPP ID"); } else if(xmlnode_get_child(error, "not-acceptable")) { text = _("Not Acceptable"); } else if(xmlnode_get_child(error, "not-allowed")) {
--- a/libpurple/protocols/jabber/libxmpp.c Wed May 09 01:50:06 2007 +0000 +++ b/libpurple/protocols/jabber/libxmpp.c Wed May 09 01:50:50 2007 +0000 @@ -163,9 +163,9 @@ "XMPP", /**< name */ VERSION, /**< version */ /** summary */ - N_("Jabber Protocol Plugin"), + N_("XMPP Protocol Plugin"), /** description */ - N_("Jabber Protocol Plugin"), + N_("XMPP Protocol Plugin"), NULL, /**< author */ PURPLE_WEBSITE, /**< homepage */ @@ -191,7 +191,8 @@ PurpleAccountUserSplit *split; PurpleAccountOption *option; - split = purple_account_user_split_new(_("Server"), "jabber.org", '@'); + /* Translators: 'domain' is used here in the context of Internet domains, e.g. pidgin.im */ + split = purple_account_user_split_new(_("Domain"), NULL, '@'); prpl_info.user_splits = g_list_append(prpl_info.user_splits, split); split = purple_account_user_split_new(_("Resource"), "Home", '/');
--- a/libpurple/protocols/jabber/message.c Wed May 09 01:50:06 2007 +0000 +++ b/libpurple/protocols/jabber/message.c Wed May 09 01:50:50 2007 +0000 @@ -267,7 +267,7 @@ buf = g_strdup_printf(_("Message delivery to %s failed: %s"), jm->from, jm->error ? jm->error : ""); - purple_notify_formatted(jm->js->gc, _("Jabber Message Error"), _("Jabber Message Error"), buf, + purple_notify_formatted(jm->js->gc, _("XMPP Message Error"), _("XMPP Message Error"), buf, jm->xhtml ? jm->xhtml : jm->body, NULL, NULL); g_free(buf);
--- a/libpurple/protocols/oscar/oscar.c Wed May 09 01:50:06 2007 +0000 +++ b/libpurple/protocols/oscar/oscar.c Wed May 09 01:50:50 2007 +0000 @@ -6463,15 +6463,18 @@ gboolean oscar_offline_message(const PurpleBuddy *buddy) { - OscarData *od; + OscarData *od = NULL; PurpleAccount *account; - PurpleConnection *gc; + PurpleConnection *gc = NULL; account = purple_buddy_get_account(buddy); - gc = purple_account_get_connection(account); - od = (OscarData *)gc->proto_data; - - return (od->icq && aim_sn_is_icq(purple_account_get_username(account))); + if (account != NULL) { + gc = purple_account_get_connection(account); + if (gc != NULL) + od = (OscarData *)gc->proto_data; + } + + return (od != NULL && od->icq && aim_sn_is_icq(purple_account_get_username(account))); } /* TODO: Find somewhere to put this instead of including it in a bunch of places.
--- a/libpurple/protocols/qq/Makefile.am Wed May 09 01:50:06 2007 +0000 +++ b/libpurple/protocols/qq/Makefile.am Wed May 09 01:50:50 2007 +0000 @@ -94,7 +94,6 @@ AM_CPPFLAGS = \ -I$(top_srcdir)/libpurple \ -I$(top_builddir)/libpurple \ - -DVERSION=\"$(VERSION)\" \ -DQQ_BUDDY_ICON_DIR=\"$(datadir)/pixmaps/purple/buddy_icons/qq\" \ $(DEBUG_CFLAGS) \ $(GLIB_CFLAGS)
--- a/libpurple/prpl.h Wed May 09 01:50:06 2007 +0000 +++ b/libpurple/prpl.h Wed May 09 01:50:50 2007 +0000 @@ -99,7 +99,7 @@ /** * Use a unique name, not an alias, for chat rooms. * - * Jabber lets you choose what name you want for chat. + * XMPP lets you choose what name you want for chat. * So it shouldn't be pulling the alias for when you're in chat; * it gets annoying. */ @@ -108,7 +108,7 @@ /** * Chat rooms have topics. * - * IRC and Jabber support this. + * IRC and XMPP support this. */ OPT_PROTO_CHAT_TOPIC = 0x00000008, @@ -145,7 +145,7 @@ /** * Allows font size to be specified in sane point size * - * Probably just Jabber and Y!M + * Probably just XMPP and Y!M */ OPT_PROTO_USE_POINTSIZE = 0x00000100,
--- a/libpurple/util.c Wed May 09 01:50:06 2007 +0000 +++ b/libpurple/util.c Wed May 09 01:50:50 2007 +0000 @@ -1739,6 +1739,7 @@ else if (strncasecmp(str2 + i, "<p>", 3) == 0 || strncasecmp(str2 + i, "<tr", 3) == 0 || strncasecmp(str2 + i, "<br", 3) == 0 + || strncasecmp(str2 + i, "<hr", 3) == 0 || strncasecmp(str2 + i, "<li", 3) == 0 || strncasecmp(str2 + i, "<div", 4) == 0 || strncasecmp(str2 + i, "</table>", 8) == 0) @@ -2529,11 +2530,7 @@ if((tmpdir = (gchar*)g_get_tmp_dir()) != NULL) { if((*fpath = g_strdup_printf("%s" G_DIR_SEPARATOR_S "%s", tmpdir, purple_mkstemp_templ)) != NULL) { -#ifdef _WIN32 fd = g_mkstemp(*fpath); -#else - fd = mkstemp(*fpath); -#endif if(fd == -1) { purple_debug(PURPLE_DEBUG_ERROR, "purple_mkstemp", "Couldn't make \"%s\", error: %d\n",
--- a/pidgin.apspec.in Wed May 09 01:50:06 2007 +0000 +++ b/pidgin.apspec.in Wed May 09 01:50:50 2007 +0000 @@ -14,7 +14,7 @@ [Description] Pidgin allows you to talk to anyone using a variety of messaging protocols, -including AIM (Oscar and TOC), ICQ, IRC, Yahoo!, MSN Messenger, Jabber, +including AIM (Oscar and TOC), ICQ, IRC, Yahoo!, MSN Messenger, XMPP, Gadu-Gadu, and Zephyr. These protocols are implemented using a modular, easy to use design. To use a protocol, just add an account using the account editor.
--- a/pidgin.spec.in Wed May 09 01:50:06 2007 +0000 +++ b/pidgin.spec.in Wed May 09 01:50:50 2007 +0000 @@ -132,7 +132,7 @@ %description Pidgin allows you to talk to anyone using a variety of messaging -protocols including AIM, MSN, Yahoo!, Jabber, Bonjour, Gadu-Gadu, +protocols including AIM, MSN, Yahoo!, XMPP, Bonjour, Gadu-Gadu, ICQ, IRC, Novell Groupwise, QQ, Lotus Sametime, SILC, Simple and Zephyr. These protocols are implemented using a modular, easy to use design. To use a protocol, just add an account using the @@ -154,7 +154,7 @@ and Finch. libpurple supports a variety of messaging protocols including AIM, MSN, -Yahoo!, Jabber, Bonjour, Gadu-Gadu, ICQ, IRC, Novell Groupwise, QQ, +Yahoo!, XMPP, Bonjour, Gadu-Gadu, ICQ, IRC, Novell Groupwise, QQ, Lotus Sametime, SILC, Simple and Zephyr. %description -n libpurple-devel
--- a/pidgin/gtkconv.c Wed May 09 01:50:06 2007 +0000 +++ b/pidgin/gtkconv.c Wed May 09 01:50:50 2007 +0000 @@ -376,7 +376,7 @@ PurpleCmdStatus status; if (!g_ascii_strcasecmp(args[0], "version")) { - tmp = g_strdup_printf("me is using " PIDGIN_NAME " v%s.", VERSION); + tmp = g_strdup_printf("me is using %s v%s.", "Pidgin", VERSION); markup = g_markup_escape_text(tmp, -1); status = purple_cmd_do_command(conv, tmp, markup, error); @@ -4978,6 +4978,8 @@ char *bracket; int tag_count = 0; gboolean is_rtl_message = FALSE; + GtkSmileyTree *tree = NULL; + GHashTable *smiley_data = NULL; g_return_if_fail(conv != NULL); gtkconv = PIDGIN_CONVERSATION(conv); @@ -5121,6 +5123,17 @@ gtk_font_options |= GTK_IMHTML_USE_POINTSIZE; } + if (!(flags & PURPLE_MESSAGE_RECV)) + { + /* Temporarily revert to the original smiley-data to avoid showing up + * custom smileys of the buddy when sending message + */ + tree = GTK_IMHTML(gtkconv->imhtml)->default_smilies; + GTK_IMHTML(gtkconv->imhtml)->default_smilies = + GTK_IMHTML(gtkconv->entry)->default_smilies; + smiley_data = GTK_IMHTML(gtkconv->imhtml)->smiley_data; + GTK_IMHTML(gtkconv->imhtml)->smiley_data = GTK_IMHTML(gtkconv->entry)->smiley_data; + } /* TODO: These colors should not be hardcoded so log.c can use them */ if (flags & PURPLE_MESSAGE_RAW) { @@ -5152,25 +5165,11 @@ * escaped entities making the string longer */ int tag_start_offset = alias ? (strlen(alias_escaped) - strlen(alias)) : 0; int tag_end_offset = 0; - GtkSmileyTree *tree = NULL; - GHashTable *smiley_data = NULL; /* Enforce direction on alias */ if (is_rtl_message) str_embed_direction_chars(&alias_escaped); - if (flags & PURPLE_MESSAGE_SEND) - { - /* Temporarily revert to the original smiley-data to avoid showing up - * custom smileys of the buddy when sending message - */ - tree = GTK_IMHTML(gtkconv->imhtml)->default_smilies; - GTK_IMHTML(gtkconv->imhtml)->default_smilies = - GTK_IMHTML(gtkconv->entry)->default_smilies; - smiley_data = GTK_IMHTML(gtkconv->imhtml)->smiley_data; - GTK_IMHTML(gtkconv->imhtml)->smiley_data = GTK_IMHTML(gtkconv->entry)->smiley_data; - } - if (flags & PURPLE_MESSAGE_WHISPER) { str = g_malloc(1024); @@ -5312,13 +5311,6 @@ gtk_imhtml_append_text(GTK_IMHTML(gtkconv->imhtml), with_font_tag, gtk_font_options | gtk_font_options_all); - if (flags & PURPLE_MESSAGE_SEND) - { - /* Restore the smiley-data */ - GTK_IMHTML(gtkconv->imhtml)->default_smilies = tree; - GTK_IMHTML(gtkconv->imhtml)->smiley_data = smiley_data; - } - g_free(with_font_tag); g_free(new_message); } @@ -5344,6 +5336,13 @@ gtkconv_set_unseen(gtkconv, unseen); } + if (!(flags & PURPLE_MESSAGE_RECV)) + { + /* Restore the smiley-data */ + GTK_IMHTML(gtkconv->imhtml)->default_smilies = tree; + GTK_IMHTML(gtkconv->imhtml)->smiley_data = smiley_data; + } + purple_signal_emit(pidgin_conversations_get_handle(), (type == PURPLE_CONV_TYPE_IM ? "displayed-im-msg" : "displayed-chat-msg"), account, name, displaying, conv, flags); @@ -5607,15 +5606,25 @@ icon, smiley->icon, smiley->smile); #endif if (icon) { + GList *wids; gtk_widget_show(icon); anchor = GTK_TEXT_CHILD_ANCHOR(current->data); + wids = gtk_text_child_anchor_get_widgets(anchor); g_object_set_data_full(G_OBJECT(anchor), "gtkimhtml_plaintext", purple_unescape_html(smiley->smile), g_free); g_object_set_data_full(G_OBJECT(anchor), "gtkimhtml_htmltext", g_strdup(smiley->smile), g_free); - if (smiley->imhtml) - gtk_text_view_add_child_at_anchor(GTK_TEXT_VIEW(smiley->imhtml), icon, anchor); + if (smiley->imhtml) { + if (wids) { + GList *children = gtk_container_get_children(GTK_CONTAINER(wids->data)); + g_list_foreach(children, (GFunc)gtk_widget_destroy, NULL); + g_list_free(children); + gtk_container_add(GTK_CONTAINER(wids->data), icon); + } else + gtk_text_view_add_child_at_anchor(GTK_TEXT_VIEW(smiley->imhtml), icon, anchor); + } + g_list_free(wids); } }
--- a/pidgin/gtkdialogs.c Wed May 09 01:50:06 2007 +0000 +++ b/pidgin/gtkdialogs.c Wed May 09 01:50:50 2007 +0000 @@ -112,7 +112,7 @@ {"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}, - {"Jim Seymour", N_("Jabber developer"), NULL}, + {"Jim Seymour", N_("XMPP developer"), NULL}, {"Mark Spencer", N_("original author"), "markster@marko.net"}, {"Eric Warmenhoven", N_("lead developer"), "warmenhoven@yahoo.com"}, {NULL, NULL, NULL} @@ -350,7 +350,9 @@ gdk_pixbuf_unref(pixbuf); /* Insert the logo */ obj = gtk_widget_get_accessible(logo); - atk_object_set_description(obj, PIDGIN_NAME " " VERSION); + tmp = g_strconcat(PIDGIN_NAME, " " VERSION, NULL); + atk_object_set_description(obj, tmp); + g_free(tmp); gtk_box_pack_start(GTK_BOX(vbox), logo, FALSE, FALSE, 0); frame = pidgin_create_imhtml(FALSE, &text, NULL, NULL); @@ -361,7 +363,7 @@ g_string_append_printf(str, _("%s is a modular messaging client capable of using " - "AIM, MSN, Yahoo!, Jabber, ICQ, IRC, SILC, SIP/SIMPLE, " + "AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, SIP/SIMPLE, " "Novell GroupWise, Lotus Sametime, Bonjour, Zephyr, " "Gadu-Gadu, and QQ all at once. " "It is written using GTK+.<BR><BR>" @@ -506,9 +508,9 @@ #endif #ifdef HAVE_SSL - g_string_append(str, " <b>SSL:</b> " PIDGIN_NAME " was compiled with SSL support.<br/>"); + g_string_append(str, " <b>SSL:</b> SSL support is present.<br/>"); #else - g_string_append(str, " <b>SSL:</b> " PIDGIN_NAME " was <b><i>NOT</i></b> compiled with any SSL support!<br/>"); + g_string_append(str, " <b>SSL:</b> SSL support was <b><i>NOT</i></b> compiled!<br/>"); #endif /* This might be useful elsewhere too, but it is particularly useful for
--- a/pidgin/gtkdocklet-x11.c Wed May 09 01:50:06 2007 +0000 +++ b/pidgin/gtkdocklet-x11.c Wed May 09 01:50:50 2007 +0000 @@ -42,7 +42,6 @@ static GtkTooltips *tooltips = NULL; static GdkPixbuf *blank_icon = NULL; static int embed_timeout = 0; -static DockletStatus icon_status = 0; static int docklet_height = 0; /* protos */ @@ -90,39 +89,38 @@ } static void -docklet_x11_update_icon(DockletStatus icon) +docklet_x11_update_icon(PurpleStatusPrimitive status, gboolean connecting, gboolean pending) { const gchar *icon_name = NULL; g_return_if_fail(image != NULL); - switch (icon) { - case DOCKLET_STATUS_OFFLINE: + switch (status) { + case PURPLE_STATUS_OFFLINE: icon_name = PIDGIN_STOCK_TRAY_OFFLINE; break; - case DOCKLET_STATUS_CONNECTING: - icon_name = PIDGIN_STOCK_TRAY_CONNECT; + case PURPLE_STATUS_AWAY: + icon_name = PIDGIN_STOCK_TRAY_AWAY; + break; + case PURPLE_STATUS_UNAVAILABLE: + icon_name = PIDGIN_STOCK_TRAY_BUSY; break; - case DOCKLET_STATUS_AVAILABLE: + case PURPLE_STATUS_EXTENDED_AWAY: + icon_name = PIDGIN_STOCK_TRAY_XA; + break; + case PURPLE_STATUS_INVISIBLE: + icon_name = PIDGIN_STOCK_TRAY_INVISIBLE; + break; + default: icon_name = PIDGIN_STOCK_TRAY_AVAILABLE; break; - case DOCKLET_STATUS_PENDING: - icon_name = PIDGIN_STOCK_TRAY_PENDING; - break; - case DOCKLET_STATUS_AWAY: - icon_name = PIDGIN_STOCK_TRAY_AWAY; - break; - case DOCKLET_STATUS_BUSY: - icon_name = PIDGIN_STOCK_TRAY_BUSY; - break; - case DOCKLET_STATUS_XA: - icon_name = PIDGIN_STOCK_TRAY_XA; - break; - case DOCKLET_STATUS_INVISIBLE: - icon_name = PIDGIN_STOCK_TRAY_INVISIBLE; - break; } + if (pending) + icon_name = PIDGIN_STOCK_TRAY_PENDING; + if (connecting) + icon_name = PIDGIN_STOCK_TRAY_CONNECT; + if(icon_name) { int icon_size; if (docklet_height < 22) @@ -132,7 +130,6 @@ gtk_image_set_from_stock(GTK_IMAGE(image), icon_name, icon_size); } - icon_status = icon; } static void @@ -141,7 +138,7 @@ if (docklet_height == widget->allocation.height) return; docklet_height = widget->allocation.height; - docklet_x11_update_icon(icon_status); + pidgin_docklet_update_icon(); } static void
--- a/pidgin/gtkdocklet.c Wed May 09 01:50:06 2007 +0000 +++ b/pidgin/gtkdocklet.c Wed May 09 01:50:50 2007 +0000 @@ -49,7 +49,9 @@ /* globals */ static struct docklet_ui_ops *ui_ops = NULL; -static DockletStatus status = DOCKLET_STATUS_OFFLINE; +static PurpleStatusPrimitive status = PURPLE_STATUS_OFFLINE; +static gboolean pending = FALSE; +static gboolean connecting = FALSE; static gboolean enable_join_chat = FALSE; static guint docklet_blinking_timer = 0; static gboolean visible = FALSE; @@ -66,21 +68,17 @@ blinked = !blinked; - switch (status) { - case DOCKLET_STATUS_PENDING: - if (blinked) { - if (ui_ops && ui_ops->blank_icon) - ui_ops->blank_icon(); - } else { - if (ui_ops && ui_ops->update_icon) - ui_ops->update_icon(status); - } - ret = TRUE; /* keep blinking */ - break; - default: - docklet_blinking_timer = 0; - blinked = FALSE; - break; + if(pending && !connecting) { + if (blinked) { + if (ui_ops && ui_ops->blank_icon) + ui_ops->blank_icon(); + } else { + pidgin_docklet_update_icon(); + } + ret = TRUE; /* keep blinking */ + } else { + docklet_blinking_timer = 0; + blinked = FALSE; } return ret; @@ -114,9 +112,8 @@ GList *convs, *l; int count; PurpleSavedStatus *saved_status; - PurpleStatusPrimitive prim; - DockletStatus newstatus = DOCKLET_STATUS_OFFLINE; - gboolean pending = FALSE, connecting = FALSE; + PurpleStatusPrimitive newstatus = PURPLE_STATUS_OFFLINE; + gboolean newpending = FALSE, newconnecting = FALSE; /* get the current savedstatus */ saved_status = purple_savedstatus_get_current(); @@ -141,7 +138,7 @@ } if (convs != NULL) { - pending = TRUE; + newpending = TRUE; /* set tooltip if messages are pending */ if (ui_ops->set_tooltip) { @@ -171,7 +168,7 @@ g_list_free(convs); } else if (ui_ops->set_tooltip) { - char *tooltip_text = g_strconcat(PIDGIN_NAME " - ", + char *tooltip_text = g_strconcat(PIDGIN_NAME, " - ", purple_savedstatus_get_title(saved_status), NULL); ui_ops->set_tooltip(tooltip_text); g_free(tooltip_text); @@ -190,38 +187,22 @@ account_status = purple_account_get_active_status(account); if (purple_account_is_connecting(account)) - connecting = TRUE; + newconnecting = TRUE; } - prim = purple_savedstatus_get_type(saved_status); - if (pending) - newstatus = DOCKLET_STATUS_PENDING; - else if (connecting) - newstatus = DOCKLET_STATUS_CONNECTING; - else if (prim == PURPLE_STATUS_UNAVAILABLE) - newstatus = DOCKLET_STATUS_BUSY; - else if (prim == PURPLE_STATUS_AWAY) - newstatus = DOCKLET_STATUS_AWAY; - else if (prim == PURPLE_STATUS_EXTENDED_AWAY) - newstatus = DOCKLET_STATUS_XA; - else if (prim == PURPLE_STATUS_OFFLINE) - newstatus = DOCKLET_STATUS_OFFLINE; - else if (prim == PURPLE_STATUS_INVISIBLE) - newstatus = DOCKLET_STATUS_INVISIBLE; - else - newstatus = DOCKLET_STATUS_AVAILABLE; + newstatus = purple_savedstatus_get_type(saved_status); /* update the icon if we changed status */ - if (status != newstatus) { + if (status != newstatus || pending!=newpending || connecting!=newconnecting) { status = newstatus; + pending = newpending; + connecting = newconnecting; - if (ui_ops && ui_ops->update_icon) - ui_ops->update_icon(status); + pidgin_docklet_update_icon(); /* and schedule the blinker function if messages are pending */ - if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/docklet/blink") && - status == DOCKLET_STATUS_PENDING - && docklet_blinking_timer == 0) { + if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/docklet/blink") + && pending && !connecting && docklet_blinking_timer == 0) { docklet_blinking_timer = g_timeout_add(500, docklet_blink_icon, NULL); } } @@ -486,8 +467,8 @@ pidgin_separator(submenu); - new_menu_item_with_status_icon(submenu, _("New..."), PURPLE_STATUS_AVAILABLE, G_CALLBACK(show_custom_status_editor_cb), NULL, 0, 0, NULL); - new_menu_item_with_status_icon(submenu, _("Saved..."), PURPLE_STATUS_AVAILABLE, G_CALLBACK(pidgin_status_window_show), NULL, 0, 0, NULL); + pidgin_new_item_from_stock(submenu, _("New..."), NULL, G_CALLBACK(show_custom_status_editor_cb), NULL, 0, 0, NULL); + pidgin_new_item_from_stock(submenu, _("Saved..."), NULL, G_CALLBACK(pidgin_status_window_show), NULL, 0, 0, NULL); return menuitem; } @@ -510,7 +491,7 @@ menuitem = gtk_menu_item_new_with_label(_("Unread Messages")); - if (status == DOCKLET_STATUS_PENDING) { + if (pending) { GtkWidget *submenu = gtk_menu_new(); GList *l = get_pending_list(0); if (l == NULL) { @@ -530,7 +511,7 @@ pidgin_separator(menu); menuitem = pidgin_new_item_from_stock(menu, _("New Message..."), PIDGIN_STOCK_TOOLBAR_MESSAGE_NEW, G_CALLBACK(pidgin_dialogs_im), NULL, 0, 0, NULL); - if (status == DOCKLET_STATUS_OFFLINE) + if (status == PURPLE_STATUS_OFFLINE) gtk_widget_set_sensitive(menuitem, FALSE); menuitem = docklet_status_submenu(); @@ -558,10 +539,6 @@ pidgin_separator(menu); - /* TODO: need a submenu to change status, this needs to "link" - * to the status in the buddy list gtkstatusbox - */ - pidgin_new_item_from_stock(menu, _("Quit"), GTK_STOCK_QUIT, G_CALLBACK(purple_core_quit), NULL, 0, 0, NULL); #ifdef _WIN32 @@ -578,11 +555,18 @@ * public api for ui_ops **************************************************************************/ void +pidgin_docklet_update_icon() +{ + if (ui_ops && ui_ops->update_icon) + ui_ops->update_icon(status, connecting, pending); +} + +void pidgin_docklet_clicked(int button_type) { switch (button_type) { case 1: - if (status == DOCKLET_STATUS_PENDING) { + if (pending) { GList *l = get_pending_list(1); if (l != NULL) { purple_conversation_present((PurpleConversation *)l->data); @@ -608,8 +592,7 @@ } visible = TRUE; docklet_update_status(); - if (ui_ops && ui_ops->update_icon) - ui_ops->update_icon(status); + pidgin_docklet_update_icon(); } void @@ -625,7 +608,7 @@ docklet_blinking_timer = 0; } visible = FALSE; - status = DOCKLET_STATUS_OFFLINE; + status = PURPLE_STATUS_OFFLINE; } }
--- a/pidgin/gtkdocklet.h Wed May 09 01:50:06 2007 +0000 +++ b/pidgin/gtkdocklet.h Wed May 09 01:50:50 2007 +0000 @@ -25,23 +25,13 @@ #ifndef _GTKDOCKLET_H_ #define _GTKDOCKLET_H_ -typedef enum -{ - DOCKLET_STATUS_OFFLINE, - DOCKLET_STATUS_AVAILABLE, - DOCKLET_STATUS_INVISIBLE, - DOCKLET_STATUS_PENDING, - DOCKLET_STATUS_AWAY, - DOCKLET_STATUS_BUSY, - DOCKLET_STATUS_XA, - DOCKLET_STATUS_CONNECTING -} DockletStatus; +#include "status.h" struct docklet_ui_ops { void (*create)(void); void (*destroy)(void); - void (*update_icon)(DockletStatus); + void (*update_icon)(PurpleStatusPrimitive, gboolean, gboolean); void (*blank_icon)(void); void (*set_tooltip)(gchar *); GtkMenuPositionFunc position_menu; @@ -49,6 +39,7 @@ /* functions in gtkdocklet.c */ +void pidgin_docklet_update_icon(void); void pidgin_docklet_clicked(int); void pidgin_docklet_embedded(void); void pidgin_docklet_remove(void);
--- a/pidgin/gtkimhtml.c Wed May 09 01:50:06 2007 +0000 +++ b/pidgin/gtkimhtml.c Wed May 09 01:50:50 2007 +0000 @@ -1872,18 +1872,8 @@ } static GdkPixbufAnimation * -gtk_smiley_tree_image (GtkIMHtml *imhtml, - const gchar *sml, - const gchar *text) +gtk_smiley_get_image(GtkIMHtmlSmiley *smiley) { - - GtkIMHtmlSmiley *smiley; - - smiley = gtk_imhtml_smiley_get(imhtml,sml,text); - - if (!smiley) - return NULL; - if (!smiley->icon && smiley->file) { smiley->icon = gdk_pixbuf_animation_new_from_file(smiley->file, NULL); } else if (!smiley->icon && smiley->loader) { @@ -1895,6 +1885,21 @@ return smiley->icon; } +static GdkPixbufAnimation * +gtk_smiley_tree_image (GtkIMHtml *imhtml, + const gchar *sml, + const gchar *text) +{ + GtkIMHtmlSmiley *smiley; + + smiley = gtk_imhtml_smiley_get(imhtml,sml,text); + + if (!smiley) + return NULL; + + return gtk_smiley_get_image(smiley); +} + #define VALID_TAG(x) if (!g_ascii_strncasecmp (string, x ">", strlen (x ">"))) { \ *tag = g_strndup (string, strlen (x)); \ *len = strlen (x) + 1; \ @@ -3363,6 +3368,29 @@ return FALSE; /* Let clicks go through if we didn't catch anything */ } + +static gboolean gtk_imhtml_smiley_clicked(GtkWidget *w, GdkEvent *event, GtkIMHtmlSmiley *smiley) +{ + GdkPixbufAnimation *anim = NULL; + GdkPixbuf *pix = NULL; + GtkIMHtmlScalable *image = NULL; + gboolean ret; + + if (event->type != GDK_BUTTON_RELEASE || ((GdkEventButton*)event)->button != 3) + return FALSE; + + anim = gtk_smiley_get_image(smiley); + if (!anim) + return FALSE; + + pix = gdk_pixbuf_animation_get_static_image(anim); + image = gtk_imhtml_image_new(pix, NULL, 0); + ret = gtk_imhtml_image_clicked(w, event, (GtkIMHtmlImage*)image); + g_object_set_data_full(G_OBJECT(w), "image-data", image, (GDestroyNotify)gtk_imhtml_image_free); + g_object_unref(G_OBJECT(pix)); + return ret; +} + void gtk_imhtml_image_free(GtkIMHtmlScalable *scale) { GtkIMHtmlImage *image = (GtkIMHtmlImage *)scale; @@ -4378,9 +4406,10 @@ GdkPixbuf *pixbuf = NULL; GdkPixbufAnimation *annipixbuf = NULL; GtkWidget *icon = NULL; - GtkTextChildAnchor *anchor; + GtkTextChildAnchor *anchor = NULL; char *unescaped = purple_unescape_html(smiley); GtkIMHtmlSmiley *imhtml_smiley = gtk_imhtml_smiley_get(imhtml, sml, unescaped); + GtkWidget *ebox = NULL; if (imhtml->format_functions & GTK_IMHTML_SMILEY) { annipixbuf = gtk_smiley_tree_image(imhtml, sml, unescaped); @@ -4397,6 +4426,7 @@ if (anim) { GdkPixbuf *pb = gdk_pixbuf_animation_get_static_image(anim); gtk_image_set_from_pixbuf(image, pb); + g_object_unref(G_OBJECT(pb)); } } else { imhtml->num_animations++; @@ -4407,6 +4437,12 @@ } } + if (imhtml_smiley->flags & GTK_IMHTML_SMILEY_CUSTOM) { + ebox = gtk_event_box_new(); + gtk_event_box_set_visible_window(GTK_EVENT_BOX(ebox), FALSE); + gtk_widget_show(ebox); + } + if (icon) { anchor = gtk_text_buffer_create_child_anchor(imhtml->text_buffer, iter); g_object_set_data_full(G_OBJECT(anchor), "gtkimhtml_plaintext", g_strdup(unescaped), g_free); @@ -4419,14 +4455,26 @@ g_signal_connect(G_OBJECT(icon), "expose-event", G_CALLBACK(image_expose), NULL); gtk_widget_show(icon); - gtk_text_view_add_child_at_anchor(GTK_TEXT_VIEW(imhtml), icon, anchor); + if (ebox) + gtk_container_add(GTK_CONTAINER(ebox), icon); + gtk_text_view_add_child_at_anchor(GTK_TEXT_VIEW(imhtml), ebox ? ebox : icon, anchor); } else if (imhtml_smiley != NULL && (imhtml->format_functions & GTK_IMHTML_SMILEY)) { anchor = gtk_text_buffer_create_child_anchor(imhtml->text_buffer, iter); imhtml_smiley->anchors = g_slist_append(imhtml_smiley->anchors, anchor); + if (ebox) { + GtkWidget *img = gtk_image_new_from_stock(GTK_STOCK_MISSING_IMAGE, GTK_ICON_SIZE_MENU); + gtk_container_add(GTK_CONTAINER(ebox), img); + gtk_widget_show(img); + gtk_text_view_add_child_at_anchor(GTK_TEXT_VIEW(imhtml), ebox, anchor); + } } else { gtk_text_buffer_insert(imhtml->text_buffer, iter, smiley, -1); } + if (ebox) { + g_signal_connect(G_OBJECT(ebox), "event", G_CALLBACK(gtk_imhtml_smiley_clicked), imhtml_smiley); + } + g_free(unescaped); }
--- a/pidgin/gtkmain.c Wed May 09 01:50:06 2007 +0000 +++ b/pidgin/gtkmain.c Wed May 09 01:50:50 2007 +0000 @@ -474,6 +474,9 @@ debug_enabled = FALSE; #endif + /* This is the first Glib function call. Make sure to initialize GThread bfeore then */ + g_thread_init(NULL); + #ifdef PURPLE_FATAL_ASSERTS /* Make g_return_... functions fatal. */ g_log_set_always_fatal(G_LOG_LEVEL_CRITICAL); @@ -498,18 +501,18 @@ "%s has segfaulted and attempted to dump a core file.\n" "This is a bug in the software and has happened through\n" "no fault of your own.\n\n" - "If you can reproduce the crash, please notify the Pidgin\n" - "developers by reporting a bug at\n" - "%sbug.php\n\n" + "If you can reproduce the crash, please notify the developers\n" + "by reporting a bug at:\n" + "%snewticket/\n\n" "Please make sure to specify what you were doing at the time\n" "and post the backtrace from the core file. If you do not know\n" "how to get the backtrace, please read the instructions at\n" - "%sgdb.php\n\n" + "%swiki/GetABacktrace\n\n" "If you need further assistance, please IM either SeanEgn or \n" "LSchiere (via AIM). Contact information for Sean and Luke \n" "on other protocols is at\n" - "%scontactinfo.php\n"), - PIDGIN_NAME, PURPLE_WEBSITE, PURPLE_WEBSITE, PURPLE_WEBSITE + "%swiki/DeveloperPages\n"), + PIDGIN_NAME, PURPLE_DEVEL_WEBSITE, PURPLE_DEVEL_WEBSITE, PURPLE_DEVEL_WEBSITE ); /* we have to convert the message (UTF-8 to console @@ -630,7 +633,7 @@ } /* show version message */ if (opt_version) { - printf(PIDGIN_NAME " %s\n", VERSION); + printf("%s %s\n", PIDGIN_NAME, VERSION); #ifdef HAVE_SIGNAL_H g_free(segfault_message); #endif @@ -667,7 +670,7 @@ if (!gui_check) { char *display = gdk_get_display(); - printf(PIDGIN_NAME " %s\n", VERSION); + printf("%s %s\n", PIDGIN_NAME, VERSION); g_warning("cannot open display: %s", display ? display : "unset"); g_free(display); @@ -727,7 +730,7 @@ if (!purple_core_init(PIDGIN_UI)) { fprintf(stderr, - "Initialization of the " PIDGIN_NAME " core failed. Dumping core.\n" + "Initialization of the libpurple core failed. Dumping core.\n" "Please report this!\n"); #ifdef HAVE_SIGNAL_H g_free(segfault_message);
--- a/pidgin/gtksound.c Wed May 09 01:50:06 2007 +0000 +++ b/pidgin/gtksound.c Wed May 09 01:50:50 2007 +0000 @@ -430,7 +430,7 @@ return; } - esc_filename = g_strdup_printf("'%s'", filename); + esc_filename = g_shell_quote(filename); if(strstr(sound_cmd, "%s")) command = purple_strreplace(sound_cmd, "%s", esc_filename);
--- a/pidgin/gtkutils.c Wed May 09 01:50:06 2007 +0000 +++ b/pidgin/gtkutils.c Wed May 09 01:50:50 2007 +0000 @@ -1417,7 +1417,7 @@ char *str, *str2; str = g_strdup_printf(_("Cannot send folder %s."), basename); - str2 = g_strdup_printf(_("%s cannot transfer a folder. You will need to send the files within individually"), PIDGIN_NAME); + str2 = g_strdup_printf(_("%s cannot transfer a folder. You will need to send the files within individually."), PIDGIN_NAME); purple_notify_error(NULL, NULL, str, str2);
--- a/pidgin/pidgin.h Wed May 09 01:50:06 2007 +0000 +++ b/pidgin/pidgin.h Wed May 09 01:50:50 2007 +0000 @@ -45,6 +45,10 @@ /* change this only when we have a sane upgrade path for old prefs */ #define PIDGIN_PREFS_ROOT "/pidgin" +/* Translators may want to transliterate the name. + It is not to be translated. */ +#define PIDGIN_NAME _("Pidgin") + #ifndef _WIN32 # define PIDGIN_ALERT_TITLE "" #else
--- a/pidgin/plugins/Makefile.am Wed May 09 01:50:06 2007 +0000 +++ b/pidgin/plugins/Makefile.am Wed May 09 01:50:50 2007 +0000 @@ -107,7 +107,6 @@ AM_CPPFLAGS = \ -DDATADIR=\"$(datadir)\" \ - -DVERSION=\"$(VERSION)\" \ -I$(top_builddir)/libpurple \ -I$(top_srcdir)/libpurple \ -I$(top_srcdir)/pidgin \
--- a/pidgin/plugins/cap/Makefile.am Wed May 09 01:50:06 2007 +0000 +++ b/pidgin/plugins/cap/Makefile.am Wed May 09 01:50:50 2007 +0000 @@ -19,7 +19,6 @@ AM_CPPFLAGS = \ -DDATADIR=\"$(datadir)\" \ - -DVERSION=\"$(VERSION)\" \ -I$(top_srcdir)/libpurple \ -I$(top_builddir)/libpurple \ -I$(top_srcdir)/pidgin \
--- a/pidgin/plugins/gestures/Makefile.am Wed May 09 01:50:06 2007 +0000 +++ b/pidgin/plugins/gestures/Makefile.am Wed May 09 01:50:50 2007 +0000 @@ -19,7 +19,6 @@ AM_CPPFLAGS = \ -DDATADIR=\"$(datadir)\" \ - -DVERSION=\"$(VERSION)\" \ -I$(top_srcdir)/libpurple \ -I$(top_builddir)/libpurple \ -I$(top_srcdir)/pidgin \
--- a/pidgin/plugins/gevolution/Makefile.am Wed May 09 01:50:06 2007 +0000 +++ b/pidgin/plugins/gevolution/Makefile.am Wed May 09 01:50:50 2007 +0000 @@ -21,7 +21,6 @@ AM_CPPFLAGS = \ -DDATADIR=\"$(datadir)\" \ - -DVERSION=\"$(VERSION)\" \ -I$(top_srcdir)/libpurple \ -I$(top_builddir)/libpurple \ -I$(top_srcdir)/pidgin \
--- a/pidgin/plugins/musicmessaging/Makefile.am Wed May 09 01:50:06 2007 +0000 +++ b/pidgin/plugins/musicmessaging/Makefile.am Wed May 09 01:50:50 2007 +0000 @@ -36,7 +36,6 @@ AM_CPPFLAGS = \ -DDATADIR=\"$(datadir)\" \ - -DVERSION=\"$(VERSION)\" \ -I$(top_builddir)/libpurple \ -I$(top_srcdir)/libpurple \ -I$(top_srcdir)/pidgin \
--- a/pidgin/plugins/perl/Makefile.am Wed May 09 01:50:06 2007 +0000 +++ b/pidgin/plugins/perl/Makefile.am Wed May 09 01:50:50 2007 +0000 @@ -95,7 +95,6 @@ @rm -f Makefile AM_CPPFLAGS = \ - -DVERSION=\"$(VERSION)\" \ -I$(top_srcdir) \ -I$(top_srcdir)/libpurple \ -I$(top_builddir)/libpurple \
--- a/pidgin/plugins/raw.c Wed May 09 01:50:06 2007 +0000 +++ b/pidgin/plugins/raw.c Wed May 09 01:50:50 2007 +0000 @@ -175,7 +175,7 @@ N_("Raw"), VERSION, N_("Lets you send raw input to text-based protocols."), - N_("Lets you send raw input to text-based protocols (Jabber, MSN, IRC, " + 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."), "Eric Warmenhoven <eric@warmenhoven.org>", PURPLE_WEBSITE,
--- a/pidgin/plugins/ticker/Makefile.am Wed May 09 01:50:06 2007 +0000 +++ b/pidgin/plugins/ticker/Makefile.am Wed May 09 01:50:50 2007 +0000 @@ -20,7 +20,6 @@ AM_CPPFLAGS = \ -DDATADIR=\"$(datadir)\" \ - -DVERSION=\"$(VERSION)\" \ -I$(top_srcdir)/libpurple \ -I$(top_builddir)/libpurple \ -I$(top_srcdir)/pidgin \
--- a/pidgin/plugins/timestamp_format.c Wed May 09 01:50:06 2007 +0000 +++ b/pidgin/plugins/timestamp_format.c Wed May 09 01:50:50 2007 +0000 @@ -23,7 +23,7 @@ ppref = purple_plugin_pref_new_with_label(_("Timestamp Format Options")); purple_plugin_pref_frame_add(frame, ppref); - tmp = g_strdup_printf(_("_Force (traditional %s) 24-hour time format"), PIDGIN_NAME); + tmp = g_strdup_printf(_("_Force 24-hour time format")); ppref = purple_plugin_pref_new_with_name_and_label( "/plugins/gtk/timestamp_format/force_24hr", tmp);
--- a/pidgin/win32/gtkdocklet-win32.c Wed May 09 01:50:06 2007 +0000 +++ b/pidgin/win32/gtkdocklet-win32.c Wed May 09 01:50:50 2007 +0000 @@ -45,7 +45,8 @@ * LOCALS */ static HWND systray_hwnd = NULL; -static HICON cached_icons[DOCKLET_STATUS_CONNECTING + 1]; +/* additional two cached_icons entries for pending and connecting icons */ +static HICON cached_icons[PURPLE_STATUS_NUM_PRIMITIVES + 2]; static GtkWidget *image = NULL; static NOTIFYICONDATA _nicon_data; @@ -466,46 +467,56 @@ Shell_NotifyIcon(NIM_DELETE, &_nicon_data); } -static void winpidgin_tray_update_icon(DockletStatus icon) { +static void winpidgin_tray_update_icon(PurpleStatusPrimitive status, + gboolean connecting, gboolean pending) { + + int icon_index; + g_return_if_fail(image != NULL); - g_return_if_fail(image != NULL); - g_return_if_fail(icon < (sizeof(cached_icons) / sizeof(HICON))); + if(connecting) + icon_index = PURPLE_STATUS_NUM_PRIMITIVES; + else if(pending) + icon_index = PURPLE_STATUS_NUM_PRIMITIVES+1; + else + icon_index = status; + + g_return_if_fail(icon_index < (sizeof(cached_icons) / sizeof(HICON))); /* Look up and cache the HICON if we don't already have it */ - if (cached_icons[icon] == NULL) { + if (cached_icons[icon_index] == NULL) { const gchar *icon_name = NULL; - switch (icon) { - case DOCKLET_STATUS_OFFLINE: - icon_name = PIDGIN_STOCK_TRAY_OFFLINE; - break; - case DOCKLET_STATUS_CONNECTING: - icon_name = PIDGIN_STOCK_TRAY_CONNECT; - break; - case DOCKLET_STATUS_AVAILABLE: - icon_name = PIDGIN_STOCK_TRAY_AVAILABLE; - break; - case DOCKLET_STATUS_PENDING: - icon_name = PIDGIN_STOCK_TRAY_PENDING; - break; - case DOCKLET_STATUS_AWAY: - icon_name = PIDGIN_STOCK_TRAY_AWAY; - break; - case DOCKLET_STATUS_BUSY: - icon_name = PIDGIN_STOCK_TRAY_BUSY; - break; - case DOCKLET_STATUS_XA: - icon_name = PIDGIN_STOCK_TRAY_XA; - break; - case DOCKLET_STATUS_INVISIBLE: - icon_name = PIDGIN_STOCK_TRAY_INVISIBLE; + switch (status) { + case PURPLE_STATUS_OFFLINE: + icon_name = PIDGIN_STOCK_TRAY_OFFLINE; + break; + case PURPLE_STATUS_AWAY: + icon_name = PIDGIN_STOCK_TRAY_AWAY; + break; + case PURPLE_STATUS_UNAVAILABLE: + icon_name = PIDGIN_STOCK_TRAY_BUSY; + break; + case PURPLE_STATUS_EXTENDED_AWAY: + icon_name = PIDGIN_STOCK_TRAY_XA; + break; + case PURPLE_STATUS_INVISIBLE: + icon_name = PIDGIN_STOCK_TRAY_INVISIBLE; + break; + default: + icon_name = PIDGIN_STOCK_TRAY_AVAILABLE; + break; } + if (pending) + icon_name = PIDGIN_STOCK_TRAY_PENDING; + if (connecting) + icon_name = PIDGIN_STOCK_TRAY_CONNECT; + g_return_if_fail(icon_name != NULL); - cached_icons[icon] = load_hicon_from_stock(icon_name); + cached_icons[icon_index] = load_hicon_from_stock(icon_name); } - systray_change_icon(cached_icons[icon]); + systray_change_icon(cached_icons[icon_index]); } static void winpidgin_tray_blank_icon() { @@ -557,21 +568,21 @@ * That is why we use custom 4-bit icons for pre XP Windowses */ if (osinfo.dwMajorVersion < 5 || (osinfo.dwMajorVersion == 5 && osinfo.dwMinorVersion == 0)) { - cached_icons[DOCKLET_STATUS_OFFLINE] = (HICON) LoadImage(winpidgin_dll_hinstance(), + cached_icons[PURPLE_STATUS_OFFLINE] = (HICON) LoadImage(winpidgin_dll_hinstance(), MAKEINTRESOURCE(PIDGIN_TRAY_OFFLINE_4BIT), IMAGE_ICON, 16, 16, LR_CREATEDIBSECTION); - cached_icons[DOCKLET_STATUS_AVAILABLE] = (HICON) LoadImage(winpidgin_dll_hinstance(), + cached_icons[PURPLE_STATUS_AVAILABLE] = (HICON) LoadImage(winpidgin_dll_hinstance(), MAKEINTRESOURCE(PIDGIN_TRAY_AVAILABLE_4BIT), IMAGE_ICON, 16, 16, LR_CREATEDIBSECTION); - cached_icons[DOCKLET_STATUS_AWAY] = (HICON) LoadImage(winpidgin_dll_hinstance(), + cached_icons[PURPLE_STATUS_AWAY] = (HICON) LoadImage(winpidgin_dll_hinstance(), MAKEINTRESOURCE(PIDGIN_TRAY_AWAY_4BIT), IMAGE_ICON, 16, 16, LR_CREATEDIBSECTION); - cached_icons[DOCKLET_STATUS_XA] = (HICON) LoadImage(winpidgin_dll_hinstance(), + cached_icons[PURPLE_STATUS_EXTENDED_AWAY] = (HICON) LoadImage(winpidgin_dll_hinstance(), MAKEINTRESOURCE(PIDGIN_TRAY_XA_4BIT), IMAGE_ICON, 16, 16, LR_CREATEDIBSECTION); - cached_icons[DOCKLET_STATUS_BUSY] = (HICON) LoadImage(winpidgin_dll_hinstance(), + cached_icons[PURPLE_STATUS_UNAVAILABLE] = (HICON) LoadImage(winpidgin_dll_hinstance(), MAKEINTRESOURCE(PIDGIN_TRAY_BUSY_4BIT), IMAGE_ICON, 16, 16, LR_CREATEDIBSECTION); - cached_icons[DOCKLET_STATUS_CONNECTING] = (HICON) LoadImage(winpidgin_dll_hinstance(), + cached_icons[PURPLE_STATUS_NUM_PRIMITIVES] = (HICON) LoadImage(winpidgin_dll_hinstance(), MAKEINTRESOURCE(PIDGIN_TRAY_CONNECTING_4BIT), IMAGE_ICON, 16, 16, LR_CREATEDIBSECTION); - cached_icons[DOCKLET_STATUS_PENDING] = (HICON) LoadImage(winpidgin_dll_hinstance(), + cached_icons[PURPLE_STATUS_NUM_PRIMITIVES+1] = (HICON) LoadImage(winpidgin_dll_hinstance(), MAKEINTRESOURCE(PIDGIN_TRAY_PENDING_4BIT), IMAGE_ICON, 16, 16, LR_CREATEDIBSECTION); - cached_icons[DOCKLET_STATUS_INVISIBLE] = (HICON) LoadImage(winpidgin_dll_hinstance(), + cached_icons[PURPLE_STATUS_INVISIBLE] = (HICON) LoadImage(winpidgin_dll_hinstance(), MAKEINTRESOURCE(PIDGIN_TRAY_INVISIBLE_4BIT), IMAGE_ICON, 16, 16, LR_CREATEDIBSECTION); }
--- a/po/POTFILES.in Wed May 09 01:50:06 2007 +0000 +++ b/po/POTFILES.in Wed May 09 01:50:50 2007 +0000 @@ -177,6 +177,7 @@ pidgin/gtkutils.c pidgin/gtkwhiteboard.c pidgin/pidgincombobox.c +pidgin/pidgin.h pidgin/pidginstock.c pidgin/plugins/cap/cap.c pidgin/plugins/contact_priority.c
--- a/po/en_AU.po Wed May 09 01:50:06 2007 +0000 +++ b/po/en_AU.po Wed May 09 01:50:50 2007 +0000 @@ -849,10 +849,10 @@ #: plugins/raw.c:154 msgid "" -"Lets you send raw input to text-based protocols (Jabber, MSN, IRC, TOC). Hit " +"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." msgstr "" -"Lets you send raw input to text-based protocols (Jabber, MSN, IRC, TOC). Hit " +"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." #: plugins/relnot.c:63 @@ -2822,8 +2822,8 @@ #: src/gtkdialogs.c:92 #, fuzzy -msgid "Jabber developer" -msgstr "former Jabber developer" +msgid "XMPP developer" +msgstr "former XMPP developer" #: src/gtkdialogs.c:93 msgid "original author" @@ -2996,11 +2996,11 @@ #, fuzzy msgid "" "Gaim is a modular messaging client capable of using AIM, MSN, Yahoo!, " -"Jabber, ICQ, IRC, SILC, Novell GroupWise, Napster, Zephyr, and Gadu-Gadu all " +"XMPP, ICQ, IRC, SILC, Novell GroupWise, Napster, Zephyr, and Gadu-Gadu all " "at once. It is written using GTK+ and is licensed under the GNU GPL.<BR><BR>" msgstr "" "Gaim is a modular messaging client capable of using AIM, MSN, Yahoo!, " -"Jabber, ICQ, IRC, SILC, Novell GroupWise, Napster, Zephyr, and Gadu-Gadu all " +"XMPP, ICQ, IRC, SILC, Novell GroupWise, Napster, Zephyr, and Gadu-Gadu all " "at once. It is written using Gtk+ and is licensed under the GPL.<BR><BR>" #: src/gtkdialogs.c:235 @@ -5001,7 +5001,7 @@ #: src/protocols/gg/gg.c:1495 src/protocols/gg/gg.c:1496 #, fuzzy msgid "Register New Gadu-Gadu Account" -msgstr "Register New Jabber Account" +msgstr "Register New XMPP Account" #: src/protocols/gg/gg.c:1497 msgid "Please, fill in the following fields" @@ -5723,8 +5723,8 @@ msgstr "Birthday" #: src/protocols/jabber/buddy.c:567 src/protocols/jabber/buddy.c:568 -msgid "Edit Jabber vCard" -msgstr "Edit Jabber vCard" +msgid "Edit XMPP vCard" +msgstr "Edit XMPP vCard" #: src/protocols/jabber/buddy.c:569 msgid "" @@ -5735,8 +5735,8 @@ "comfortable." #: src/protocols/jabber/buddy.c:616 -msgid "Jabber ID" -msgstr "Jabber ID" +msgid "XMPP ID" +msgstr "XMPP ID" #: src/protocols/jabber/buddy.c:642 src/protocols/jabber/jabber.c:1711 msgid "Resource" @@ -5814,7 +5814,7 @@ msgstr "" #: src/protocols/jabber/buddy.c:1327 -msgid "Fill in one or more fields to search for any matching Jabber users." +msgid "Fill in one or more fields to search for any matching XMPP users." msgstr "" #: src/protocols/jabber/buddy.c:1331 src/protocols/jabber/jabber.c:653 @@ -5833,7 +5833,7 @@ #: src/protocols/jabber/buddy.c:1355 src/protocols/jabber/buddy.c:1356 #, fuzzy -msgid "Search for Jabber users" +msgid "Search for XMPP users" msgstr "Search for a buddy by e-mail address" #: src/protocols/jabber/buddy.c:1370 @@ -5959,8 +5959,8 @@ msgstr "Unable to create socket" #: src/protocols/jabber/jabber.c:403 src/protocols/jabber/jabber.c:740 -msgid "Invalid Jabber ID" -msgstr "Invalid Jabber ID" +msgid "Invalid XMPP ID" +msgstr "Invalid XMPP ID" #: src/protocols/jabber/jabber.c:473 #, c-format @@ -6006,8 +6006,8 @@ msgstr "Please fill out the information below to register your new account." #: src/protocols/jabber/jabber.c:704 src/protocols/jabber/jabber.c:705 -msgid "Register New Jabber Account" -msgstr "Register New Jabber Account" +msgid "Register New XMPP Account" +msgstr "Register New XMPP Account" #: src/protocols/jabber/jabber.c:842 msgid "Initializing Stream" @@ -6079,8 +6079,8 @@ msgstr "Password (again)" #: src/protocols/jabber/jabber.c:1160 src/protocols/jabber/jabber.c:1161 -msgid "Change Jabber Password" -msgstr "Change Jabber Password" +msgid "Change XMPP Password" +msgstr "Change XMPP Password" #: src/protocols/jabber/jabber.c:1161 msgid "Please enter your new password" @@ -6130,8 +6130,8 @@ msgstr "Item Not Found" #: src/protocols/jabber/jabber.c:1271 -msgid "Malformed Jabber ID" -msgstr "Malformed Jabber ID" +msgid "Malformed XMPP ID" +msgstr "Malformed XMPP ID" #: src/protocols/jabber/jabber.c:1273 msgid "Not Acceptable" @@ -6377,8 +6377,8 @@ #. * summary #. * description #: src/protocols/jabber/jabber.c:1686 src/protocols/jabber/jabber.c:1688 -msgid "Jabber Protocol Plugin" -msgstr "Jabber Protocol Plugin" +msgid "XMPP Protocol Plugin" +msgstr "XMPP Protocol Plugin" #: src/protocols/jabber/jabber.c:1714 msgid "Use TLS if available" @@ -6428,8 +6428,8 @@ msgstr "Message delivery to %s failed: %s" #: src/protocols/jabber/message.c:233 -msgid "Jabber Message Error" -msgstr "Jabber Message Error" +msgid "XMPP Message Error" +msgstr "XMPP Message Error" #: src/protocols/jabber/message.c:297 #, c-format @@ -12182,8 +12182,8 @@ #~ msgid "Invalid nickname" #~ msgstr "Invalid Username" -#~ msgid "Jabber Profile" -#~ msgstr "Jabber Profile" +#~ msgid "XMPP Profile" +#~ msgstr "XMPP Profile" #~ msgid "Roomlist Error" #~ msgstr "Roomlist Error"
--- a/po/en_CA.po Wed May 09 01:50:06 2007 +0000 +++ b/po/en_CA.po Wed May 09 01:50:50 2007 +0000 @@ -849,10 +849,10 @@ #: plugins/raw.c:154 msgid "" -"Lets you send raw input to text-based protocols (Jabber, MSN, IRC, TOC). Hit " +"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." msgstr "" -"Lets you send raw input to text-based protocols (Jabber, MSN, IRC, TOC). Hit " +"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." #: plugins/relnot.c:63 @@ -2818,8 +2818,8 @@ #: src/gtkdialogs.c:92 #, fuzzy -msgid "Jabber developer" -msgstr "former Jabber developer" +msgid "XMPP developer" +msgstr "former XMPP developer" #: src/gtkdialogs.c:93 msgid "original author" @@ -2992,11 +2992,11 @@ #, fuzzy msgid "" "Gaim is a modular messaging client capable of using AIM, MSN, Yahoo!, " -"Jabber, ICQ, IRC, SILC, Novell GroupWise, Napster, Zephyr, and Gadu-Gadu all " +"XMPP, ICQ, IRC, SILC, Novell GroupWise, Napster, Zephyr, and Gadu-Gadu all " "at once. It is written using GTK+ and is licensed under the GNU GPL.<BR><BR>" msgstr "" "Gaim is a modular messaging client capable of using AIM, MSN, Yahoo!, " -"Jabber, ICQ, IRC, SILC, Novell GroupWise, Napster, Zephyr, and Gadu-Gadu all " +"XMPP, ICQ, IRC, SILC, Novell GroupWise, Napster, Zephyr, and Gadu-Gadu all " "at once. It is written using Gtk+ and is licenced under the GPL.<BR><BR>" #: src/gtkdialogs.c:235 @@ -4996,7 +4996,7 @@ #: src/protocols/gg/gg.c:1495 src/protocols/gg/gg.c:1496 #, fuzzy msgid "Register New Gadu-Gadu Account" -msgstr "Register New Jabber Account" +msgstr "Register New XMPP Account" #: src/protocols/gg/gg.c:1497 msgid "Please, fill in the following fields" @@ -5717,8 +5717,8 @@ msgstr "Birthday" #: src/protocols/jabber/buddy.c:567 src/protocols/jabber/buddy.c:568 -msgid "Edit Jabber vCard" -msgstr "Edit Jabber vCard" +msgid "Edit XMPP vCard" +msgstr "Edit XMPP vCard" #: src/protocols/jabber/buddy.c:569 msgid "" @@ -5729,8 +5729,8 @@ "comfortable." #: src/protocols/jabber/buddy.c:616 -msgid "Jabber ID" -msgstr "Jabber ID" +msgid "XMPP ID" +msgstr "XMPP ID" #: src/protocols/jabber/buddy.c:642 src/protocols/jabber/jabber.c:1711 msgid "Resource" @@ -5808,7 +5808,7 @@ msgstr "" #: src/protocols/jabber/buddy.c:1327 -msgid "Fill in one or more fields to search for any matching Jabber users." +msgid "Fill in one or more fields to search for any matching XMPP users." msgstr "" #: src/protocols/jabber/buddy.c:1331 src/protocols/jabber/jabber.c:653 @@ -5827,7 +5827,7 @@ #: src/protocols/jabber/buddy.c:1355 src/protocols/jabber/buddy.c:1356 #, fuzzy -msgid "Search for Jabber users" +msgid "Search for XMPP users" msgstr "Search for a buddy by e-mail address" #: src/protocols/jabber/buddy.c:1370 @@ -5953,8 +5953,8 @@ msgstr "Unable to create socket" #: src/protocols/jabber/jabber.c:403 src/protocols/jabber/jabber.c:740 -msgid "Invalid Jabber ID" -msgstr "Invalid Jabber ID" +msgid "Invalid XMPP ID" +msgstr "Invalid XMPP ID" #: src/protocols/jabber/jabber.c:473 #, c-format @@ -6000,8 +6000,8 @@ msgstr "Please fill out the information below to register your new account." #: src/protocols/jabber/jabber.c:704 src/protocols/jabber/jabber.c:705 -msgid "Register New Jabber Account" -msgstr "Register New Jabber Account" +msgid "Register New XMPP Account" +msgstr "Register New XMPP Account" #: src/protocols/jabber/jabber.c:842 msgid "Initializing Stream" @@ -6073,8 +6073,8 @@ msgstr "Password (again)" #: src/protocols/jabber/jabber.c:1160 src/protocols/jabber/jabber.c:1161 -msgid "Change Jabber Password" -msgstr "Change Jabber Password" +msgid "Change XMPP Password" +msgstr "Change XMPP Password" #: src/protocols/jabber/jabber.c:1161 msgid "Please enter your new password" @@ -6124,8 +6124,8 @@ msgstr "Item Not Found" #: src/protocols/jabber/jabber.c:1271 -msgid "Malformed Jabber ID" -msgstr "Malformed Jabber ID" +msgid "Malformed XMPP ID" +msgstr "Malformed XMPP ID" #: src/protocols/jabber/jabber.c:1273 msgid "Not Acceptable" @@ -6371,8 +6371,8 @@ #. * summary #. * description #: src/protocols/jabber/jabber.c:1686 src/protocols/jabber/jabber.c:1688 -msgid "Jabber Protocol Plugin" -msgstr "Jabber Protocol Plugin" +msgid "XMPP Protocol Plugin" +msgstr "XMPP Protocol Plugin" #: src/protocols/jabber/jabber.c:1714 msgid "Use TLS if available" @@ -6422,8 +6422,8 @@ msgstr "Message delivery to %s failed: %s" #: src/protocols/jabber/message.c:233 -msgid "Jabber Message Error" -msgstr "Jabber Message Error" +msgid "XMPP Message Error" +msgstr "XMPP Message Error" #: src/protocols/jabber/message.c:297 #, c-format @@ -12162,8 +12162,8 @@ #~ msgid "Invalid nickname" #~ msgstr "Invalid Username" -#~ msgid "Jabber Profile" -#~ msgstr "Jabber Profile" +#~ msgid "XMPP Profile" +#~ msgstr "XMPP Profile" #~ msgid "Roomlist Error" #~ msgstr "Roomlist Error"
--- a/po/en_GB.po Wed May 09 01:50:06 2007 +0000 +++ b/po/en_GB.po Wed May 09 01:50:50 2007 +0000 @@ -2744,10 +2744,10 @@ #: ../libpurple/plugins/psychic.c:21 msgid "" "Causes conversation windows to appear as other users begin to message you. " -"This works for AIM, ICQ, Jabber, Sametime, and Yahoo!" +"This works for AIM, ICQ, XMPP, Sametime, and Yahoo!" msgstr "" "Causes conversation windows to appear as other users begin to message you. " -"This works for AIM, ICQ, Jabber, Sametime, and Yahoo!" +"This works for AIM, ICQ, XMPP, Sametime, and Yahoo!" #: ../libpurple/plugins/psychic.c:66 msgid "You feel a disturbance in the force..." @@ -3025,8 +3025,8 @@ msgstr "AIM Account" #: ../libpurple/protocols/bonjour/bonjour.c:583 -msgid "Jabber Account" -msgstr "Jabber Account" +msgid "XMPP Account" +msgstr "XMPP Account" #: ../libpurple/protocols/bonjour/bonjour.h:35 msgid "Bonjour" @@ -4204,8 +4204,8 @@ #: ../libpurple/protocols/jabber/buddy.c:582 #: ../libpurple/protocols/jabber/buddy.c:583 -msgid "Edit Jabber vCard" -msgstr "Edit Jabber vCard" +msgid "Edit XMPP vCard" +msgstr "Edit XMPP vCard" #: ../libpurple/protocols/jabber/buddy.c:584 msgid "" @@ -4320,7 +4320,7 @@ msgid "The following are the results of your search" msgstr "The following are the results of your search" -#. current comment from Jabber User Directory users.jabber.org +#. current comment from XMPP User Directory users.jabber.org #: ../libpurple/protocols/jabber/buddy.c:1674 msgid "" "Find a contact by entering the search criteria in the given fields. Note: " @@ -4345,8 +4345,8 @@ msgstr "Server Instructions: %s" #: ../libpurple/protocols/jabber/buddy.c:1736 -msgid "Fill in one or more fields to search for any matching Jabber users." -msgstr "Fill in one or more fields to search for any matching Jabber users." +msgid "Fill in one or more fields to search for any matching XMPP users." +msgstr "Fill in one or more fields to search for any matching XMPP users." #: ../libpurple/protocols/jabber/buddy.c:1756 #: ../libpurple/protocols/novell/novell.c:1488 @@ -4357,8 +4357,8 @@ #: ../libpurple/protocols/jabber/buddy.c:1765 #: ../libpurple/protocols/jabber/buddy.c:1766 -msgid "Search for Jabber users" -msgstr "Search for Jabber users" +msgid "Search for XMPP users" +msgstr "Search for XMPP users" #. "Search" #: ../libpurple/protocols/jabber/buddy.c:1767 @@ -4501,8 +4501,8 @@ #: ../libpurple/protocols/jabber/jabber.c:567 #: ../libpurple/protocols/jabber/jabber.c:910 -msgid "Invalid Jabber ID" -msgstr "Invalid Jabber ID" +msgid "Invalid XMPP ID" +msgstr "Invalid XMPP ID" #: ../libpurple/protocols/jabber/jabber.c:638 #, c-format @@ -4556,8 +4556,8 @@ #: ../libpurple/protocols/jabber/jabber.c:873 #: ../libpurple/protocols/jabber/jabber.c:874 -msgid "Register New Jabber Account" -msgstr "Register New Jabber Account" +msgid "Register New XMPP Account" +msgstr "Register New XMPP Account" #. Register button #: ../libpurple/protocols/jabber/jabber.c:875 ../pidgin/gtkaccount.c:1478 @@ -4631,8 +4631,8 @@ #: ../libpurple/protocols/jabber/jabber.c:1368 #: ../libpurple/protocols/jabber/jabber.c:1369 -msgid "Change Jabber Password" -msgstr "Change Jabber Password" +msgid "Change XMPP Password" +msgstr "Change XMPP Password" #: ../libpurple/protocols/jabber/jabber.c:1369 msgid "Please enter your new password" @@ -4686,8 +4686,8 @@ msgstr "Item Not Found" #: ../libpurple/protocols/jabber/jabber.c:1481 -msgid "Malformed Jabber ID" -msgstr "Malformed Jabber ID" +msgid "Malformed XMPP ID" +msgstr "Malformed XMPP ID" #: ../libpurple/protocols/jabber/jabber.c:1483 msgid "Not Acceptable" @@ -4954,8 +4954,8 @@ #. * description #: ../libpurple/protocols/jabber/jabber.c:1972 #: ../libpurple/protocols/jabber/jabber.c:1974 -msgid "Jabber Protocol Plugin" -msgstr "Jabber Protocol Plug-in" +msgid "XMPP Protocol Plugin" +msgstr "XMPP Protocol Plug-in" #: ../libpurple/protocols/jabber/jabber.c:2000 msgid "Force old (port 5223) SSL" @@ -4997,8 +4997,8 @@ msgstr "Message delivery to %s failed: %s" #: ../libpurple/protocols/jabber/message.c:272 -msgid "Jabber Message Error" -msgstr "Jabber Message Error" +msgid "XMPP Message Error" +msgstr "XMPP Message Error" #: ../libpurple/protocols/jabber/message.c:352 #, c-format @@ -12364,8 +12364,8 @@ msgstr "hacker and designated driver [lazy bum]" #: ../pidgin/gtkdialogs.c:114 -msgid "Jabber developer" -msgstr "Jabber developer" +msgid "XMPP developer" +msgstr "XMPP developer" #: ../pidgin/gtkdialogs.c:115 msgid "original author" @@ -12634,7 +12634,7 @@ #: ../pidgin/gtkdialogs.c:360 #, c-format msgid "" -"%s is a modular messaging client capable of using AIM, MSN, Yahoo!, Jabber, " +"%s is a modular messaging client capable of using AIM, MSN, Yahoo!, XMPP, " "ICQ, IRC, SILC, SIP/SIMPLE, Novell GroupWise, Lotus Sametime, Bonjour, " "Zephyr, Gadu-Gadu, and QQ all at once. It is written using GTK+.<BR><BR>You " "may modify and redistribute the program under the terms of the GPL (version " @@ -12643,7 +12643,7 @@ "'COPYRIGHT' file for the complete list of contributors. We provide no " "warranty for this program.<BR><BR>" msgstr "" -"%s is a modular messaging client capable of using AIM, MSN, Yahoo!, Jabber, " +"%s is a modular messaging client capable of using AIM, MSN, Yahoo!, XMPP, " "ICQ, IRC, SILC, SIP/SIMPLE, Novell GroupWise, Lotus Sametime, Bonjour, " "Zephyr, Gadu-Gadu, and QQ all at once. It is written using GTK+.<BR><BR>You " "may modify and redistribute the program under the terms of the GPL (version " @@ -15035,10 +15035,10 @@ #: ../pidgin/plugins/raw.c:178 msgid "" -"Lets you send raw input to text-based protocols (Jabber, MSN, IRC, TOC). Hit " +"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." msgstr "" -"Lets you send raw input to text-based protocols (Jabber, MSN, IRC, TOC). Hit " +"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." #: ../pidgin/plugins/relnot.c:71