changeset 3950:57ff64831bec

Automated merge with ssh://hg.atheme.org//hg/audacious
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 16 Nov 2007 05:32:56 +0200
parents 57dd6ddaa8af (current diff) eb20411bb9e1 (diff)
children de76dbec8e1e
files po/ChangeLog src/audacious/memorypool.c src/audacious/memorypool.h
diffstat 70 files changed, 1731 insertions(+), 2772 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Tue Oct 30 11:22:17 2007 +0200
+++ b/.hgtags	Fri Nov 16 05:32:56 2007 +0200
@@ -5,3 +5,4 @@
 e00e1ab06ba63ac4122d2b122b072e299f2ab3f9 audacious-1.4.0-dr3
 45f44e987b127ce4610d9b0c9c3a6463c496f67d audacious-1.4.0-dr3
 2835f4f3f38801e11778570245ddddded73d3102 audacious-1.4.0-beta2
+2f0eaf15300baa2bb2267101fd35a6fc49f2bb3c audacious-1.4.0
--- a/AUTHORS	Tue Oct 30 11:22:17 2007 +0200
+++ b/AUTHORS	Fri Nov 16 05:32:56 2007 +0200
@@ -7,11 +7,13 @@
 Kieran Clancy <clancy.kieran+audacious@gmail.com>
 Michael Färber <0102@gmx.at>
 Giacomo Lozito <james@develia.org>
+Tomasz Moń <desowin@gmail.com>
 William Pitcock <nenolod@sacredspiral.co.uk>
 Derek Pomery <nemo@m8y.org>
 Mohammed Sameer <msameer@foolab.org>
-Jonathan Schleifer <js@h3c.de>
+Jonathan Schleifer <js-audacious@webkeks.org>
 Stephen Sokolow <deitarion@gmail.com>
+Ben Tucker <ben@tucker.org>
 Tony Vroon <chainsaw@gentoo.org>
 Yoshiki Yazawa <yaz@cc.or.rim.jp>
 
--- a/ChangeLog	Tue Oct 30 11:22:17 2007 +0200
+++ b/ChangeLog	Fri Nov 16 05:32:56 2007 +0200
@@ -128,7 +128,7 @@
   1 file changed, 4 insertions(+), 4 deletions(-)
 
 
-2007-06-01 23:02:59 +0000  Jonathan Schleifer <js@h3c.de>
+2007-06-01 23:02:59 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [4660]
   FreeBSD make doesn't support -include. Revert until it's fixed.
   
@@ -136,7 +136,7 @@
   1 file changed, 1 insertion(+), 1 deletion(-)
 
 
-2007-06-01 22:45:56 +0000  Jonathan Schleifer <js@h3c.de>
+2007-06-01 22:45:56 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [4658]
   - Fixed annoying ".depend: No such file or directory".
   - Removed /.depend.
@@ -445,7 +445,7 @@
   0 files changed
 
 
-2007-05-18 21:01:45 +0000  Jonathan Schleifer <js@h3c.de>
+2007-05-18 21:01:45 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [4586]
   Moved migrate_config.sh to contrib.
   trunk/contrib/migrate_config.sh |   28 ++++++++++++++++++++++++++++
@@ -1698,7 +1698,7 @@
   1 file changed, 3 insertions(+), 4 deletions(-)
 
 
-2007-03-26 16:21:40 +0000  Jonathan Schleifer <js@h3c.de>
+2007-03-26 16:21:40 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [4312]
   Don't show a warning dialog when trying to add .{jpeg,jpg,txt} files.
   
@@ -2522,7 +2522,7 @@
   1 file changed, 1 insertion(+), 1 deletion(-)
 
 
-2007-02-20 12:54:56 +0000  Jonathan Schleifer <js@h3c.de>
+2007-02-20 12:54:56 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [4118]
   Use VFS.
   trunk/src/libid3tag/file.c |    2 +-
@@ -3274,21 +3274,21 @@
   1 file changed, 7 insertions(+), 1 deletion(-)
 
 
-2007-02-07 18:06:49 +0000  Jonathan Schleifer <js@h3c.de>
+2007-02-07 18:06:49 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [3976]
   (I really hate my shell's escaping, ignore this)
   trunk/ChangeLog |    2 +-
   1 file changed, 1 insertion(+), 1 deletion(-)
 
 
-2007-02-07 18:05:19 +0000  Jonathan Schleifer <js@h3c.de>
+2007-02-07 18:05:19 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [3974]
   Too much was reverted here. Removing the " around %U would've been sufficient.
   trunk/src/audacious/audacious.desktop.in |    2 +-
   1 file changed, 1 insertion(+), 1 deletion(-)
 
 
-2007-02-07 15:49:45 +0000  Jonathan Schleifer <js@h3c.de>
+2007-02-07 15:49:45 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [3972]
   Reverted rev 3958 - it breaks opening files with nautilus completely
   trunk/src/audacious/audacious.desktop.in |    2 +-
@@ -4667,14 +4667,14 @@
   2 files changed, 21 insertions(+), 19 deletions(-)
 
 
-2007-01-16 19:12:11 +0000  Jonathan Schleifer <js@h3c.de>
+2007-01-16 19:12:11 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [3710]
   D'oh. I was really too tired when I wrote this. Fixed stupid bugs.
   trunk/migrate_config.sh |    8 ++++----
   1 file changed, 4 insertions(+), 4 deletions(-)
 
 
-2007-01-16 18:35:30 +0000  Jonathan Schleifer <js@h3c.de>
+2007-01-16 18:35:30 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [3708]
   Replaced intricate part.
   trunk/migrate_config.sh |    8 ++++----
@@ -4850,14 +4850,14 @@
   1 file changed, 1 insertion(+)
 
 
-2007-01-14 01:02:39 +0000  Jonathan Schleifer <js@h3c.de>
+2007-01-14 01:02:39 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [3668]
   Fixed make install.
   trunk/Makefile |    4 +---
   1 file changed, 1 insertion(+), 3 deletions(-)
 
 
-2007-01-14 00:41:21 +0000  Jonathan Schleifer <js@h3c.de>
+2007-01-14 00:41:21 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [3666]
   - Added script for migration to XDG basedir.
   - Fixed tons of warnings.
@@ -4877,14 +4877,14 @@
   12 files changed, 49 insertions(+), 28 deletions(-)
 
 
-2007-01-14 00:09:38 +0000  Jonathan Schleifer <js@h3c.de>
+2007-01-14 00:09:38 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [3664]
   Fixed: audtool.c:883: warning: implicit declaration of function 'strncmp'
   trunk/src/audtool/audtool.c |    1 +
   1 file changed, 1 insertion(+)
 
 
-2007-01-14 00:07:48 +0000  Jonathan Schleifer <js@h3c.de>
+2007-01-14 00:07:48 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [3662]
   Fixed: configdb_rcfile.c:57: warning: suggest parentheses around assignment used as truth value
   trunk/src/libaudacious/configdb_rcfile.c |    2 +-
@@ -4952,14 +4952,14 @@
   1 file changed, 25 insertions(+), 25 deletions(-)
 
 
-2007-01-13 17:34:48 +0000  Jonathan Schleifer <js@h3c.de>
+2007-01-13 17:34:48 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [3648]
   Fix missing s
   trunk/src/audacious/main.c |    2 +-
   1 file changed, 1 insertion(+), 1 deletion(-)
 
 
-2007-01-13 17:33:35 +0000  Jonathan Schleifer <js@h3c.de>
+2007-01-13 17:33:35 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [3646]
   Remove old shit.
   trunk/configure.ac                       |    3 +--
@@ -4967,7 +4967,7 @@
   2 files changed, 2 insertions(+), 17 deletions(-)
 
 
-2007-01-13 17:19:52 +0000  Jonathan Schleifer <js@h3c.de>
+2007-01-13 17:19:52 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [3644]
   Full support for XDG basedir added. The old config doesn't get automatically converted yet.
   trunk/src/audacious/main.c            |   66 +++++++++++++++++++++++-----------
@@ -4976,14 +4976,14 @@
   3 files changed, 48 insertions(+), 34 deletions(-)
 
 
-2007-01-12 20:33:07 +0000  Jonathan Schleifer <js@h3c.de>
+2007-01-12 20:33:07 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [3642]
   Same for -pipe.
   trunk/configure.ac |    2 +-
   1 file changed, 1 insertion(+), 1 deletion(-)
 
 
-2007-01-12 20:32:12 +0000  Jonathan Schleifer <js@h3c.de>
+2007-01-12 20:32:12 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [3640]
   Add -Wall to CFLAGS by default if the CC is gcc
   trunk/configure.ac |    2 ++
@@ -5183,7 +5183,7 @@
   176 files changed, 52955 insertions(+), 52937 deletions(-)
 
 
-2007-01-11 13:47:16 +0000  Jonathan Schleifer <js@h3c.de>
+2007-01-11 13:47:16 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [3634]
   Added #ifdefs around $HOME/.audacious compatibility code
   trunk/configure.ac                   |    1 +
@@ -5253,14 +5253,14 @@
   1 file changed, 1 insertion(+), 1 deletion(-)
 
 
-2007-01-09 22:53:19 +0000  Jonathan Schleifer <js@h3c.de>
+2007-01-09 22:53:19 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [3618]
   Fuck, I forgot to quote the $ in the commit msg, so my home was in the ChangeLog.
   trunk/ChangeLog |    2 +-
   1 file changed, 1 insertion(+), 1 deletion(-)
 
 
-2007-01-09 22:51:38 +0000  Jonathan Schleifer <js@h3c.de>
+2007-01-09 22:51:38 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [3616]
   Initial XDG basedir support.
   trunk/libaudacious/configdb_rcfile.c |   23 ++++++++++++++++++++---
@@ -5274,7 +5274,7 @@
   1 file changed, 1 insertion(+), 1 deletion(-)
 
 
-2007-01-09 15:45:01 +0000  Jonathan Schleifer <js@h3c.de>
+2007-01-09 15:45:01 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [3612]
   Change $HOME/.audacious to $HOME/.config/audacious
   trunk/configure.ac |    2 +-
@@ -5374,7 +5374,7 @@
   2 files changed, 3 insertions(+), 12 deletions(-)
 
 
-2007-01-07 22:14:14 +0000  Jonathan Schleifer <js@h3c.de>
+2007-01-07 22:14:14 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [3594]
   WTF addr? ITYM ptr!
   trunk/audacious/memorypool.c |    2 +-
@@ -8476,7 +8476,7 @@
   1 file changed, 17 insertions(+), 22 deletions(-)
 
 
-2006-11-24 17:49:06 +0000  Jonathan Schleifer <js@h3c.de>
+2006-11-24 17:49:06 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [3003]
   Fixed wrong help, it has to be --with-rc-path.
   Found by Benny Siegert <bsiegert@gmx.de>
@@ -8654,7 +8654,7 @@
   1 file changed, 40 insertions(+), 2030 deletions(-)
 
 
-2006-11-19 18:50:21 +0000  Jonathan Schleifer <js@h3c.de>
+2006-11-19 18:50:21 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [2963]
   Fixed broken Classic skin.
   
@@ -9953,7 +9953,7 @@
   1 file changed, 8 insertions(+), 7 deletions(-)
 
 
-2006-10-07 20:31:15 +0000  Jonathan Schleifer <js@h3c.de>
+2006-10-07 20:31:15 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [2641]
   - Replace ?= at CFLAGS, CPPFLAGS and CXXFLAGS with +=
   - Replace ?= at CC, CPP and CXX with =
@@ -10292,7 +10292,7 @@
   3 files changed, 301 insertions(+), 13 deletions(-)
 
 
-2006-10-05 04:05:51 +0000  Jonathan Schleifer <js@h3c.de>
+2006-10-05 04:05:51 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [2563]
   WTF, and now even a typo in the ChangeLog! (Fixed.)
   
@@ -10300,7 +10300,7 @@
   1 file changed, 1 insertion(+), 1 deletion(-)
 
 
-2006-10-05 04:04:50 +0000  Jonathan Schleifer <js@h3c.de>
+2006-10-05 04:04:50 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [2561]
   Just saw that it's ordered by last name. Of course, I was too blind
   to see that and just added myself at the wrong place. oO
@@ -10309,7 +10309,7 @@
   1 file changed, 2 insertions(+), 2 deletions(-)
 
 
-2006-10-05 04:02:06 +0000  Jonathan Schleifer <js@h3c.de>
+2006-10-05 04:02:06 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [2559]
   Just saw that we have an AUTHORS file here as well, so I added myself
   here, too.
@@ -10469,7 +10469,7 @@
   4 files changed, 25 insertions(+), 11 deletions(-)
 
 
-2006-10-04 19:47:37 +0000  Jonathan Schleifer <js@h3c.de>
+2006-10-04 19:47:37 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [2523]
   The default values for old skins were wrong. But since changing from
   the new skin to an old doesn't work anyway, we can set these to 0 so
@@ -10964,7 +10964,7 @@
   +1 -1           trunk/configure.ac  
 
 
-2006-09-17 02:37:08 +0000  Jonathan Schleifer <js@h3c.de>
+2006-09-17 02:37:08 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [2395]
   Fixed unused variable and missing type conversion
 
@@ -10973,7 +10973,7 @@
   +4 -2           trunk/Plugins/Visualization/paranormal/client.c  
 
 
-2006-09-17 02:21:06 +0000  Jonathan Schleifer <js@h3c.de>
+2006-09-17 02:21:06 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [2393]
   Add #undef FSCALE, since it's already defined on OpenBSD
 
@@ -10981,7 +10981,7 @@
   +1 -0           trunk/Plugins/Input/timidity/libtimidity/options.h  
 
 
-2006-09-17 02:18:59 +0000  Jonathan Schleifer <js@h3c.de>
+2006-09-17 02:18:59 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [2391]
   #undef TRUE and FALSE before inclusion of mpcdec.h since both, GTK and mpcdev, define this, which leads to a hard error on OpenBSD
 
@@ -10989,7 +10989,7 @@
   +2 -0           trunk/Plugins/Input/musepack/libmpc.h  
 
 
-2006-09-17 02:13:26 +0000  Jonathan Schleifer <js@h3c.de>
+2006-09-17 02:13:26 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [2389]
   #undef ALIGN, since it's already defined on OpenBSD.
 
@@ -10997,7 +10997,7 @@
   +1 -0           trunk/Plugins/Input/wma/libffwma/utils.c  
 
 
-2006-09-17 02:10:07 +0000  Jonathan Schleifer <js@h3c.de>
+2006-09-17 02:10:07 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [2387]
   Seems like someone did a fix for Linux' iconv like I did for BSD's in another file. Added an #ifdef here, too.
 
@@ -11005,7 +11005,7 @@
   +4 -0           trunk/Plugins/Input/flac/plugin_common/charset.c  
 
 
-2006-09-17 01:58:23 +0000  Jonathan Schleifer <js@h3c.de>
+2006-09-17 01:58:23 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [2385]
   nenolod's fix for the soundcard.h check was incomplete, fixed
 
@@ -11061,7 +11061,7 @@
   +0 -58          trunk/Plugins/Input/wma/libffwma/mms.c  
 
 
-2006-09-17 00:17:22 +0000  Jonathan Schleifer <js@h3c.de>
+2006-09-17 00:17:22 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [2373]
   Fixed a LOT of warnings showing up with -Wall. This is the first step
   towards making Audacious compile with -Wall -Werror, but it's still far
@@ -11085,7 +11085,7 @@
   +3 -3           trunk/Plugins/Input/wma/libffwma/futils.c  
 
 
-2006-09-16 23:26:54 +0000  Jonathan Schleifer <js@h3c.de>
+2006-09-16 23:26:54 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [2371]
   Fixed a lot of warnings that only showed up on *BSD.
 
@@ -11109,7 +11109,7 @@
   +1 -1           trunk/configure.ac  
 
 
-2006-09-16 17:08:23 +0000  Jonathan Schleifer <js@h3c.de>
+2006-09-16 17:08:23 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [2367]
   Fixed 3 warnings, 2 unused variables and 1 missing include
 
@@ -11126,7 +11126,7 @@
   +4 -3           trunk/Plugins/Input/cue/cuesheet.c  
 
 
-2006-09-16 14:33:28 +0000  Jonathan Schleifer <js@h3c.de>
+2006-09-16 14:33:28 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [2363]
   More .cpp -> .cxx. Noticed by Chainsaw. Shame on me that I forgot some ;).
   
@@ -11339,7 +11339,7 @@
   +0 -1           trunk/audacious/Makefile  
 
 
-2006-09-15 15:01:40 +0000  Jonathan Schleifer <js@h3c.de>
+2006-09-15 15:01:40 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [2331]
   This adds -lossaudio to the OSS and esd plugin on platforms having that libs. With this, Audacious finally build & runs perfectly on OpenBSD.
   
@@ -11360,7 +11360,7 @@
   +2 -2           trunk/audacious/mainwin.c  
 
 
-2006-09-15 13:36:26 +0000  Jonathan Schleifer <js@h3c.de>
+2006-09-15 13:36:26 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [2327]
   - Removed .cpp.o target since we don't have any .cpp files anymore.
   - A test build then revealed that we still had two .cpp files in
@@ -11391,7 +11391,7 @@
   +2 -0           trunk/mk/init.mk  
 
 
-2006-09-14 20:56:35 +0000  Jonathan Schleifer <js@h3c.de>
+2006-09-14 20:56:35 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [2323]
   * One more .cpp -> .cxx
   * Changed sinclude -> include for OpenBSD make compatibility
@@ -11406,7 +11406,7 @@
   +0 -5           trunk/mk/objective.mk  
 
 
-2006-09-14 20:38:05 +0000  Jonathan Schleifer <js@h3c.de>
+2006-09-14 20:38:05 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [2321]
   Forgot to change .cpp -> .cxx in the Makefile.in. Shame on me...
   
@@ -11415,7 +11415,7 @@
   +35 -35         trunk/Plugins/Input/console/Makefile.in  
 
 
-2006-09-14 20:33:10 +0000  Jonathan Schleifer <js@h3c.de>
+2006-09-14 20:33:10 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [2319]
   .cpp -> .cxx
   This has the nice side effect that we don't need to add .cpp to .SUFFIXES for OpenBSD.
@@ -11467,7 +11467,7 @@
   +4 -4           trunk/audacious/playlist.c  
 
 
-2006-09-14 15:46:01 +0000  Jonathan Schleifer <js@h3c.de>
+2006-09-14 15:46:01 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [2315]
   Install audacious_player.xpm as well, so one can use it as a desktop icon.
   Requested by Jan Schummers <darkadmiral@onlinehome.de>.
@@ -11477,7 +11477,7 @@
   +1 -0           trunk/audacious/images/Makefile.in  
 
 
-2006-09-14 14:50:44 +0000  Jonathan Schleifer <js@h3c.de>
+2006-09-14 14:50:44 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [2313]
   Made the content of the password field in the AudioScrobbler plugin invisible.
   
@@ -11486,7 +11486,7 @@
   +1 -0           trunk/Plugins/General/scrobbler/configure.c  
 
 
-2006-09-14 14:40:39 +0000  Jonathan Schleifer <js@h3c.de>
+2006-09-14 14:40:39 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [2311]
   Just saw another bug in the same line. The if was always false.
   
@@ -11495,7 +11495,7 @@
   +1 -1           trunk/mk/objective.mk  
 
 
-2006-09-14 14:38:06 +0000  Jonathan Schleifer <js@h3c.de>
+2006-09-14 14:38:06 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [2309]
   Fixed mk/objective.mk so that there won't be any
   [: ==: unexpected operator
@@ -11536,7 +11536,7 @@
   +12 -0          trunk/libaudacious/vfs_stdio.c  
 
 
-2006-09-13 21:01:54 +0000  Jonathan Schleifer <js@h3c.de>
+2006-09-13 21:01:54 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [2301]
   Added BSD make to the recommended make versions since it's officially supported now.
   
@@ -11554,7 +11554,7 @@
   +1 -1           trunk/ChangeLog  
 
 
-2006-09-13 20:56:08 +0000  Jonathan Schleifer <js@h3c.de>
+2006-09-13 20:56:08 +0000  Jonathan Schleifer <js-audacious@webkeks.org>
   revision [2297]
   Fixed some Makefiles to make it work with BSD make.
   I checked that it doesn't break gmake (compile & run works).
@@ -11571,7 +11571,7 @@
 
 2006-09-13 18:03:25 +0000  Tony Vroon <chainsaw@gentoo.org>
   revision [2295]
-  Link C++ plugins correctly on *BSD, by Jonathan Schleifer <js@h3c.de>.
+  Link C++ plugins correctly on *BSD, by Jonathan Schleifer <js-audacious@webkeks.org>.
 
   Changes:        Modified:
   +1 -1           trunk/Plugins/Input/modplug/gui/support.h  
@@ -11580,7 +11580,7 @@
 
 2006-09-13 16:40:07 +0000  Tony Vroon <chainsaw@gentoo.org>
   revision [2293]
-  Remove built-in soundcard.h silliness so OSS actually works on *BSD, by Jonathan Schleifer <js@h3c.de>.
+  Remove built-in soundcard.h silliness so OSS actually works on *BSD, by Jonathan Schleifer <js-audacious@webkeks.org>.
 
   Changes:        Modified:
   +5 -1           trunk/Plugins/Input/cdaudio/cdaudio.h  
@@ -11598,7 +11598,7 @@
 
 2006-09-13 15:06:57 +0000  Tony Vroon <chainsaw@gentoo.org>
   revision [2289]
-  4-way scroll support in the main window (volume & seek) by Jonathan Schleifer <js@h3c.de>.
+  4-way scroll support in the main window (volume & seek) by Jonathan Schleifer <js-audacious@webkeks.org>.
 
   Changes:        Modified:
   +20 -8          trunk/audacious/mainwin.c  
@@ -11606,7 +11606,7 @@
 
 2006-09-13 13:38:40 +0000  Tony Vroon <chainsaw@gentoo.org>
   revision [2287]
-  Fixes for NetBSD by Jonathan Schleifer <js@h3c.de>
+  Fixes for NetBSD by Jonathan Schleifer <js-audacious@webkeks.org>
 
   Changes:        Modified:
   +2 -0           trunk/Plugins/Container/xspf/xspf.c  
--- a/NEWS	Tue Oct 30 11:22:17 2007 +0200
+++ b/NEWS	Fri Nov 16 05:32:56 2007 +0200
@@ -1,3 +1,30 @@
+Audacious 1.4.1 (2007-11-??)
+
+Enhancements:
+* The skin code has been tweaked a little to fix loading of
+  more substandard winamp skins.
+  (http://boards.nenolod.net/viewtopic.php?f=5&t=859)
+* Playlists now carry an atomic serial number in order to avoid
+  unnecessary reloading of metadata.
+* The command names used by audtool have been sanitized in order
+  to make some leve of sense.
+* Add many new calls to libaudclient which were unimplemented after
+  DBus transition.
+
+Bugfixes:
+* [Bugzilla #53]: UTF-8 validation gives false positives
+  (Reported by Kosma Moczek; Fixed by Yoshiki Yazawa)
+* [Bugzilla #20]: status icon plugin breaks the 'always on top' feature
+  (Reported by Dorian Scholz; Fixed by Tomasz Moń)
+* playback_get_length() was returning the typecode of FIELD_LENGTH, not
+  it's value (Fixed by Yoshiki Yazawa)
+* audctrl.h was dependent on #ifdef __cplusplus being a valid macro,
+  now we use G_BEGIN_DECLS/G_END_DECLS to handle that.
+
+Audacious 1.4.0 (2007-11-01)
+
+* Everything ;)
+
 Audacious 1.3.0 (2007-03-02)
 
 Enhancements
Binary file Skins/Default/pledit.png has changed
Binary file Skins/Default/posbar.png has changed
--- a/buildsys.mk.in	Tue Oct 30 11:22:17 2007 +0200
+++ b/buildsys.mk.in	Fri Nov 16 05:32:56 2007 +0200
@@ -1,5 +1,5 @@
 #
-#  Copyright (c) 2007, Jonathan Schleifer <js@h3c.de>
+#  Copyright (c) 2007, Jonathan Schleifer <js-buildsys@webkeks.org>
 #
 #  Permission to use, copy, modify, and/or distribute this software for any
 #  purpose with or without fee is hereby granted, provided that the above
--- a/configure.ac	Tue Oct 30 11:22:17 2007 +0200
+++ b/configure.ac	Fri Nov 16 05:32:56 2007 +0200
@@ -1,6 +1,6 @@
 
 dnl Process this file with autoconf to produce a configure script.
-AC_INIT([audacious], [1.4.0], [bugs+audacious@atheme.org])
+AC_INIT([audacious], [1.4.1], [bugs+audacious@atheme.org])
 AC_PREREQ([2.59])
 
 AC_CANONICAL_HOST
@@ -87,8 +87,8 @@
 
 dnl Check for GTK/GLib/GThread/Pango
 
-PKG_CHECK_MODULES(GTK, [glib-2.0 >= 2.10.0 gtk+-2.0 >= 2.6.0 gthread-2.0 pango],
-    [ADD_PC_REQUIRES([glib-2.0 >= 2.10.0, gtk+-2.0 >= 2.6.0])],
+PKG_CHECK_MODULES(GTK, [glib-2.0 >= 2.10.0 gtk+-2.0 >= 2.10.0 gthread-2.0 pango],
+    [ADD_PC_REQUIRES([glib-2.0 >= 2.10.0, gtk+-2.0 >= 2.10.0])],
     [AC_MSG_ERROR([Cannot find glib2/gtk2/pango])]
 )
 
--- a/m4/buildsys.m4	Tue Oct 30 11:22:17 2007 +0200
+++ b/m4/buildsys.m4	Fri Nov 16 05:32:56 2007 +0200
@@ -1,5 +1,5 @@
 dnl
-dnl Copyright (c) 2007, Jonathan Schleifer <js@h3c.de>
+dnl Copyright (c) 2007, Jonathan Schleifer <js-buildsys@webkeks.org>
 dnl
 dnl Permission to use, copy, modify, and/or distribute this software for any
 dnl purpose with or without fee is hereby granted, provided that the above
--- a/po/ChangeLog	Tue Oct 30 11:22:17 2007 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1211 +0,0 @@
-
-Wed Nov 26 09:20:47 SGT 2003  Chong Kai Xiong  <descender@phreaker.net>
-
-	* Makefile.in.in: New file, from gettext-0.12.1.
-
-	* en@boldquot.header: New file, from gettext-0.12.1.
-
-	* en@quot.header: New file, from gettext-0.12.1.
-
-Fri Aug  8 17:12:10 CEST 2003  Hvard Kvlen  <havardk@xmms.org>
-
-	* sl.po: New translation by Tadej Panjtar <panjtar@email.si>
-
-	* LINGUAS: Add "sl" (Slovenian).
-
-Wed Jul 16 01:41:20 CEST 2003  Hvard Kvlen  <havardk@xmms.org>
-
-	* no.po: Updated.
-
-Mon Jul 14 00:34:06 CEST 2003  Hvard Kvlen  <havardk@xmms.org>
-
-	* en.po: New "translation".  The only things that are translated
-	are non-ascii characters.
-
-	* LINGUAS: Add "en".
-
-Sat Jul  5 02:18:03 CEST 2003  Hvard Kvlen  <havardk@xmms.org>
-
-	* LINGUAS: Add Belarusian (be) and Welsh (cy).
-
-	* cy.po: New translation by: 
-	Rhoslyn Prys <rhoslyn.prys@meddal.org.uk>
-
-	* be.po: New translation by: Smaliakou Zmicer <damaviku@pisem.net>
-
-	* pt.po: Updated translation by Jorge Costa <Jorgercosta@netc.pt>
-
-	* uk.po: Updated translation by 
-	Dmytro Koval'ov <kov@tokyo.email.ne.jp>
-
-Tue Jan  7 23:43:10 CET 2003  Hvard Kvlen  <havardk@xmms.org>
-
-	* ja.po: Updated translation by Hiroshi Takekawa <sian@big.or.jp>.
-
-Wed Dec 11 23:17:10 CET 2002  Hvard Kvlen  <havardk@xmms.org>
-
-	* zh_TW.po: Updated translation by 
-	Chun-Chung Chen <cjj@u.washington.edu>
-
-Fri Nov 22 22:10:48 BRST 2002 Juan Carlos C. y Castro <jcastro@vialink.com.br>
-
-	* pt_BR.po: Updated translation.
-
-Sun Oct 27 20:17:45 CET 2002  Hvard Kvlen  <havardk@xmms.org>
-
-	* ca.po: Updated translation by 
-	Albert Astals Cid <astals11@terra.es>
-
-	* ro.po: Updated translation by Miu Moldovan <dumol@go.ro>
-
-	* no.po: Updated translation.
-
-Wed Sep 11 11:25:37 CEST 2002  Hvard Kvlen  <havardk@xmms.org>
-
-	* nl.po: Fixed two errors that new gettext's would abort on.
-
-Tue Jul 30 23:24:12 BRT 2002 Juan Carlos C. y Castro <jcastro@vialink.com.br>
-
-	* pt_BR.po: Some language names were missing the ':'.
-
-Tue Jul 30 23:04:05 BRT 2002 Juan Carlos C. y Castro <jcastro@vialink.com.br>
-
-	* pt_BR.po: Updated translation.
-
-Mon Jul 29 12:56:24 CEST 2002  Hvard Kvlen  <havardk@xmms.org>
-
-	* ru.po: Updated translation by 
-	Alexandr P. Kovalenko <never@nevermind.kiev.ua>
-
-	* nl.po: Updated translation by Bart Coppens <coppensbart@pi.be>
-
-Tue May 21 02:09:36 BRT 2002 Juan Carlos C. y Castro <jcastro@vialink.com.br>
-
-	* pt_BR.po: Updated translation.
-
-Sun May 12 17:41:35 CEST 2002  Hvard Kvlen  <havardk@xmms.org>
-
-	* mk.po: New translation by Stojcev Darko <atom1c@linux.net.mk>
-
-Mon May  6 16:50:28 CEST 2002  Hvard Kvlen  <havardk@xmms.org>
-
-	* no.po: Updated translation by 
-	Terje Bjerkelia <terje@bjerkelia.com>
-
-Wed Apr 10 15:19:22 CEST 2002  Hvard Kvlen  <havardk@xmms.org>
-
-	* ru.po: Updated translation by 
-	Alexandr P. Kovalenko <never@nevermind.kiev.ua>
-
-Tue Mar 26 15:20:20 CET 2002  Hvard Kvlen  <havardk@xmms.org>
-
-	* cs.po: One string updated.
-	Patch by Martin Macok <martin.macok@underground.cz>
-
-2002-03-14  Christian Rose  <menthos@menthos.com>
-
-	* sv.po: Changed Swedish translation.
-
-Tue Mar  5 15:47:41 CET 2002  Hvard Kvlen  <havardk@xmms.org>
-
-	* es.po: Updated translation by 
-	Jordi Mallach <jordi@sindominio.net>
-
-2002-03-03  Christian Rose  <menthos@menthos.com>
-
-	* sv.po: Changed Swedish translation.
-
-2002-03-02  Christian Rose  <menthos@menthos.com>
-
-	* sv.po: Updated Swedish translation.
-
-Mon Feb 11 13:08:44 CET 2002  Thomas Nilsson <thomas@xmms.org>
-
-	* *.po: Updated copyright year.
-
-Fri Jan 25 18:48:08 CET 2002  Hvard Kvlen  <havardk@xmms.org>
-
-	* ru.po: Updated translation by 
-	Alexandr P. Kovalenko <never@nevermind.kiev.ua>
-
-Thu Jan 24 19:48:47 BRST 2002 Juan Carlos C. y Castro <jcastro@vialink.com.br>
-
-	* pt_BR.po: Updated translation.
-
-Sun Jan 20 21:35:24 CET 2002  Hvard Kvlen  <havardk@xmms.org>
-
-	* ru.po: Updated translation by 
-	Alexandr P. Kovalenko <never@nevermind.kiev.ua>
-
-2002-01-04  Hvard Kvlen  <havardk@xmms.org>
-
-	* no.po: Updated.
-
-Sat Dec 29 19:36:18 CET 2001  Hvard Kvlen  <havardk@xmms.org>
-
-	* fr.po: Updated translation by 
-	Arnaud Boissinot <arnaud.boissinot@wanadoo.fr>
-
-2001-12-29  Christian Rose  <menthos@menthos.com>
-
-	* POTFILES.in: Sorted.
-	* sv.po: Updated Swedish translation.
-
-Fri Dec 14 22:36:08 CET 2001  Hvard Kvlen  <havardk@xmms.org>
-
-	* ro.po: Updated translation by 
-	Miu Moldovan <dumol@go.ro>
-
-	* az.po: Updated translation by 
-	Vasif Cabbarli <azerb_linux@hotmail.com>
-
-Tue Dec 11 23:44:35 CET 2001  Hvard Kvlen  <havardk@xmms.org>
-
-	* uk.po: Updated translation by Dmytro Koval'ov
-
-	* de.po: Updated translation by 
-	Colin Marquardt <colin@marquardt-home.de>
-
-	* ro.po: Updated translation by 
-	Miu Moldovan <dumol@go.ro>
-
-	* tr.po: Updated translation by 
-	mer Fadl USTA <omer_fad@hotmail.com>
-
-	* cs.po: Updated translation by 
-	Radek Vybiral <Radek.Vybiral@vsb.cz>
-
-	* hu.po: Updated translation by Arpad Biro <biro_arpad@yahoo.com>
-
-	* th.po: Updated translation by 
-	Supphachoke Suntiwichaya <webmaster@mrchoke.f2s.com>
-
-Sat Dec  8 12:08:22 BRST 2001 Juan Carlos C. y Castro <jcastro@vialink.com.br>
-
-	* pt_BR.po: Fixed inconsistencies in menu translation.
-
-Sat Dec  8 12:11:58 CET 2001  Hvard Kvlen  <havardk@xmms.org>
-
-	* ja.po: Updated translation by 
-	Hiroshi Takekawa <takekawa@sr3.t.u-tokyo.ac.jp>
-
-	* zh_TW.po: Updated translation by 
-	Chun-Chung Chen <cjj@u.washington.edu>
-
-	* el.po: Updated translation by 
-	Thanos Kyritsis <djart@hellug.gr>
-
-	* pl.po: Updated translation by 
-	GNOME PL Team <translators@gnome.pl>
-
-	* de.po: Updated translation by 
-	Colin Marquardt <colin@marquardt-home.de>
-
-	* hr.po: Updated translation by 
-	Vlatko Kosturjak <kost@iname.com>
-
-	* es.po: Updated translation by 
-	Jordi Mallach <jordi@sindominio.net>
-
-	* fr.po: Updated translation by 
-	Arnaud Boissinot <arnaud.boissinot@wanadoo.fr>
-
-	* gl.po: Updated translation by 
-	Alberto Garca <berto@gpul.org>
-
-	* nn.po: Updated translation by 
-	Roy-Magne Mo <rmo@sunnmore.net>
-
-2001-12-07  Christian Rose  <menthos@menthos.com>
-
-	* sv.po: Updated Swedish translation.
-
-Tue Dec  4 19:42:25 BRST 2001 Juan Carlos C. y Castro <jcastro@vialink.com.br>
-
-	* pt_BR.po: Updated translation.
-
-2001-12-03  Christian Rose  <menthos@menthos.com>
-
-	* sv.po: Updated Swedish translation.
-
-2001-11-27  Christian Rose  <menthos@menthos.com>
-
-	* sv.po: Updated Swedish translation.
-
-Thu Nov 15 22:06:11 BRST 2001 Juan Carlos C. y Castro <jcastro@vialink.com.br>
-
-	* pt_BR.po: Updated translation.
-
-Wed Nov 14 00:02:51 CET 2001  Hvard Kvlen  <havardk@xmms.org>
-
-	* ja.po: Updated translation by 
-	Hiroshi Takekawa <takekawa@sr3.t.u-tokyo.ac.jp>
-
-Mon Nov 12 22:44:20 CET 2001  Hvard Kvlen  <havardk@xmms.org>
-
-	* sv.po: Updated translation by 
-	Christian Rose <menthos@menthos.com>
-
-Sat Nov 10 22:11:37 BRST 2001 Juan Carlos C. y Castro <jcastro@vialink.com.br>
-
-	* pt_BR.po: Updated translation.
-
-Sat Nov 10 18:46:14 CET 2001  Hvard Kvlen  <havardk@xmms.org>
-
-	* sv.po: Updated translation by 
-	Christian Rose <menthos@menthos.com>
-
-	* pl.po: Updated translation by 
-	GNOME PL Team <translators@gnome.pl>
-
-Wed Nov  7 01:26:26 CET 2001  Hvard Kvlen  <havardk@xmms.org>
-
-	* th.po: New translation by 
-	Supphachoke Suntiwichaya <webmaster@mrchoke.f2s.com>
-
-Fri Sep 21 10:57:54 BRT 2001 Juan Carlos C. y Castro <jcastro@vialink.com.br>
-
-	* pt_BR.po: Updated translation.
-
-Tue Sep 18 21:03:21 CEST 2001  Hvard Kvlen  <havardk@xmms.org>
-
-	* es.po: Updated translation by 
-	Jordi Mallach <jordi@sindominio.net>
-
-	* tr.po: Updated translation by 
-	mer Fadl USTA	<omer_fad@hotmail.com>
-
-	* sk.po: Updated translation by Jan Matis <damned@hq.sk>
-
-	* lv.po: Updated translation by Juris Kudi <cooker@inbox.lv>
-
-	* ko.po: Updated translation by Jaegeum <baedaron@hananet.net>
-
-	* ga.po: Updated translation by 
-	Alastair McKinstry <mckinstry@computer.org>
-
-	* es.po: Updated translation by 
-	Juan Manuel Garca Molina <juanmagm@mail.com>
-
-	* da.po: Updated translation by Keld Simonsen <keld@dkuug.dk>
-
-	* eu.po: New translation by 
-	Iigo Salvador Azurmendi <xalba@euskalnet.net>
-
-	* tg.po: New translation by 
-	Dilshod Marupov	<abdula@khujandcomptech.dyn.tj> and
-	Roger Kovacs <rkovacs@khujandcomptech.dyn.tj>
-
-	* vi.po: New translation by Trinh Minh Thanh <tmthanh@yahoo.com>
-
-	* nn.po: Fixed one error.
-
-Tue Sep 18 00:28:00 BRT 2001 Juan Carlos C. y Castro <jcastro@vialink.com.br>
-
-	* pt_BR.po: Updated translation.
-
-Sun Aug 26 19:20:02 CEST 2001  Hvard Kvlen  <havardk@xmms.org>
-
-	* ja.po: Updated translation by 
-	Hiroshi Takekawa <takekawa@sr3.t.u-tokyo.ac.jp>
-
-	* nn.po: New translation by Roy-Magne Mo <rmo@sunnmore.net>.
-
-Sun Aug 19 19:07:04 CEST 2001  Hvard Kvlen  <havardk@xmms.org>
-
-	* pt_BR.po: Updated translation by 
-	Juan Carlos Castro y Castro <jcastro@appi.com.br>
-
-	* sk.po: Updated translation by 
-	Pavol Cvengros <orpheus@hq.alert.sk>
-
-	* hu.po: Updated translation by 
-	Arpad Biro <biro_arpad@yahoo.com>
-
-	* es.po: Updated translation by 
-	Juan Manuel Garca Molina <juanmagm@mail.com>
-
-	* eo.po: Updated translation by 
-	D. Dale Gulledge <dsplat@rochester.rr.com>
-
-	* no.po: Updated translation by 
-	Andreas Bergstrm <abergstr@halden.net>
-
-Thu Jun 21 01:23:37 CEST 2001  Hvard Kvlen  <havardk@xmms.org>
-
-	* *.po: Update the bugreport url for all translations.
-	Patch by Thomas Nilsson <thomas@xmms.org>.
-
-Mon Jun 18 18:50:37 CEST 2001  Hvard Kvlen  <havardk@xmms.org>
-
-	* sv.po: Updated translation by 
-	Christian Rose <menthos@menthos.com>
-
-Wed Jun 13 16:59:34 CEST 2001  Hvard Kvlen  <havardk@xmms.org>
-
-	* az.po, es.po, fr.po, ko.po, no.po, sk.po: Fixed some typos in
-	menus.
-
-Sun Jun 10 23:20:21 CEST 2001  Hvard Kvlen  <havardk@xmms.org>
-
-	* pl.po: Updated translation by 
-	Grzegorz Kowal <g_kowal@poczta.onet.pl>
-
-	* az.po, da.po, es.po, fr.po, ga.po, hr.po, ro.po, uk.po: Fixed
-	errors with menus.
-
-	* no.po: Updated.
-
-Thu Jun  7 18:31:40 CEST 2001  Hvard Kvlen  <havardk@xmms.org>
-
-	* de.po: Updated translation by 
-	Colin Marquardt <colin@marquardt-home.de>
-
-Wed Jun  6 14:15:09 CEST 2001  Hvard Kvlen  <havardk@xmms.org>
-
-	* hu.po: Commit the right version this time.  Update by 
-	Arpad Biro <biro_arpad@yahoo.com>
-
-Tue Jun  5 15:44:08 CEST 2001  Hvard Kvlen  <havardk@xmms.org>
-
-	* no.po: Updated.
-
-	* da.po: Updated translation by 
-	Nikolaj Berg Amodsen <mr_nba@rapanden.dk>
-
-	* zh_TW.po: File renamed from "zh_TW.Big5.po" and updated by 
-	Chun-Chung Chen <cjj@u.washington.edu> and 
-	Jouston Huang <jouston@housediy.com>
-
-Sun Jun  3 22:35:40 CEST 2001  Hvard Kvlen  <havardk@xmms.org>
-
-	* es.po: Updated translation by 
-	Jordi Mallach <jordi@sindominio.net>
-
-	* uk.po: Dmytro Kovalov <dmytro.kovalov@nssmb.com>
-
-	* pt_BR.po: Updated translation by
-	Juan Carlos Castro y Castro <jcastro@appi.com.br>
-
-	* hu.po: Updated translation by
-	Arpad Biro <biro_arpad@yahoo.com>
-
-	* az.po: Updated translation by
-	Vasif Ismailoglu <azerb_linux@hotmail.com>
-
-	* lt.po: Updated translation by 
-	Gediminas Paulauskas <menesis@delfi.lt>
-
-	* cs.po: Updated translation by 
-	Radek Vybiral <Radek.Vybiral@vsb.cz>
-
-	* hr.po: Updated translation by 
-	Vlatko Kosturjak <kost@iname.com>
-
-	* tr.po: Updated translation by
-	mer Fadl USTA <omer_fad@hotmail.com>
-
-	* ru.po: Updated translation by 
-	Maxim Koshelev <chuchelo@krasu.ru>
-
-	* gl.po: Updated translation by 
-	Alberto Garca <berto@gpul.org>
-
-	* ro.po: Updated translation by Misu Moldovan <dumol@go.ro>
-
-	* sk.po: Updated translation by
-	Pavol Cvengros <orpheus@hq.alert.sk>
-
-	* fr.po: Updated translation by
-	Arnaud Boissinot <arnaud.boissinot@wanadoo.fr>
-
-	* ko.po: Updated translation by 
-	Jaegeum Choe <baedaron@hananet.net>
-
-	* ja.po: Updated translation by 
-	Hiroshi Takekawa <takekawa@sr3.t.u-tokyo.ac.jp>
-
-	* sv.po: Updated translation by 
-	Christian Rose <menthos@menthos.com>
-
-	* el.po: Updated translation by 
-	Kyritsis Athanasios <djart@linux.gr>
-
-Wed May  9 00:52:48 CEST 2001  Hvard Kvlen  <havardk@xmms.org>
-
-	* *.po: Ran 'make update-po'.
-
-	* ja.po: Updated translation by 
-	Hiroshi Takekawa <takekawa@sr3.t.u-tokyo.ac.jp>
-
-	* sv.po: Updated translation by 
-	Christian Rose <menthos@menthos.com>
-
-Tue Apr 10 17:29:14 CEST 2001  Hvard Kvlen  <havardk@xmms.org>
-
-	* bg.po: Updated translation by 
-	Yovko D. Lambrev <yovko@sdf.lonestar.org>
-
-	* az.po: Updated translation by 
-	Vasif Ismailoglu <azerb_linux@hotmail.com>
-
-	* pt_BR.po: Updated translation by 
-	Juan Carlos Castro y Castro <jcastro@appi.com.br>
-
-	* sv.po: Updated translation by 
-	Christian Rose <menthos@menthos.com>
-
-Mon Mar 26 03:36:41 CEST 2001  Hvard Kvlen  <havardk@xmms.org>
-
-	* sr.po: New translation by Tomislav Jankovic_<tomaja@net.yu>
-
-	* wa.po: Updated translation by 
-	Pablo Saratxaga <pablo@mandrakesoft.com>
-
-	* tr.po: Updated translation by 
-	mer Fadl USTA <omer_fad@hotmail.com>
-
-	* ko.po: Updated translation by 
-	Jaegeum Choe <baedaron@hananet.net>
-
-	* id.po: Updated translation by Budi Rachmanto <rac@techie.com>
-
-	* hr.po: Updated translation by Vlatko Kosturjak <kost@iname.com>
-
-	* de.po: Updated translation by 
-	Colin Marquardt <colin@marquardt-home.de>
-
-	* az.po: Updated translation by 
-	Vasif Ismailoglu <azerb_linux@hotmail.com>
-
-Tue Mar 20 17:08:41 EST 2001  Hvard Kvlen  <havardk@xmms.org>
-
-	* no.po: Updated translation.
-
-Tue Mar 20 01:22:44 CET 2001  Hvard Kvlen  <havardk@xmms.org>
-
-	* pt_BR.po: Updated translation by 
-	Juan Carlos Castro y Castro <jcastro@appi.com.br>
-
-Tue Mar 13 22:00:03 CET 2001  Hvard Kvlen  <havardk@xmms.org>
-
-	* pt.po: New translation by Jorge Costa <Jorgercosta@netc.pt>
-
-Fri Mar  9 01:47:22 CET 2001  Hvard Kvlen  <havardk@xmms.org>
-
-	* sv.po: Updated translation by
-	Fuad Sabanovic <manijak@telia.com>
-
-	* sk.po: Updated translation by
-	Pavol Cvengros <orpheus@hq.alert.sk>
-
-	* pt_BR.po: Updated translation by
-	Juan Carlos Castro y Castro <jcastro@appi.com.br>
-
-	* lt.po: Updated translation by
-	Gediminas Paulauskas <menesis@delfi.lt>
-
-	* ja.po: Updated translation by
-	Hiroshi Takekawa <takekawa@sr3.t.u-tokyo.ac.jp>
-
-	* bg.po: Updated translation by
-	Yovko D. Lambrev <yovko@sdf.lonestar.org>
-
-Fri Mar  2 18:32:16 CET 2001  Hvard Kvlen  <havardk@xmms.org>
-
-	* tr.po: Updated translation by
-	mer Fadl USTA <omer_fad@hotmail.com>
-
-	* ru.po: Updated translation by Valek Filippov <frob@df.ru>
-
-	* pl.po: Updated translation by 
-	Grzegorz Kowal <g_kowal@poczta.onet.pl>
-
-	* id.po: New translation by Budi Rachmanto <rac@techie.com>
-
-Fri Feb 16 23:21:53 CET 2001  Hvard Kvlen  <havardk@xmms.org>
-
-	* gl.po: Updated translation by Alberto Garca <berto@gpul.org>
-
-	* wa.po: Updated translation by 
-	Pablo Saratxaga <pablo@mandrakesoft.com>
-
-	* tr.po: Updated translation by Nazmi Savga <savga@catlover.com>
-
-	* no.po: Updated translation by 
-	Terje Bjerkelia <terje@bjerkelia.com>
-
-	* hr.po: Updated translation by Vlatko Kosturjak <kost@iname.com>
-
-	* az.po: Updated traslation by 
-	Vasif Ismailoglu <azerb_linux@hotmail.com> 
-
-Wed Feb  7 20:34:54 CET 2001  Hvard Kvlen  <havardk@xmms.org>
-
-	* hr.po: Updated translation by Vlatko Kosturjak <kost@iname.com>
-
-	* de.po: Updated translation by
-	Colin Marquardt <colin@marquardt-home.de>
-
-	* da.po: Updated translation by Keld Simonsen <keld@dkuug.dk>
-
-	* cs.po: Updated translation by
-	Radek Vybiral <Radek.Vybiral@vsb.cz>
-
-	* pt_BR.po: Updated translation by
-	Juan Carlos Castro y Castro <jcastro@appi.com.br>
-
-Thu Jan  4 21:54:46 CET 2001  Hvard Kvlen  <havardk@xmms.org>
-
-	* ja.po: Updated translation by
-	Hiroshi Takekawa <takekawa@sr3.t.u-tokyo.ac.jp>
-
-Tue Jan  2 00:19:16 CET 2001  Hvard Kvlen  <havardk@xmms.org>
-
-	* pt_BR.po: Updated translation by
-	Juan Carlos Castro y Castro <jcastro@appi.com.br>
-
-	* ru.po: Updated translation by
-	Alexandr P. Kovalenko <never@nevermind.kiev.ua>
-
-Tue Dec 19 18:36:10 CET 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* ru.po: Updated translation by 
-	Alexandr P. Kovalenko <never@nevermind.kiev.ua>
-
-Sun Dec 10 23:44:00 CET 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* wa.po: Updated translation by 
-	Pablo Saratxaga <pablo@mandrakesoft.com>
-
-	* ru.po: Updated translation by 
-	Aleksey Smirnov <smi@logic.ru>
-
-	* ga.po: The charset was slightly wrong.  
-	Fix by Pablo Saratxaga <pablo@mandrakesoft.com>.
-
-	* es.po: Updated translation by 
-	Fabian Mandelbaum <fabman@einstein.com.ar>
-
-	* az.po: Converted to UTF-8.  Supposed to work better. Thanks to
-	Pablo Saratxaga <pablo@mandrakesoft.com> 
-
-	* no.po: Updated translation by 
-	Andreas Bergstrm <abergstr(at)halden.net> 
-
-	* it.po: Fixed a couple of errors.  One of them caused segfaults
-	with XMMS 1.2.4.
-
-Wed Nov 29 12:46:20 CET 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* gl.po: New translation by Alberto Garca <berto@gpul.org>
-
-Mon Nov 27 15:17:08 CET 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* es.po: Fixed a typo.
-
-Mon Nov 27 14:52:43 CET 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* ro.po: Updated translation by 
-	Miu Moldovan <dumol@go.ro>
-
-	* sk.po: Updated translation by
-	Pavol Cvengros <orpheus@hq.alert.sk>
-
-	* pl.po: Updated translation by
-	Grzegorz Kowal <g_kowal@poczta.onet.pl>
-
-	* no.po: Updated translation by 
-	Terje Bjerkelia <terje@bjerkelia.com>
-
-	* lv.po: Updated translation by	Vitauts Stochka <vit@dpu.lv>
-
-	* cs.po: Updated translation by
-	Vladimr Marek <vlmarek@volny.cz>
-
-	* ca.po: Updated translation by
-	Quico Llach <tradgnome@softcatala.org>
-
-	* da.po: Some corrections by 
-	Kenneth Christiansen <kenneth@gnu.org> and 
-	Keld Simonsen <keld@dkuug.dk>
-
-	* az.po: Updated translation by 
-	Vasif Ismailoglu <azerb_linux@hotmail.com>
-
-	* pt_BR.po: Updated translation by
-	Juan Carlos Castro y Castro <jcastro@appi.com.br>
-
-	* sv.po: Updated translation by 
-	Christian Rose <menthos@menthos.com> 
-
-	* it.po: Updated translation by Paolo Lorenzin <pasusu@tin.it>
-
-Tue Nov 21 23:22:02 CET 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* uk.po: Updated translation by 
-	Dmytro Koval'ov <kov@tokyo.email.ne.jp>
-
-	* it.po: Updated translation by Paolo Lorenzin <pasusu@tin.it>
-
-	* zh_TW.Big5.po: One correction.
-
-Tue Nov 21 01:34:15 CET 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* zh_TW.Big5.po: Updated translation by 
-	Chun-Chung Chen <cjj@u.washington.edu>
-
-	* hu.po: Updated translation by 
-	Arpad BIRO <biro_arpad@hotmail.com>
-
-	* de.po: Updated translation by 
-	Colin Marquardt <colin@marquardt-home.de>
-
-	* da.po: Updated translation by 
-	Nikolaj Berg Amondsen <mr_nba@get2net.dk>
-
-Sun Nov 19 17:08:16 CET 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* ja.po: Updated translation by
-	Hiroshi Takekawa <takekawa@sr3.t.u-tokyo.ac.jp>
-
-	* lt.po: Updated translation by
-	Gediminas Paulauskas <menesis@delfi.lt>
-
-Fri Nov 17 14:39:39 CET 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* ko.po: Updated translation by
-	Man-Yong Lee <yong@linuxkorea.co.kr>
-
-	* bg.po: Updated translation by
-	Yovko D. Lambrev <yovko@sdf.lonestar.org>
-
-	* sv.po: Updated translation by 
-	Christian Rose <menthos@menthos.com> 
-
-Fri Nov 17 00:20:08 CET 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* el.po: Updated translation by 
-	Kyritsis Athanasios <djart@linux.gr> 
-
-Wed Nov  8 22:07:11 CET 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* tr.po: Updated translation by
-	Nazmi Savga <savga@catlover.com>
-
-	* sv.po: Updated translations by
-	Christian Rose <menthos@menthos.com>
-
-	* pl.po: Updated translation by
-	Grzegorz Kowal <g_kowal@poczta.onet.pl>
-
-	* es.po: Updated translation by 
-	Fabian Mandelbaum <fabman@einstein.com.ar>
-
-	* az.po: Updated translation by 
-	Vasif Ismailoglu <azerb_linux@hotmail.com> 
-
-	* zh_CN.GB2312.po: A missing slash was causing crashes on start.
-
-Wed Oct 25 18:41:51 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* uk.po: Updated translation by
-	Dmytro Koval'ov <kov@tokyo.email.ne.jp>
-
-	* ja.po: Updated translation by
-	Hiroshi Takekawa <takekawa@sr3.t.u-tokyo.ac.jp>
-
-	* pt_BR.po: Updated translation by
-	Juan Carlos Castro y Castro <jcastro@appi.com.br>
-
-Wed Oct 18 13:35:48 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* pt_BR.po: Updated translation by
-	Juan Carlos Castro y Castro <jcastro@appi.com.br>
-
-	* tr.po: New translation by Nazmi Savga <savga@catlover.com>
-
-Mon Oct  2 11:37:24 2000  Espen Skoglund  <esk@ira.uka.de>
-
-	* ja.po: Update strings for 3DNow! patch:
-	Osamu Kayasono <kayasono@mb.infoweb.ne.jp>
-
-Sun Oct  1 19:45:07 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* da.po: Updated translation by:
-	Nikolaj Berg Amondsen <mr_nba@get2net.dk>
-
-	* ga.po: Updated translation by: 
-	Alastair McKinstry <mckinstry@computer.org>
-
-Tue Sep 26 23:03:21 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* it.po: New translation by: Paolo Lorenzin <pasusu@tin.it>
-
-	* az.po: New translation by: 
-	Vasif Ismailoglu <azerb_linux@hotmail.com>
-
-	* eo.po: Updated translation by:
-	D. Dale Gulledge <dsplat@rochester.rr.com>
-
-	* sk.po: Updated translation by:
-	Pavol Cvengros <orpheus@hq.alert.sk>
-
-Tue Sep 26 00:40:31 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* ko.po: Updated translation by: 
-	Byeong-Chan Kim <redhands@linux.sarang.net> 
-
-Tue Sep 19 17:11:41 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* cs.po: Update by Vladimr Marek <vlmarek@volny.cz>.
-
-Mon Sep 18 02:03:32 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* lv.po: New translation by: Vitauts Stochka <vit@dpu.lv>
-
-	* af.po: Updated translation by:
-	Schalk W. Cronj <schalkc@ntaba.co.za>
-
-	* nl.po: Updated translation by:
-	Tom Laermans <sidewinder@linuxfreak.com>
-
-	* ga.po: Updated translaion by:
-	Alastair McKinstry <mckinstry@computer.org>
-
-	* pl.po: Updated translation by:
-	Grzegorz Kowal <g_kowal@poczta.onet.pl>
-
-	* ca.po: Updated translation by:
-	Quico Llach <tradgnome@softcatala.org>
-
-	* zh_TW.Big5.po: Fixed two duplicate strings.
-
-Mon Sep 11 23:18:20 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* ga.po: New translation by: 
-	Alastair McKinstry <mckinstry@computer.org>
-
-	* zh_TW.Big5.po: Updated translation by:
-	Jouston Huang <jouston@housediy.com> and others.
-
-	* zh_CN.GB2312.po: Updated translation by:
-	Danny Zeng <danny@zeng.com.cn>
-
-	* wa.po: Updated translation by:
-	Pablo Saratxaga <pablo@mandrakesoft.com>
-
-	* uk.po: Updated translation by:
-	Dmytro Kovalov <kov@tokyo.email.ne.jp>
-
-	* ru.po: Updated translation by:
-	Maxim Koshelev <mdem@chat.ru>
-
-	* pt_BR.po: Updated translation by:
-	Juan Carlos Castro y Castro <jcastro@appi.com.br>
-
-	* pl.po: Updated translation by:
-	Grzegorz Kowal <g_kowal@poczta.onet.pl>
-
-	* no.po: Updated translation by: 
-	Terje Bjerkelia <terje@bjerkelia.com>
-
-	* lt.po: Updated translation by:
-	Gediminas Paulauskas <menesis@delfi.lt>
-
-	* ja.po: Updated translation by:
-	Hiroshi Takekawa <takekawa@sr3.t.u-tokyo.ac.jp>
-
-	* hu.po: Updated translation by:
-	Arpad BIRO <biro_arpad@hotmail.com>
-
-	* fr.po: Updated translation by:
-	Eric Fernandez-Bellot <fernandez@cgm.cnrs-gif.fr>
-
-	* es.po: Updated translation by:
-	Fabian Mandelbaum <fabman@einstein.com.ar>
-
-	* el.po: el_GR.po renamed to el.po.  Also updated by:
-	Kyritsis Athanasios <djart@linux.gr>
-
-	* de.po: Updated translation by:
-	Colin Marquardt <colin@marquardt-home.de>
-
-	* cs.po: Updated translation by:
-	Radek Vybiral <Radek.Vybiral@vsb.cz>
-
-	* bg.po: Updated translation by:
-	Yovko D. Lambrev <yovko@sdf.lonestar.org>
-
-Sun Sep  3 22:24:28 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* sv.po: Updated translation by:
-	Christian Rose <menthos@menthos.com>
-
-	* *.po: Ran 'make update-po'.
-
-Fri Aug 11 20:20:27 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* sv.po: Updated translation by: 
-	Christian Rose <menthos@menthos.com> 
-
-	* pt_BR.po: Updated translation by: 
-	Juan Carlos Castro y Castro <jcastro@appi.com.br>
-
-Wed Aug  9 23:54:22 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* pt_BR.po: Updated translation by: 
-	Juan Carlos Castro y Castro <jcastro@appi.com.br>
-
-Wed Aug  9 16:47:33 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* sv.po: Updated translation by: Thomas Nilsson <thomas@xmms.org>
-
-Mon Aug  7 17:38:26 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* ja.po: Updated translation by: 
-	Hiroshi Takekawa <takekawa@sr3.t.u-tokyo.ac.jp>
-
-Fri Jul 28 18:39:18 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* pt_BR.po: Updated translation by:
-	Juan Carlos Castro y Castro <jcastro@appi.com.br>
-
-Fri Jul 14 01:24:03 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* sv.po: Updated translation by: 
-	Christian Rose <menthos@menthos.com> 
-
-Tue Jul  4 19:21:59 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* bg.po: Updated translation by: 
-	Yovko D. Lambrev <yovko@sdf.lonestar.org> 
-
-	* cs.po: Updated translation by: 
-	Radek Vybiral <Radek.Vybiral@vsb.cz> 
-
-Tue Jun 27 16:07:18 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* el_GR.po: New translation by: 
-	Kyritsis Athanasios <djart@linux.gr> 
-
-	* pl.po: New translation by: 
-	Grzegorz Kowal <g_kowal@poczta.onet.pl>
-
-Sat Jun 17 19:54:49 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* sv.po: Updated translation by: Thomas Nilsson <thomas@xmms.org>
-
-Sat Jun 17 18:38:14 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* eo.po: New translation by: 
-	D. Dale Gulledge <dsplat@rochester.rr.com>
-
-	* hr.po, ja.po, ko.po, ru.po, sv.po, uk.po, wa.po, zh_TW.Big5.po,
-	zh_CN.GB2312.po: Various small fixes by Pablo Saratxaga
-	<pablo@mandrakesoft.com> 
-
-	* no.po: Updated translation by: 
-	Terje Bjerkelia <terje@bjerkelia.com>. A couple of strings altered
-	by me.
-
-Tue Jun 13 23:40:15 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* ja.po: Updated translation by: 
-	Hiroshi Takekawa <takekawa@sr3.t.u-tokyo.ac.jp>
-
-Mon Jun 12 16:56:55 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* pt_BR.po: One string added by: 
-	Juan Carlos Castro y Castro <jcastro@appi.com.br>
-
-Mon Jun 12 15:39:23 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* *.po: Ran 'make update-po' and updated the copyright string from
-	about.c for all translations.
-
-Fri Jun  9 10:40:42 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* zh_CN.GB2312.po: Updated translation by:
-	Danny Zeng <danny@zeng.com.cn>
-
-	* fr.po: Update which fixes a incorrect string (again).
-
-	* pt_BR.po: Updated translation by: 
-	Juan Carlos Castro y Castro <jcastro@appi.com.br>
-
-Wed May 31 00:58:34 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* cs.po: New translation by: Radek Vybiral <Radek.Vybiral@vsb.cz>
-
-	* fr.po: Updated translation by:
-	Eric Fernandez-Bellot <fernandez@cgm.cnrs-gif.fr>
-
-	* da.po: Updated translation by: 
-	Nikolaj Berg Amondsen <mr_nba@get2net.dk>
-
-	* ro.po: Updated translation by:
-	Florin Grad <florin@mandrakesoft.com>
-
-	* es.po: Updated translation by: 
-	Fabian Mandelbaum <fabman@einstein.com.ar>
-
-	* sk.po: Updated translation by: 
-	Jan Matis <damned@hq.alert.sk>
-
-	* lt.po: Updated translation by: 
-	Gediminas Paulauskas <menesis@delfi.lt>
-
-	* hu.po: Updated tranlation by: 
-	Arpad BIRO <biro_arpad@hotmail.com>
-
-	* ca.po: Updated translation by: 
-	Quico Llach <quico@softcatala.org>
-
-	* af.po: Update translation by: 
-	Schalk W. Cronj <schalkc@ntaba.co.za>
-
-Tue May 30 01:50:32 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* de.po: Updated translation by:
-	Colin Marquardt <colin@marquardt-home.de>
-
-Mon May 22 22:10:54 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* fr.po: Updated translation by: 
-	Eric Fernandez-Bellot <fernandez@cgm.cnrs-gif.fr>
-
-	* wa.po: Updated translation by: 
-	Pablo Saratxaga <pablo@mandrakesoft.com>, 
-	Lucyin Mahin
-
-	* bg.po: Updated translation by: 
-	Yovko D. Lambrev <yovko@sdf.lonestar.org>
-
-	* ca.po: Updated translation by: 
-	Quico Llach <quico@softcatala.org> 
-
-	* uk.po: Updated translation by: 
-	Dmytro Koval'ov	<kov@tokyo.email.ne.jp> 
-
-	* hu.po: New translation by: Arpad BIRO <biro_arpad@hotmail.com>
-
-	* af.po: New translation by: 
-	Schalk W. Cronj <schalkc@ntaba.co.za> 
-
-	* es.po: Updated translation by: 
-	Fabian Mandelbaum <fabman@einstein.com.ar> 
-
-Fri May 19 13:36:02 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* sk.po: Updated translation by: Jan Matis <damned@hq.alert.sk>
-
-	* lt.po: Updated translation by: 
-	Gediminas Paulauskas <menesis@delfi.lt> 
-
-	* hr.po: Updated translation by: Vladimir Vuksan <vuksan@veus.hr>
-
-Tue May  9 00:05:04 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* uk.po: Updated translation by: 
-	Dmytro Kovalov <kov@tokyo.email.ne.jp> 
-
-Wed May  3 14:21:47 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* ro.po: New translation by: Florin Grad <florin@mandrakesoft.com>
-
-	* hr.po: New translation by: Vladimir Vuksan <vuksan@veus.hr>
-
-	* es.po: New translation by: 
-	Fabian Mandelbaum <fabman@einstein.com.ar> 
-
-	* no.po: Fixed a typo that affected the Visualization menu.
-
-Wed Apr 12 13:55:01 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* da.po: Updated translation by:
-	Nikolaj Berg Amondsen <mr_nba@get2net.dk>,
-	Kenneth Christiansen,
-	Troels Liebe Bentsen <tlb@iname.com>
-
-Mon Apr  3 00:54:10 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* lt.po: New translation by: 
-	Gediminas Paulauskas <menesis@delfi.lt>
-
-	* sk.po: Updated translation by: Jan Matis <damned@hq.alert.sk>
-
-Thu Mar 30 00:42:05 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* zh_TW.Big5.po: Updated translation by: 
-	Jouston Huang <jouston@housediy.com>
-
-Tue Mar 28 11:26:57 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* sk.po: New translation by:
-	TOMAS HORNICEK <dumber@hq.alert.sk>, 
-	Jan Matis <damned@hq.alert.sk>
-
-Mon Mar 27 02:26:29 CEST 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* no.po: Updated translation by: 
-	Terje Bjerkelia <terje@bjerkelia.com> 
-
-Fri Mar 24 17:37:10 CET 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* bg.po: Updated translation by: 
-	Yovko D. Lambrev <yovko@sdf.lonestar.org>
-
-	* ru.po: Updated translation by: Maxim Koshelev <mdem@chat.ru>
-
-Thu Mar 23 13:21:17 CET 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* fr.po: One string corrected. Thanks to:
-	Guillaume Cottenceau <gc@mandrakesoft.com>
-
-Tue Mar 21 23:05:19 CET 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* de.po: Updated translation by:
-	Colin Marquardt <colin@marquardt-home.de>
-
-	* ja.po: Updated translation by: 
-	Hiroshi Takekawa <takekawa@sr3.t.u-tokyo.ac.jp>
-
-Mon Mar 20 23:27:51 CET 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* bg.po: Updated translation by:
-	Yovko D. Lambrev <yovko@sdf.lonestar.org>
-
-Mon Mar 20 18:50:23 CET 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* ca.po: Updated translation by:
-	Quico Llach <quico@softcatala.org>
-
-	* da.po: Updated translation by: 
-	Nikolaj Berg Amondsen <mr_nba@get2net.dk>
-
-	* zh_CN.GB2312.po: Updated translation by:
-	Danny Zeng <danny@zeng.com.cn>
-
-Sun Mar 19 01:36:19 CET 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* wa.po: Updated translation by:
-	Pablo Saratxaga <pablo@mandrakesoft.com>
-
-	* nl.po: New translation by: 
-	Tom Laermans <sidewinder@linuxfreak.com>
-
-	* da.po: New translation by: 
-	Nikolaj Berg Amondsen <mr_nba@get2net.dk> 
-
-Thu Mar  9 15:41:20 CET 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* ko.po: Updated translation by:
-	Byeong-Chan Kim <redhands@linux.sarang.net>
-
-Tue Mar  7 23:17:24 CET 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* ja.po: Updated translation by: 
-	Hiroshi Takekawa <takekawa@sr3.t.u-tokyo.ac.jp>
-
-Mon Mar  6 15:57:58 CET 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* no.po: Updated translation.
-
-	* fr.po: Updated translation by:
-	Eric Fernandez-Bellot <fernandez@cgm.cnrs-gif.fr>
-
-	* ca.po: Updated translation by: 
-	Quico Llach <quico@softcatala.org> 
-
-Sun Mar  5 00:20:11 CET 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* uk.po: Updated translation by:
-	Dmytro Koval'ov <kov@tokyo.email.ne.jp>
-
-	* de.po: Updated translation by: 
-	Colin Marquardt	<colin@marquardt-home.de> 
-
-	* pt_BR.po: Updated translation by:
-	Juan Carlos Castro y Castro <jcastro@appi.com.br>
-
-Sat Feb 26 00:35:44 CET 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* ca.po: New translation by: Quico Llach <quico@softcatala.org>
-
-	* bg.po: New translation by: 
-	Yovko D. Lambrev <yovko@plov.omega.bg> 
-
-	* sv.po: New translation by: Olle Hllns <olle@xmms.org>
-
-	* pt_BR.po: Updated translation by:
-	Juan Carlos Castro y Castro <jcastro@appi.com.br>
-
-Thu Feb 17 10:50:41 CET 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* ko.po: Updated translation by:
-	Byeong-Chan Kim <redhands@linux.sarang.net>
-
-Wed Feb 16 22:19:51 CET 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* pt_BR.po: Updated translation by:
-	Juan Carlos Castro y Castro <jcastro@appi.com.br>
-
-Wed Feb 16 02:09:22 CET 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* no.po: Updated translation.
-
-Wed Feb 16 00:00:20 CET 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* pt_BR.po: New translation by:
-	Juan Carlos Castro y Castro <jcastro@appi.com.br>
-
-Tue Feb 15 21:13:03 CET 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* ko.po: Updated translation by:
-	Byeong-Chan Kim <redhands@linux.sarang.net>
-
-Thu Feb 10 22:15:00 CET 2000  Hvard Kvlen  <havardk@xmms.org>
-
-	* ko.po: New translation by:
-	Sang-Jin Hwang <accel@accellinux.org>, 
-	Updated by: Byeong-Chan Kim <redhands@linux.sarang.net>
-
-Thu Feb 10 14:14:48 CET 2000  Hvard Kvlen  <havardk@sol.no>
-
-	* ru.po: New translation by: Koshelev Maxim <mdem@chat.ru>
-
-Mon Feb  7 22:48:26 CET 2000  Hvard Kvlen  <havardk@sol.no>
-
-	* de.po: Updated translation by:
-	Colin Marquardt	<colin@marquardt-home.de>
-
-Mon Feb  7 14:15:42 CET 2000  Hvard Kvlen  <havardk@sol.no>
-
-	* ja.po: New translation by:
-	Hiroshi Takekawa <takekawa@sr3.t.u-tokyo.ac.jp>
-
-Sun Feb  6 13:33:35 CET 2000  Hvard Kvlen  <havardk@sol.no>
-
-	* zh_CN.GB2312.po: Added translation by:
-	Jouston Huang <jouston@linuxfab.cx>,
-	Andrew Lee <andrew@cle.linux.org.tw>,
-	Chih-Wei Huang <cwhuang@linux.org.tw>.
-
-	* zh_TW.Big5.po: Added translation by: 
-	Jouston Huang <http://Linuxfab.cx> <jouston@linuxfab.cx>,
-	Andrew Lee <andrew@cle.linux.org.tw>,
-	Chih-Wei Huang <cwhuang@linux.org.tw>.
-
-	* wa.po: Added translation by: 
-	Pablo Saratxaga	<srtxg@chanae.alphanet.ch>
-
-	* uk.po: Added translation by: 
-	"Dmytro Koval'ov" <kov@tokyo.email.ne.jp>
-
-	* fr.po: Added translation by:
-	Eric Fernandez-Bellot <fernandez@cgm.cnrs-gif.fr>
-
-	* de.po: Added translation by: 
-	Colin Marquardt	<colin@marquardt-home.de>
-
--- a/po/cs.po	Tue Oct 30 11:22:17 2007 +0200
+++ b/po/cs.po	Fri Nov 16 05:32:56 2007 +0200
@@ -6,10 +6,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: audacious svn-4131\n"
+"Project-Id-Version: audacious hg-3877\n"
 "Report-Msgid-Bugs-To: http://bugs.audacious-media-player.org\n"
-"POT-Creation-Date: 2007-10-13 14:15+0200\n"
-"PO-Revision-Date: 2007-02-26 13:41+0100\n"
+"POT-Creation-Date: 2007-11-01 16:25+0100\n"
+"PO-Revision-Date: 2007-11-01 17:59+0100\n"
 "Last-Translator: Petr Písař <petr.pisar@atlas.cz>\n"
 "Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
 "MIME-Version: 1.0\n"
@@ -125,12 +125,11 @@
 
 #: src/audacious/glade/prefswin.glade:1050
 msgid "Select main player window font:"
-msgstr "Font v hlavním okně přehrávače:"
+msgstr "Vyberte font pro hlavní okno přehrávače:"
 
 #: src/audacious/glade/prefswin.glade:1072
-#, fuzzy
 msgid "Select playlist font:"
-msgstr "Font v hlavním okně přehrávače:"
+msgstr "Vyberte font pro seznam skladeb:"
 
 #: src/audacious/glade/prefswin.glade:1112
 msgid ""
@@ -188,10 +187,12 @@
 "If selected, the file information text in the main window will scroll back "
 "and forth. If not selected, the text will only scroll in one direction."
 msgstr ""
+"Bude-li vybráno, text s informacemi o souboru v hlavním okně bude běhat tam "
+"a zpět. Nebude-li vybráno, text se bude pohybovat jen jedním směrem."
 
 #: src/audacious/glade/prefswin.glade:1380
 msgid "Use two-way text scroller"
-msgstr ""
+msgstr "Pohybovat textem v obou směrech"
 
 #: src/audacious/glade/prefswin.glade:1422 src/audacious/ui_preferences.c:111
 msgid "Appearance"
@@ -429,7 +430,6 @@
 msgstr "Velikost vyrovnávací paměti:"
 
 #: src/audacious/glade/prefswin.glade:3593
-#, fuzzy
 msgid ""
 "<span size=\"small\">This is the amount of time to prebuffer audio streams "
 "by, in milliseconds.\n"
@@ -440,7 +440,7 @@
 "<span size=\"small\">Určuje délku zvukového proudu v milisekundách, který "
 "bude předpočítán do vyrovnávací paměti.\n"
 "Pokud máte problémy s přeskakováním zvuku, zvyšte tuto hodnotu.\n"
-"Prosím, vezměte na vědomí, že příliš vysoké hodnoty mohou vézt ke zhoršení "
+"Prosím, vezměte na vědomí, že příliš vysoké hodnoty mohou vést ke zhoršení "
 "výkonu Audacious.</span>"
 
 #: src/audacious/glade/prefswin.glade:3663
@@ -465,7 +465,7 @@
 "in a messier playlist, but delivers a major speed benefit."
 msgstr ""
 "Je-li zatrhnuto, Audacious bude rozpoznávat formát souboru, až bude potřeba. "
-"Toto může vézt k ošklivému seznamu skladeb, ale značně urychluje jeho "
+"Toto může vést k ošklivému seznamu skladeb, ale značně urychluje jeho "
 "zpracování."
 
 #: src/audacious/glade/prefswin.glade:3937
@@ -480,7 +480,7 @@
 msgstr ""
 "Je-li zatrhnuto, Audacious bude rozpoznávat formát souboru podle přípony. "
 "Tento způsob je o něco pomalejší než rozpoznávání na požádání, ale poskytuje "
-"alespoň základní úrověň rozpoznání formátu. "
+"alespoň základní úroveň rozpoznání formátu. "
 
 #: src/audacious/glade/prefswin.glade:3973
 msgid "Detect file formats by extension."
@@ -522,14 +522,12 @@
 msgstr "s"
 
 #: src/audacious/glade/prefswin.glade:4249
-#, fuzzy
 msgid "<b>Sampling Rate Converter</b>"
-msgstr "Vzorkovací kmitočet"
+msgstr "<b>Konvertor vzorkovacího kmitočtu</b>"
 
 #: src/audacious/glade/prefswin.glade:4289
-#, fuzzy
 msgid "Enable Sampling Rate Converter"
-msgstr "Vzorkovací kmitočet"
+msgstr "Zapnout konvertor vzorkovacího kmitočtu"
 
 #: src/audacious/glade/prefswin.glade:4338
 msgid ""
@@ -539,10 +537,15 @@
 "ZOH Interpolation\n"
 "Linear Interpolation"
 msgstr ""
+"Nejlepší sinová interpolace\n"
+"Střední sinová interpolace\n"
+"Nejrychlejší sinová interpolace\n"
+"ZOH interpolace\n"
+"Lineární interpolace"
 
 #: src/audacious/glade/prefswin.glade:4361
 msgid "Interpolation Engine:"
-msgstr ""
+msgstr "Způsob interpolace:"
 
 #: src/audacious/glade/prefswin.glade:4389
 msgid ""
@@ -550,31 +553,34 @@
 "This should be the max supported sampling rate of\n"
 "the sound card or output plugin.</span>"
 msgstr ""
+"<span size=\"small\">Všechny proudy budou převedeny na tento vzorkovací "
+"kmitočet.\n"
+"Ten by měl představovat maximální vzorkovací kmitočet zvukové karty "
+"nebo výstupního modulu.</span>"
 
 #: src/audacious/glade/prefswin.glade:4461
-#, fuzzy
 msgid "Sampling Rate [Hz]:"
-msgstr "Vzorkovací kmitočet"
+msgstr "Vzorkovací kmitočet [Hz]:"
 
 #: src/audacious/glade/prefswin.glade:4517
-#, fuzzy
 msgid "<b>Volume Control</b>"
-msgstr "Ovládání hlasitosti:"
+msgstr "<b>Ovládání hlasitosti</b>"
 
 #: src/audacious/glade/prefswin.glade:4556
 msgid ""
 "Use software volume control. This may be useful for situations where your "
 "audio system does not support controlling the playback volume."
 msgstr ""
+"Použije softwarové ovládání hlasitosti. Toto je užitečné, nepodporuje-li "
+"váš zvukový systém změnu hlasitosti přehrávání."
 
 #: src/audacious/glade/prefswin.glade:4558
 msgid "Use software volume control"
 msgstr "Hlasitost nastavit softwarově"
 
 #: src/audacious/glade/prefswin.glade:4746
-#, fuzzy
 msgid "Reload Plugins"
-msgstr "Moduly"
+msgstr "Znovu načíst moduly"
 
 #: src/audacious/glade/prefswin.glade:4807
 msgid "Popup Information Settings"
@@ -634,7 +640,7 @@
 "Audacious allows you to alter the color balance of the skinned UI. The "
 "sliders below will allow you to do this."
 msgstr ""
-"Audacious umožňuje změnit zabarvení oskinovaného uživatelského rozhraní "
+"Audacious umožňuje změnit zabarvení vzhledu uživatelského rozhraní "
 "pomocí následujících jezdců."
 
 #: src/audacious/glade/prefswin.glade:5359
@@ -670,7 +676,7 @@
 #: src/audacious/logger.c:125
 #, c-format
 msgid "Unable to create log file (%s)!\n"
-msgstr "Nepodařilo se vytvořit prokolovací soubor (%s)!\n"
+msgstr "Nepodařilo se vytvořit protokolovací soubor (%s)!\n"
 
 #: src/audacious/main.c:90 src/audacious/main.c:92 src/audacious/ui_main.c:491
 #: src/audacious/ui_main.c:2466
@@ -817,6 +823,18 @@
 "report:\n"
 "\n"
 msgstr ""
+"\n"
+"Audacious zachytil signál č. 11 (SIGSEGV).\n"
+"\n"
+"Omlouváme se za potíže, ale Audacious zhavaroval.\n"
+"Toto je chyba programu a za běžbých okolností by k ní nikdy nemělo dojít.\n"
+"Vaše současná konfigurace byla uložena a neměla by být poškozena.\n"
+"\n"
+"I vy můžete pomoci zlepšit Audacious tím, že vyplníte chybové hlášení na "
+"http://bugs-meta.atheme.org\n"
+"Prosím, zahrňte celý text této hlášky a popis toho, co jste dělali, když\n"
+"došlo k pádu. Pomůžete tím k rychlejšímu odbavení vašho chybového hlášení:\n"
+"\n"
 
 #: src/audacious/signals.c:80
 msgid ""
@@ -824,12 +842,17 @@
 "Bugs can be reported at http://bugs-meta.atheme.org against the Audacious "
 "product.\n"
 msgstr ""
+"\n"
+"Chyby mohou být hlášeny na http://bugs-meta.atheme.org pod položkou\n"
+"„Audacious product“.\n"
 
 #: src/audacious/signals.c:266
 msgid ""
 "Your signaling implementation is broken.\n"
 "Expect unusable crash reports.\n"
 msgstr ""
+"Vaše implementace signálů je rozbitá.\n"
+"Očekávejte nepoužitelné hlášení o pádu.\n"
 
 #: src/audacious/strings.c:170
 msgid "  (invalid UTF-8)"
@@ -846,17 +869,17 @@
 "\n"
 "Copyright © 2005–2007 vývojový tým Audacious"
 
-#: src/audacious/ui_about.c:125 src/audacious/ui_credits.c:357
+#: src/audacious/ui_about.c:125 src/audacious/ui_credits.c:358
 #: src/audacious/ui_manager.c:391 src/audacious/ui_manager.c:392
 msgid "About Audacious"
 msgstr "O Audacious"
 
-#: src/audacious/ui_about.c:174 src/audacious/ui_credits.c:400
+#: src/audacious/ui_about.c:174 src/audacious/ui_credits.c:401
 msgid "Credits"
 msgstr "Zásluhy"
 
 #: src/audacious/ui_credits.c:47
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "<big><b>Audacious %s</b></big>\n"
 "A skinned multimedia player for many platforms.\n"
@@ -864,7 +887,7 @@
 "Copyright (C) 2005-2007 Audacious Development Team\n"
 msgstr ""
 "<big><b>Audacious %s</b></big>\n"
-"Budoucnost multimédií v UNIXu\n"
+"Přehrávač multimédií s měnitelným vzhledem a pro různé platformy\n"
 "\n"
 "Copyright © 2005–2007 vývojový tým Audacious\n"
 
@@ -880,152 +903,151 @@
 msgid "Default skin:"
 msgstr "Standardní skin:"
 
-#: src/audacious/ui_credits.c:81
+#: src/audacious/ui_credits.c:82
 msgid "Plugin development:"
 msgstr "Vývoj zásuvných modulů:"
 
-#: src/audacious/ui_credits.c:97
+#: src/audacious/ui_credits.c:98
 msgid "Patch authors:"
 msgstr "Autoři záplat:"
 
-#: src/audacious/ui_credits.c:117
+#: src/audacious/ui_credits.c:118
 msgid "0.1.x developers:"
 msgstr "Vývojáři v. 0.1.x:"
 
-#: src/audacious/ui_credits.c:123
+#: src/audacious/ui_credits.c:124
 msgid "BMP Developers:"
 msgstr "Vývojáři Audacious:"
 
-#: src/audacious/ui_credits.c:155
+#: src/audacious/ui_credits.c:156
 msgid "Brazilian Portuguese:"
 msgstr "Brazilská portugalština:"
 
-#: src/audacious/ui_credits.c:159
+#: src/audacious/ui_credits.c:160
 msgid "Breton:"
 msgstr "Bretonština:"
 
-#: src/audacious/ui_credits.c:162
+#: src/audacious/ui_credits.c:163
 msgid "Bulgarian:"
 msgstr "Bulharština:"
 
-#: src/audacious/ui_credits.c:165
-#, fuzzy
+#: src/audacious/ui_credits.c:166
 msgid "Catalan:"
-msgstr "Italština:"
-
-#: src/audacious/ui_credits.c:168
+msgstr "Katalánština:"
+
+#: src/audacious/ui_credits.c:169
 msgid "Croatian:"
 msgstr "Chorvatština:"
 
-#: src/audacious/ui_credits.c:171
+#: src/audacious/ui_credits.c:172
 msgid "Czech:"
 msgstr "Čeština:"
 
-#: src/audacious/ui_credits.c:174
+#: src/audacious/ui_credits.c:175
 msgid "Dutch:"
 msgstr "Holandština:"
 
-#: src/audacious/ui_credits.c:178
+#: src/audacious/ui_credits.c:179
 msgid "Finnish:"
 msgstr "Finština:"
 
-#: src/audacious/ui_credits.c:181
+#: src/audacious/ui_credits.c:182
 msgid "French:"
 msgstr "Francouzština:"
 
-#: src/audacious/ui_credits.c:185
+#: src/audacious/ui_credits.c:186
 msgid "German:"
 msgstr "Němčina:"
 
-#: src/audacious/ui_credits.c:190
+#: src/audacious/ui_credits.c:191
 msgid "Georgian:"
 msgstr "Gruzínština:"
 
-#: src/audacious/ui_credits.c:193
+#: src/audacious/ui_credits.c:194
 msgid "Greek:"
 msgstr "Řečtina:"
 
-#: src/audacious/ui_credits.c:198
+#: src/audacious/ui_credits.c:199
 msgid "Hindi:"
 msgstr "Hindština:"
 
-#: src/audacious/ui_credits.c:201
+#: src/audacious/ui_credits.c:202
 msgid "Hungarian:"
 msgstr "Maďarština:"
 
-#: src/audacious/ui_credits.c:204
+#: src/audacious/ui_credits.c:205
 msgid "Italian:"
 msgstr "Italština:"
 
-#: src/audacious/ui_credits.c:208
+#: src/audacious/ui_credits.c:209
 msgid "Japanese:"
 msgstr "Japonština:"
 
-#: src/audacious/ui_credits.c:211
+#: src/audacious/ui_credits.c:212
 msgid "Korean:"
 msgstr "Korejština:"
 
-#: src/audacious/ui_credits.c:214
+#: src/audacious/ui_credits.c:215
 msgid "Lithuanian:"
 msgstr "Litevština:"
 
-#: src/audacious/ui_credits.c:217
+#: src/audacious/ui_credits.c:218
 msgid "Macedonian:"
 msgstr "Makedonština:"
 
-#: src/audacious/ui_credits.c:220
+#: src/audacious/ui_credits.c:221
 msgid "Polish:"
 msgstr "Polština:"
 
-#: src/audacious/ui_credits.c:223
+#: src/audacious/ui_credits.c:224
 msgid "Romanian:"
 msgstr "Rumunština:"
 
-#: src/audacious/ui_credits.c:227
+#: src/audacious/ui_credits.c:228
 msgid "Russian:"
 msgstr "Ruština:"
 
-#: src/audacious/ui_credits.c:230
+#: src/audacious/ui_credits.c:231
 msgid "Serbian (Latin):"
 msgstr "Srbština (latinka):"
 
-#: src/audacious/ui_credits.c:233
+#: src/audacious/ui_credits.c:234
 msgid "Serbian (Cyrillic):"
 msgstr "Srbština (cyrilice):"
 
-#: src/audacious/ui_credits.c:236
+#: src/audacious/ui_credits.c:237
 msgid "Simplified Chinese:"
 msgstr "Zjednodušená čínština:"
 
-#: src/audacious/ui_credits.c:239
+#: src/audacious/ui_credits.c:240
 msgid "Slovak:"
 msgstr "Slovenština:"
 
-#: src/audacious/ui_credits.c:242
+#: src/audacious/ui_credits.c:243
 msgid "Spanish:"
 msgstr "Španělština:"
 
-#: src/audacious/ui_credits.c:245
+#: src/audacious/ui_credits.c:246
 msgid "Swedish:"
 msgstr "Švédština:"
 
-#: src/audacious/ui_credits.c:248
+#: src/audacious/ui_credits.c:249
 msgid "Traditional Chinese:"
 msgstr "Tradiční čínština:"
 
-#: src/audacious/ui_credits.c:251
+#: src/audacious/ui_credits.c:252
 msgid "Turkish:"
 msgstr "Turečtina:"
 
-#: src/audacious/ui_credits.c:255
+#: src/audacious/ui_credits.c:256
 msgid "Ukrainian:"
 msgstr "Ukrajinština:"
 
-#: src/audacious/ui_credits.c:258
+#: src/audacious/ui_credits.c:259
 msgid "Welsh:"
 msgstr "Welština:"
 
-#: src/audacious/ui_credits.c:404
+#: src/audacious/ui_credits.c:405
 msgid "Translators"
 msgstr "Překladatelé"
 
@@ -1120,9 +1142,8 @@
 msgstr "_Filtr:"
 
 #: src/audacious/ui_jumptotrack.c:594
-#, fuzzy
 msgid "Close on Jump"
-msgstr "Zavřít dialog při otevření"
+msgstr "Zavřít při skoku"
 
 #: src/audacious/ui_main.c:489
 #, c-format
@@ -1156,17 +1177,15 @@
 
 #: src/audacious/ui_main.c:1228
 msgid "Audacious - visibility warning"
-msgstr ""
+msgstr "Audacious – viditelnost varování"
 
 #: src/audacious/ui_main.c:1230
-#, fuzzy
 msgid "Show main player window"
-msgstr "Font v hlavním okně přehrávače:"
+msgstr "Ukázat hlavní okno přehrávače:"
 
 #: src/audacious/ui_main.c:1231
-#, fuzzy
 msgid "Ignore"
-msgstr "žádný"
+msgstr "Ignorovat"
 
 #: src/audacious/ui_main.c:1235
 msgid ""
@@ -1175,73 +1194,70 @@
 "otherwise, you'll have to control it remotely via audtool or enabled plugins "
 "(such as the statusicon plugin)."
 msgstr ""
+"Audacious byl spuštěn se všemi okny skrytými.\n"
+"Možná budete chtít kvůli ovládání okno přehrávače opět zobrazit. V opačném "
+"případě budete muset přehrávač ovládat vzdáleně pomocí audtool nebo pomocí "
+"zapnutého modulu (např. modulu statusicon [stavová ikona])."
 
 #: src/audacious/ui_main.c:1241
 msgid "Always ignore, show/hide is controlled remotely"
-msgstr ""
+msgstr "Vždy ignorovat, ukázat/skrýt je ovládáno vzdáleně"
 
 #: src/audacious/ui_main.c:1259
 msgid "Enter location to play:"
 msgstr "Zadejte adresu, z které se má hrát:"
 
 #: src/audacious/ui_main.c:1504
-#, fuzzy, c-format
+#, c-format
 msgid "Seek to: %d:%-2.2d/%d:%-2.2d (%d%%)"
-msgstr "PŘEJÍT NA %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgstr "Přejít na: %d:%-2.2d/%d:%-2.2d (%d %%)"
 
 #: src/audacious/ui_main.c:1536
-#, fuzzy, c-format
+#, c-format
 msgid "Volume: %d%%"
-msgstr "Hlasitost"
+msgstr "Hlasitost %d %%"
 
 #: src/audacious/ui_main.c:1566
 #, c-format
 msgid "Balance: %d%% left"
-msgstr ""
+msgstr "Vyvážení: %d %% vlevo"
 
 #: src/audacious/ui_main.c:1570
 msgid "Balance: center"
-msgstr ""
+msgstr "Vyvážení: střed"
 
 #: src/audacious/ui_main.c:1574
 #, c-format
 msgid "Balance: %d%% right"
-msgstr ""
+msgstr "Vyvážení: %d %% vpravo"
 
 #: src/audacious/ui_main.c:1916
-#, fuzzy
 msgid "Options Menu"
-msgstr "Nastavení"
+msgstr "Nabídka s nastavením"
 
 #: src/audacious/ui_main.c:1920
-#, fuzzy
 msgid "Disable 'Always On Top'"
-msgstr "Vždy na vrchu"
+msgstr "Vypnout „Vždy na vrchu“"
 
 #: src/audacious/ui_main.c:1922
-#, fuzzy
 msgid "Enable 'Always On Top'"
-msgstr "Vždy na vrchu"
+msgstr "Zapnout „Vždy na vrchu“"
 
 #: src/audacious/ui_main.c:1925
-#, fuzzy
 msgid "File Info Box"
 msgstr "Informace o souboru"
 
 #: src/audacious/ui_main.c:1929
-#, fuzzy
 msgid "Disable 'Doublesize'"
-msgstr "Dvojitá velikost"
+msgstr "Vypnout „Dvojitou velikost“"
 
 #: src/audacious/ui_main.c:1931
-#, fuzzy
 msgid "Enable 'Doublesize'"
-msgstr "Dvojitá velikost"
+msgstr "Zapnout „Dvojitou velikost“"
 
 #: src/audacious/ui_main.c:1934
-#, fuzzy
 msgid "Visualization Menu"
-msgstr "Typ znázornění"
+msgstr "Nabídka s typem znázornění"
 
 #: src/audacious/ui_main.c:1982
 msgid ""
@@ -1494,7 +1510,7 @@
 
 #: src/audacious/ui_manager.c:208 src/audacious/ui_manager.c:209
 msgid "Select Next Playlist"
-msgstr "Vybrat následujicí seznam skladeb"
+msgstr "Vybrat následující seznam skladeb"
 
 #: src/audacious/ui_manager.c:211 src/audacious/ui_manager.c:212
 msgid "Select Previous Playlist"
@@ -1652,7 +1668,7 @@
 
 #: src/audacious/ui_manager.c:293
 msgid "Removes all entries from the playlist."
-msgstr "Ze seznamu odstraní věechny skladby."
+msgstr "Ze seznamu odstraní všechny skladby."
 
 #: src/audacious/ui_manager.c:296
 msgid "Remove Unselected"
@@ -1708,7 +1724,7 @@
 
 #: src/audacious/ui_manager.c:329 src/audacious/ui_manager.c:359
 msgid "Sorts the list by full pathname."
-msgstr "Skladby v seznmu seřadí podle celé cesty."
+msgstr "Skladby v seznamu seřadí podle celé cesty."
 
 #: src/audacious/ui_manager.c:332 src/audacious/ui_manager.c:362
 msgid "By Date"
@@ -1739,18 +1755,16 @@
 msgstr "Seřadit vybrané"
 
 #: src/audacious/ui_manager.c:380
-#, fuzzy
 msgid "File"
-msgstr "Oheň"
+msgstr "Soubor"
 
 #: src/audacious/ui_manager.c:381
 msgid "Help"
 msgstr "Nápověda"
 
 #: src/audacious/ui_manager.c:383
-#, fuzzy
 msgid "Plugin Services"
-msgstr "Moduly"
+msgstr "Služby modulu"
 
 #: src/audacious/ui_manager.c:385 src/audacious/ui_manager.c:388
 msgid "View Track Details"
@@ -1777,9 +1791,8 @@
 msgstr "Přehrát média z vybrané adresy"
 
 #: src/audacious/ui_manager.c:400
-#, fuzzy
 msgid "Plugin services"
-msgstr "Moduly"
+msgstr "Služby modulu"
 
 #: src/audacious/ui_manager.c:402
 msgid "Preferences"
@@ -1869,7 +1882,7 @@
 
 #: src/audacious/ui_manager.c:446
 msgid "Set equalizer preset levels to zero"
-msgstr "Vynulovat předovolby ekvalizéru"
+msgstr "Vynulovat předvolby ekvalizéru"
 
 #: src/audacious/ui_manager.c:448
 msgid "From file"
@@ -1948,14 +1961,12 @@
 "vyhledat."
 
 #: src/audacious/ui_playlist.c:493
-#, fuzzy
 msgid "Title: "
-msgstr "Název:"
+msgstr "Název: "
 
 #: src/audacious/ui_playlist.c:500
-#, fuzzy
 msgid "Album: "
-msgstr "Album:"
+msgstr "Album: "
 
 #: src/audacious/ui_playlist.c:507
 msgid "Artist: "
@@ -1999,13 +2010,12 @@
 "Neznámý typ souboru %s.\n"
 
 #: src/audacious/ui_playlist.c:911
-#, fuzzy
 msgid "Save as Static Playlist"
-msgstr "Uložit seznam skladeb"
+msgstr "Uložit statický seznam skladeb"
 
 #: src/audacious/ui_playlist.c:918
 msgid "Use Relative Path"
-msgstr ""
+msgstr "Použít relativní cesty"
 
 #: src/audacious/ui_playlist.c:940
 msgid "Load Playlist"
@@ -2056,9 +2066,8 @@
 msgstr "Komentář"
 
 #: src/audacious/ui_preferences.c:133
-#, fuzzy
 msgid "Codec"
-msgstr "Zavřít"
+msgstr "Kodek"
 
 #: src/audacious/ui_preferences.c:134
 msgid "Quality"
@@ -2080,7 +2089,7 @@
 msgid "Category"
 msgstr "Kategorie"
 
-#: src/audacious/ui_preferences.c:1963
+#: src/audacious/ui_preferences.c:1931
 msgid "Preferences Window"
 msgstr "Okno nastavení"
 
@@ -2140,40 +2149,46 @@
 msgid "Add/Open URL Dialog"
 msgstr "Dialog Přidat/otevřít URL"
 
-#~ msgid "Show window manager decorations"
-#~ msgstr "Zobrazovat dekorace podle správce oken"
-
-#, fuzzy
-#~ msgid "<b>Artist:</b> %s"
-#~ msgstr "<i>Umělec</i>"
-
-#, fuzzy
-#~ msgid "<b>Title:</b> %s"
-#~ msgstr "<i>Název</i>"
-
-#, fuzzy
-#~ msgid "<b>Album:</b> %s"
-#~ msgstr "<i>Album</i>"
-
-#, fuzzy
-#~ msgid "Audacious last.fm radio tuner"
-#~ msgstr "Zobrazit editor seznamu skladeb"
-
-#, fuzzy
-#~ msgid "Station:"
-#~ msgstr "Umístění:"
-
-#, fuzzy
-#~ msgid "<b>Artist:</b>"
-#~ msgstr "<i>Umělec</i>"
-
-#, fuzzy
-#~ msgid "<b>Title:</b>"
-#~ msgstr "<i>Název</i>"
-
-#, fuzzy
-#~ msgid "<b>Album:</b>"
-#~ msgstr "<i>Album</i>"
+#~ msgid ""
+#~ "<b><big>Unable to play files.</big></b>\n"
+#~ "\n"
+#~ "The following files could not be played. Please check that:\n"
+#~ "1. they are accessible.\n"
+#~ "2. you have enabled the media plugins required."
+#~ msgstr ""
+#~ "<b><big>Soubory nelze přehrát</big></b>\n"
+#~ "\n"
+#~ "Následující soubory nelze přehrát. Zkontrolujte zda:\n"
+#~ "1. jsou přístupné,\n"
+#~ "2. máte povolené příslušné moduly."
+
+#~ msgid "Don't show this warning anymore"
+#~ msgstr "Příště již nevarovat"
+
+#~ msgid "Show more _details"
+#~ msgstr "Ukaž podrobné _informace"
+
+#~ msgid ""
+#~ "Sorry, your GTK+ version (%d.%d.%d) does not work with Audacious.\n"
+#~ "Please use GTK+ %s or newer.\n"
+#~ msgstr ""
+#~ "Verze knihovny GTK+ (%d.%d.%d) není kompatibilní s Audacious.\n"
+#~ "Použijte GTK+ %s nebo novější.\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Received SIGSEGV\n"
+#~ "\n"
+#~ "This could be a bug in Audacious. If you don't know why this happened, "
+#~ "file a bug at http://bugs-meta.atheme.org/\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Zachycen SIGSEGV\n"
+#~ "\n"
+#~ "Asi jste narazili na chybu v programu Audacious. Pokud netušíte proč, "
+#~ "nahlaste chybu (anglicky) na http://bugs-meta.atheme.org/\n"
+#~ "\n"
 
 #~ msgid "VOLUME: %d%%"
 #~ msgstr "Hlasitost: %d%%"
@@ -2187,17 +2202,26 @@
 #~ msgid "BALANCE: %d%% RIGHT"
 #~ msgstr "VYROVNÁNÍ: %d%% VPRAVO"
 
-#, fuzzy
-#~ msgid "Last.fm radio"
-#~ msgstr "Hrát z adresy"
-
-#, fuzzy
-#~ msgid "Play Last.fm radio"
-#~ msgstr "Hrát z adresy"
-
-#, fuzzy
-#~ msgid "Converter Type:"
-#~ msgstr "Změnit znakovou sadu"
+#~ msgid "OPTIONS MENU"
+#~ msgstr "NASTAVENÍ"
+
+#~ msgid "DISABLE ALWAYS ON TOP"
+#~ msgstr "ZAKÁZAT FCI „VŽDY NA VRCHU“"
+
+#~ msgid "ENABLE ALWAYS ON TOP"
+#~ msgstr "POVOLIT FCI „VŽDY NA VRCHU“"
+
+#~ msgid "FILE INFO BOX"
+#~ msgstr "INFORMACE O SOUBORU"
+
+#~ msgid "DISABLE DOUBLESIZE"
+#~ msgstr "ZAKÁZAT DVOJITOU VELIKOST"
+
+#~ msgid "ENABLE DOUBLESIZE"
+#~ msgstr "POVOLIT DVOJITOU VELIKOST"
+
+#~ msgid "VISUALIZATION MENU"
+#~ msgstr "NASTAVENÍ ZOBRAZENÍ"
 
 #~ msgid ""
 #~ "<b><big>No playable CD found.</big></b>\n"
@@ -2208,14 +2232,20 @@
 #~ "\n"
 #~ "Není vloženo CD, nebo vložené CD není typu Audio CD.\n"
 
+#~ msgid "Play CD"
+#~ msgstr "Přehrát CD"
+
 #~ msgid "Add CD..."
 #~ msgstr "Přidat CD…"
 
 #~ msgid "Adds a CD to the playlist."
 #~ msgstr "Přidá CD do seznamu skladeb"
 
-#~ msgid "Play CD"
-#~ msgstr "Přehrát CD"
+#~ msgid "Track name: "
+#~ msgstr "Název skladby: "
+
+#~ msgid "Album name: "
+#~ msgstr "Název alba: "
 
 #~ msgid "Performer/Artist"
 #~ msgstr "Interpret/umělec"
@@ -2238,73 +2268,8 @@
 #~ msgid "%{n:...%}: Display \"...\" only if element %n is present"
 #~ msgstr "%{n:…%}: Zobraz „…“ pouze pokud %n nechybí"
 
-#~ msgid ""
-#~ "Sorry, your GTK+ version (%d.%d.%d) does not work with Audacious.\n"
-#~ "Please use GTK+ %s or newer.\n"
-#~ msgstr ""
-#~ "Verze knihovny GTK+ (%d.%d.%d) není kompatibilní s Audacious.\n"
-#~ "Použijte GTK+ %s nebo novější.\n"
-
-#~ msgid "OPTIONS MENU"
-#~ msgstr "NASTAVENÍ"
-
-#~ msgid "DISABLE ALWAYS ON TOP"
-#~ msgstr "ZAKÁZAT FCI „VŽDY NA VRCHU“"
-
-#~ msgid "ENABLE ALWAYS ON TOP"
-#~ msgstr "POVOLIT FCI „VŽDY NA VRCHU“"
-
-#~ msgid "FILE INFO BOX"
-#~ msgstr "INFORMACE O SOUBORU"
-
-#~ msgid "DISABLE DOUBLESIZE"
-#~ msgstr "ZAKÁZAT DVOJITOU VELIKOST"
-
-#~ msgid "ENABLE DOUBLESIZE"
-#~ msgstr "POVOLIT DVOJITOU VELIKOST"
-
-#~ msgid "VISUALIZATION MENU"
-#~ msgstr "NASTAVENÍ ZOBRAZENÍ"
-
-#~ msgid "Track name: "
-#~ msgstr "Název skladby: "
-
-#~ msgid "Album name: "
-#~ msgstr "Název alba: "
-
-#~ msgid ""
-#~ "<b><big>Unable to play files.</big></b>\n"
-#~ "\n"
-#~ "The following files could not be played. Please check that:\n"
-#~ "1. they are accessible.\n"
-#~ "2. you have enabled the media plugins required."
-#~ msgstr ""
-#~ "<b><big>Soubory nelze přehrát</big></b>\n"
-#~ "\n"
-#~ "Následující soubory nelze přehrát. Zkontrolujte zda:\n"
-#~ "1. jsou přístupné,\n"
-#~ "2. máte povolené příslušné moduly."
-
-#~ msgid "Don't show this warning anymore"
-#~ msgstr "Příště již nevarovat"
-
-#~ msgid "Show more _details"
-#~ msgstr "Ukaž podrobné _informace"
-
-#~ msgid ""
-#~ "\n"
-#~ "Received SIGSEGV\n"
-#~ "\n"
-#~ "This could be a bug in Audacious. If you don't know why this happened, "
-#~ "file a bug at http://bugs-meta.atheme.org/\n"
-#~ "\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Zachycen SIGSEGV\n"
-#~ "\n"
-#~ "Asi jste narazili na chybu v programu Audacious. Pokud netušíte proč, "
-#~ "nahlaste chybu (anglicky) na http://bugs-meta.atheme.org/\n"
-#~ "\n"
+#~ msgid "Show window manager decorations"
+#~ msgstr "Zobrazovat dekorace podle správce oken"
 
 #~ msgid "Chinese:"
 #~ msgstr "Čínský:"
@@ -2542,6 +2507,15 @@
 #~ msgid "Artist Popup"
 #~ msgstr "Vyskakovací okno o umělci"
 
+#~ msgid "<i>Title</i>"
+#~ msgstr "<i>Název</i>"
+
+#~ msgid "<i>Artist</i>"
+#~ msgstr "<i>Umělec</i>"
+
+#~ msgid "<i>Album</i>"
+#~ msgstr "<i>Album</i>"
+
 #~ msgid "<i>Genre</i>"
 #~ msgstr "<i>Žánr</i>"
 
@@ -3034,6 +3008,9 @@
 #~ msgid "Tag Handling"
 #~ msgstr "Zpracování tagů"
 
+#~ msgid "Convert Character Set"
+#~ msgstr "Změnit znakovou sadu"
+
 #~ msgid "Convert character set from :"
 #~ msgstr "Změnit znakovou sadu z :"
 
@@ -3927,6 +3904,9 @@
 #~ msgid "Description:"
 #~ msgstr "Popis:"
 
+#~ msgid "Location:"
+#~ msgstr "Umístění:"
+
 #~ msgid "Version:"
 #~ msgstr "Verze:"
 
--- a/po/fr.po	Tue Oct 30 11:22:17 2007 +0200
+++ b/po/fr.po	Fri Nov 16 05:32:56 2007 +0200
@@ -10,7 +10,7 @@
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: http://bugs.audacious-media-player.org\n"
 "POT-Creation-Date: 2007-10-13 14:15+0200\n"
-"PO-Revision-Date: 2007-10-17 03:45+0100\n"
+"PO-Revision-Date: 2007-10-27 10:18+0100\n"
 "Last-Translator: Stany Henry <StrassBoy@gmail.com>\n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
@@ -1120,7 +1120,7 @@
 
 #: src/audacious/ui_main.c:1228
 msgid "Audacious - visibility warning"
-msgstr "Audacious - avertissement quant à la visibilité"
+msgstr "Audacious - avertissement"
 
 #: src/audacious/ui_main.c:1230
 msgid "Show main player window"
@@ -1136,14 +1136,16 @@
 "You may want to show the player window again to control Audacious; otherwise, you'll have to control it remotely via audtool or enabled plugins (such as the statusicon plugin)."
 msgstr ""
 "Audacious a démarré, mais toutes les fenêtres de l'interface sont cachées.\n"
-"Peut-être voulez-vous voir à nouveau la fenêtre principale, afin de pouvoir\n"
-"contrôler Audacious. Dans le cas contraire, vous devrez utiliser les commandes\n"
-"distantes, par l'intermédiaire de 'audtool' ou des extensions activées\n"
-"('statusicon', par exemple)."
+"\n"
+"Peut-être voulez-vous voir à nouveau la fenêtre principale, afin de pouvoir contrôler Audacious.\n"
+"Dans le cas contraire, vous devrez utiliser les commandes distantes, par l'intermédiaire de 'audtool' ou des extensions activées (le module 'statusicon', par exemple).\n"
+" "
 
 #: src/audacious/ui_main.c:1241
 msgid "Always ignore, show/hide is controlled remotely"
-msgstr "Toujours ignorer : la fonction 'montrer'/'cacher' est contrôlée de manière distante."
+msgstr ""
+"Toujours ignorer : la fonction 'montrer/cacher'\n"
+"est contrôlée de manière distante."
 
 #: src/audacious/ui_main.c:1259
 msgid "Enter location to play:"
@@ -2071,6 +2073,7 @@
 msgid "Description"
 msgstr "Description"
 
+#: src/audacious/ui_preferences.c:1395
 msgid "Category"
 msgstr "Catégorie"
 
@@ -2133,4 +2136,3 @@
 #: src/audacious/ui_urlopener.c:88
 msgid "Add/Open URL Dialog"
 msgstr "Ouvrir/Ajouter un flux"
-
--- a/po/ru.po	Tue Oct 30 11:22:17 2007 +0200
+++ b/po/ru.po	Fri Nov 16 05:32:56 2007 +0200
@@ -1,22 +1,26 @@
 # Russian translation for Audacious.
 # Copyright (C) 2006,2007 Alexander Orlov <alxorlov@pochta.ru>
 # This file is distributed under the same license as the Audacious package.
-# Alexander Orlov <alxorlov@pochta.ru>, 2007.
 #
 # За основу взят перевод Виталия Липатова для BMP.
 # Улучшения перевода приветствуются :)
 #
+# Alexander Orlov <alxorlov@pochta.ru>, 2007.
+# Vitaly Lipatov <lav@etersoft.ru>, 2007.
+#
 msgid ""
 msgstr ""
-"Project-Id-Version: audacious 1.3\n"
+"Project-Id-Version: audacious 1.4\n"
 "Report-Msgid-Bugs-To: http://bugs.audacious-media-player.org\n"
 "POT-Creation-Date: 2007-10-13 14:15+0200\n"
-"PO-Revision-Date: 2007-04-12 21:52+0300\n"
-"Last-Translator: Alexander Orlov <alxorlov@pochta.ru>\n"
+"PO-Revision-Date: 2007-11-02 02:05+0300\n"
+"Last-Translator: Vitaly Lipatov <lav@etersoft.ru>\n"
 "Language-Team: none\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms:  nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
 #: src/audacious/glade.c:45
 #, c-format
@@ -47,7 +51,7 @@
 
 #: src/audacious/glade/fileinfo.glade:255
 msgid "<span size=\"small\">Comment</span>"
-msgstr "<span size=\"small\"><b>Коментарии</b></span>"
+msgstr "<span size=\"small\"><b>Комментарии</b></span>"
 
 #: src/audacious/glade/fileinfo.glade:313
 msgid "<span size=\"small\">Genre</span>"
@@ -130,9 +134,8 @@
 msgstr "Выбор шрифта для главного окна"
 
 #: src/audacious/glade/prefswin.glade:1072
-#, fuzzy
 msgid "Select playlist font:"
-msgstr "Выбор шрифта для главного окна"
+msgstr "Выбор шрифта для списка воспроизведения"
 
 #: src/audacious/glade/prefswin.glade:1112
 msgid ""
@@ -189,10 +192,12 @@
 "If selected, the file information text in the main window will scroll back "
 "and forth. If not selected, the text will only scroll in one direction."
 msgstr ""
+"Если выбрано, текстовая информация о файле в главном окне будет прокручиваться взад и вперёд. "
+"Если не выбрано, текст прокручивается только в одном направлении."
 
 #: src/audacious/glade/prefswin.glade:1380
 msgid "Use two-way text scroller"
-msgstr ""
+msgstr "Двунаправленная прокрутка текста"
 
 #: src/audacious/glade/prefswin.glade:1422 src/audacious/ui_preferences.c:111
 msgid "Appearance"
@@ -306,7 +311,7 @@
 
 #: src/audacious/glade/prefswin.glade:2191
 msgid "Always refresh directory when opening file dialog"
-msgstr "Всевгда обновлять каталог при открытии окна выбора файлов"
+msgstr "Всегда обновлять каталог при открытии окна выбора файлов"
 
 #: src/audacious/glade/prefswin.glade:2225
 msgid "<b>Song Display</b>"
@@ -434,7 +439,6 @@
 msgstr "Размер буфера:"
 
 #: src/audacious/glade/prefswin.glade:3593
-#, fuzzy
 msgid ""
 "<span size=\"small\">This is the amount of time to prebuffer audio streams "
 "by, in milliseconds.\n"
@@ -445,7 +449,7 @@
 "<span size=\"small\">Это время предварительной буферизации звуковых потоков, "
 "в миллисекундах.\n"
 "Увеличьте это значение, если при проигрывании звук прерывается. \n"
-"Учтите, что при слишком больших значениях Audacious будет работать медленно."
+"Учтите, что при слишком больших значениях Audacious будет работать замедленно."
 "</span>"
 
 #: src/audacious/glade/prefswin.glade:3663
@@ -531,11 +535,11 @@
 
 #: src/audacious/glade/prefswin.glade:4249
 msgid "<b>Sampling Rate Converter</b>"
-msgstr ""
+msgstr "<b>Преобразование частоты дискретизации</b>"
 
 #: src/audacious/glade/prefswin.glade:4289
 msgid "Enable Sampling Rate Converter"
-msgstr ""
+msgstr "Включить преобразование частоты дискретизации"
 
 #: src/audacious/glade/prefswin.glade:4338
 msgid ""
@@ -548,7 +552,7 @@
 
 #: src/audacious/glade/prefswin.glade:4361
 msgid "Interpolation Engine:"
-msgstr ""
+msgstr "Алгоритм интерполяции:"
 
 #: src/audacious/glade/prefswin.glade:4389
 msgid ""
@@ -556,30 +560,34 @@
 "This should be the max supported sampling rate of\n"
 "the sound card or output plugin.</span>"
 msgstr ""
+"<span size=\"small\">Все потоки будут преобразованы к этой частоте\n"
+"дискретизации, которая должна быть максимальной поддерживаемой\n"
+"частотой звуковой карты или выходного модуля.</span>"
 
 #: src/audacious/glade/prefswin.glade:4461
 msgid "Sampling Rate [Hz]:"
-msgstr ""
+msgstr "Частота дискретизации [Гц]:"
 
 #: src/audacious/glade/prefswin.glade:4517
-#, fuzzy
 msgid "<b>Volume Control</b>"
-msgstr "<b>Колесо мыши</b>"
+msgstr "<b>Регулировка громкости</b>"
 
 #: src/audacious/glade/prefswin.glade:4556
 msgid ""
 "Use software volume control. This may be useful for situations where your "
 "audio system does not support controlling the playback volume."
 msgstr ""
+"Использовать программное управление громкостью. "
+"Это может быть полезно, если ваша звуковая система не поддерживает "
+"управление громкостью воспроизведения."
 
 #: src/audacious/glade/prefswin.glade:4558
 msgid "Use software volume control"
-msgstr ""
+msgstr "Программная регулировка громкости"
 
 #: src/audacious/glade/prefswin.glade:4746
-#, fuzzy
 msgid "Reload Plugins"
-msgstr "Модули"
+msgstr "Перезагрузить модули"
 
 #: src/audacious/glade/prefswin.glade:4807
 msgid "Popup Information Settings"
@@ -693,7 +701,7 @@
 
 #: src/audacious/main.c:1066
 msgid "Skip backwards in playlist"
-msgstr "Перейти к предыдущей песне в списке песен"
+msgstr "Перейти к предыдущей песне в списке воспроизведения"
 
 #: src/audacious/main.c:1067
 msgid "Start playing current playlist"
@@ -741,7 +749,7 @@
 
 #: src/audacious/main.c:1078
 msgid "Print all errors and warnings to stdout"
-msgstr "Выводить все ошибки и предупреждения стандартный вывод"
+msgstr "Выводить все ошибки и предупреждения в стандартный вывод"
 
 #: src/audacious/main.c:1079
 msgid "Show version and builtin features"
@@ -822,6 +830,19 @@
 "report:\n"
 "\n"
 msgstr ""
+"\n"
+"Audacious получил сигнал 11 (SIGSEGV).\n"
+"\n"
+"Мы приносим извинения за неудобство, но Audacious аварийно завершает работу.\n"
+"Это ошибка программы, и такого не должно происходить в нормальных условиях.\n"
+"Текущие параметры будут сохранены и не должны быть повреждены.\n"
+"\n"
+"Вы можете помочь улучшить качество Audacious заполнением отчёта о проблеме на http://bugs-"
+"meta.atheme.org\n"
+"Приведите там весь текст следующего сообщения и опишите что именно вы делали\n"
+"когда произошла данная авария.\n"
+"Это поможет быстро обработать ваш отчёт и понять в чём проблема:\n"
+"\n"
 
 #: src/audacious/signals.c:80
 msgid ""
@@ -829,12 +850,16 @@
 "Bugs can be reported at http://bugs-meta.atheme.org against the Audacious "
 "product.\n"
 msgstr ""
+"\n"
+"Об ошибках в Audacious можно сообщить на http://bugs-meta.atheme.org .\n"
 
 #: src/audacious/signals.c:266
 msgid ""
 "Your signaling implementation is broken.\n"
 "Expect unusable crash reports.\n"
 msgstr ""
+"Реализация системы сигналов некорректна.\n"
+"Возможны бесполезные сообщения о падении программы.\n"
 
 #: src/audacious/strings.c:170
 msgid "  (invalid UTF-8)"
@@ -861,7 +886,7 @@
 msgstr "Авторы"
 
 #: src/audacious/ui_credits.c:47
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "<big><b>Audacious %s</b></big>\n"
 "A skinned multimedia player for many platforms.\n"
@@ -869,7 +894,7 @@
 "Copyright (C) 2005-2007 Audacious Development Team\n"
 msgstr ""
 "<big><b>Audacious %s</b></big>\n"
-"Мультимедийный проигрыватель будущего для UNIX.\n"
+"Многофункциональный мультимедийный проигрыватель для различных платформ.\n"
 "\n"
 "Copyright (C) 2005-2007 Команда разработчиков Audacious\n"
 
@@ -914,9 +939,8 @@
 msgstr "Болгарский:"
 
 #: src/audacious/ui_credits.c:165
-#, fuzzy
 msgid "Catalan:"
-msgstr "Итальянский:"
+msgstr "Каталанский:"
 
 #: src/audacious/ui_credits.c:168
 msgid "Croatian:"
@@ -1125,9 +1149,8 @@
 msgstr "_Фильтр:"
 
 #: src/audacious/ui_jumptotrack.c:594
-#, fuzzy
 msgid "Close on Jump"
-msgstr "Закрыть окно при Открытии"
+msgstr "Закрыть после"
 
 #: src/audacious/ui_main.c:489
 #, c-format
@@ -1161,16 +1184,15 @@
 
 #: src/audacious/ui_main.c:1228
 msgid "Audacious - visibility warning"
-msgstr ""
+msgstr "Audacious - предупреждение видимости"
 
 #: src/audacious/ui_main.c:1230
-#, fuzzy
 msgid "Show main player window"
-msgstr "Выбор шрифта для главного окна"
+msgstr "Показывать главное окно проигрывателя"
 
 #: src/audacious/ui_main.c:1231
 msgid "Ignore"
-msgstr ""
+msgstr "Игнорировать"
 
 #: src/audacious/ui_main.c:1235
 msgid ""
@@ -1179,71 +1201,70 @@
 "otherwise, you'll have to control it remotely via audtool or enabled plugins "
 "(such as the statusicon plugin)."
 msgstr ""
+"Audacious был запущен, но все окна спрятаны.\n"
+"Для управления Audacious вам возможно потребуется показать окно "
+"проигрывателя вновь; в противном случае вы можете управлять "
+"им удалённо через audtool или дополнительный модуль (такой как statusicon). "
 
 #: src/audacious/ui_main.c:1241
 msgid "Always ignore, show/hide is controlled remotely"
-msgstr ""
+msgstr "Всегда игнорировать, показывать/прятать управляется удалённо"
 
 #: src/audacious/ui_main.c:1259
 msgid "Enter location to play:"
 msgstr "Введите адрес для воспроизведения:"
 
 #: src/audacious/ui_main.c:1504
-#, fuzzy, c-format
+#, c-format
 msgid "Seek to: %d:%-2.2d/%d:%-2.2d (%d%%)"
-msgstr "ПЕРЕМЕЩЕНИЕ: %d:%-2.2d/%d:%-2.2d (%d%%)"
+msgstr "Перемещение: %d:%-2.2d/%d:%-2.2d (%d%%)"
 
 #: src/audacious/ui_main.c:1536
 #, c-format
 msgid "Volume: %d%%"
-msgstr ""
+msgstr "Громкость: %d%%"
 
 #: src/audacious/ui_main.c:1566
 #, c-format
 msgid "Balance: %d%% left"
-msgstr ""
+msgstr "Баланс: %d%% влево"
 
 #: src/audacious/ui_main.c:1570
 msgid "Balance: center"
-msgstr ""
+msgstr "Баланс: центр"
 
 #: src/audacious/ui_main.c:1574
 #, c-format
 msgid "Balance: %d%% right"
-msgstr ""
+msgstr "Баланс: %d%% вправо"
 
 #: src/audacious/ui_main.c:1916
 msgid "Options Menu"
-msgstr ""
+msgstr "Меню параметров"
 
 #: src/audacious/ui_main.c:1920
-#, fuzzy
 msgid "Disable 'Always On Top'"
-msgstr "Поднять на передний план"
+msgstr "Выключить \"Всегда на переднем плане\""
 
 #: src/audacious/ui_main.c:1922
-#, fuzzy
 msgid "Enable 'Always On Top'"
-msgstr "Поднять на передний план"
+msgstr "Включить \"Всегда на переднем плане\""
 
 #: src/audacious/ui_main.c:1925
 msgid "File Info Box"
-msgstr ""
+msgstr "Окно информации о файле"
 
 #: src/audacious/ui_main.c:1929
-#, fuzzy
 msgid "Disable 'Doublesize'"
-msgstr "Двойной размер"
+msgstr "Выключить \"Двойной размер\""
 
 #: src/audacious/ui_main.c:1931
-#, fuzzy
 msgid "Enable 'Doublesize'"
-msgstr "Двойной размер"
+msgstr "Включить \"Двойной размер\""
 
 #: src/audacious/ui_main.c:1934
-#, fuzzy
 msgid "Visualization Menu"
-msgstr "Режим визуализации"
+msgstr "Меню визуализации"
 
 #: src/audacious/ui_main.c:1982
 msgid ""
@@ -1436,7 +1457,7 @@
 
 #: src/audacious/ui_manager.c:172 src/audacious/ui_manager.c:173
 msgid "Play"
-msgstr "Воспроизведение"
+msgstr "Воспроизвести"
 
 #: src/audacious/ui_manager.c:175 src/audacious/ui_manager.c:176
 msgid "Pause"
@@ -1742,18 +1763,16 @@
 msgstr "Сортировать выбранные"
 
 #: src/audacious/ui_manager.c:380
-#, fuzzy
 msgid "File"
-msgstr "Пламя"
+msgstr "Файл"
 
 #: src/audacious/ui_manager.c:381
 msgid "Help"
-msgstr ""
+msgstr "Справка"
 
 #: src/audacious/ui_manager.c:383
-#, fuzzy
 msgid "Plugin Services"
-msgstr "Модули"
+msgstr "Вспомогательные модули"
 
 #: src/audacious/ui_manager.c:385 src/audacious/ui_manager.c:388
 msgid "View Track Details"
@@ -1780,9 +1799,8 @@
 msgstr "Воспроизвести запись с указанного адреса"
 
 #: src/audacious/ui_manager.c:400
-#, fuzzy
 msgid "Plugin services"
-msgstr "Модули"
+msgstr "Вспомогательные модули"
 
 #: src/audacious/ui_manager.c:402
 msgid "Preferences"
@@ -1802,7 +1820,7 @@
 
 #: src/audacious/ui_manager.c:408 src/audacious/ui_manager.c:409
 msgid "Set A-B"
-msgstr "Поставить метку A-B"
+msgstr "Поставить метки A-B"
 
 #: src/audacious/ui_manager.c:411 src/audacious/ui_manager.c:412
 msgid "Clear A-B"
@@ -1951,14 +1969,12 @@
 "часть того, что вы ищете."
 
 #: src/audacious/ui_playlist.c:493
-#, fuzzy
 msgid "Title: "
-msgstr "Название"
+msgstr "Название: "
 
 #: src/audacious/ui_playlist.c:500
-#, fuzzy
 msgid "Album: "
-msgstr "Альбом"
+msgstr "Альбом: "
 
 #: src/audacious/ui_playlist.c:507
 msgid "Artist: "
@@ -2002,13 +2018,12 @@
 "Неизвестный формат файла '%s'.\n"
 
 #: src/audacious/ui_playlist.c:911
-#, fuzzy
 msgid "Save as Static Playlist"
-msgstr "Сохранение списка воспроизведения"
+msgstr "Сохранить статический список воспроизведения"
 
 #: src/audacious/ui_playlist.c:918
 msgid "Use Relative Path"
-msgstr ""
+msgstr "Использовать относительный путь"
 
 #: src/audacious/ui_playlist.c:940
 msgid "Load Playlist"
@@ -2060,12 +2075,11 @@
 
 #: src/audacious/ui_preferences.c:133
 msgid "Codec"
-msgstr ""
+msgstr "Кодек"
 
 #: src/audacious/ui_preferences.c:134
-#, fuzzy
 msgid "Quality"
-msgstr "_Выход"
+msgstr "Качество"
 
 #: src/audacious/ui_preferences.c:155
 msgid "localhost"
@@ -2142,178 +2156,3 @@
 #: src/audacious/ui_urlopener.c:88
 msgid "Add/Open URL Dialog"
 msgstr "Добавить/Открыть URL"
-
-#~ msgid "Show window manager decorations"
-#~ msgstr "Показывать заголовки менеджера окон"
-
-#, fuzzy
-#~ msgid "<b>Artist:</b> %s"
-#~ msgstr "<b>Предустановки</b>"
-
-#, fuzzy
-#~ msgid "<b>Title:</b> %s"
-#~ msgstr "<b>Название файла</b>"
-
-#, fuzzy
-#~ msgid "<b>Album:</b> %s"
-#~ msgstr "Альбом"
-
-#, fuzzy
-#~ msgid "Audacious last.fm radio tuner"
-#~ msgstr "Список воспроизведения Audacious"
-
-#, fuzzy
-#~ msgid "Station:"
-#~ msgstr "Итальянский:"
-
-#, fuzzy
-#~ msgid "<b>Artist:</b>"
-#~ msgstr "<b>Предустановки</b>"
-
-#, fuzzy
-#~ msgid "<b>Title:</b>"
-#~ msgstr "<b>Название файла</b>"
-
-#, fuzzy
-#~ msgid "<b>Album:</b>"
-#~ msgstr "<b>Название файла</b>"
-
-#~ msgid "VOLUME: %d%%"
-#~ msgstr "ГРОМКОСТЬ: %d%%"
-
-#~ msgid "BALANCE: %d%% LEFT"
-#~ msgstr "БАЛАНС: %d%% ВЛЕВО"
-
-#~ msgid "BALANCE: CENTER"
-#~ msgstr "БАЛАНС: ЦЕНТР"
-
-#~ msgid "BALANCE: %d%% RIGHT"
-#~ msgstr "БАЛАНС: %d%% ВПРАВО"
-
-#, fuzzy
-#~ msgid "Last.fm radio"
-#~ msgstr "Открыть адрес"
-
-#, fuzzy
-#~ msgid "Play Last.fm radio"
-#~ msgstr "Открыть адрес"
-
-#~ msgid ""
-#~ "<b><big>No playable CD found.</big></b>\n"
-#~ "\n"
-#~ "No CD inserted, or inserted CD is not an audio CD.\n"
-#~ msgstr ""
-#~ "<b><big>Не найдено воспроизводимого CD.</big></b>\n"
-#~ "\n"
-#~ "Компакт-диск отсутствует или не содержит аудио-дорожек.\n"
-
-#~ msgid "Add CD..."
-#~ msgstr "Добавить CD..."
-
-#~ msgid "Adds a CD to the playlist."
-#~ msgstr "Добавляет записи с компакт-диска в список воспроизведения."
-
-#~ msgid "Play CD"
-#~ msgstr "Воспроизвести CD"
-
-#~ msgid "Performer/Artist"
-#~ msgstr "Исполнитель"
-
-#~ msgid "File name"
-#~ msgstr "Имя файла"
-
-#~ msgid "File path"
-#~ msgstr "Путь к файлу"
-
-#~ msgid "File extension"
-#~ msgstr "Расширение файла"
-
-#~ msgid "Track name"
-#~ msgstr "Название"
-
-#~ msgid "Track number"
-#~ msgstr "Номер дорожки"
-
-#~ msgid "%{n:...%}: Display \"...\" only if element %n is present"
-#~ msgstr "%{n:...%}: Отображать \"...\", когда элемент %n присутствует"
-
-#~ msgid ""
-#~ "Sorry, your GTK+ version (%d.%d.%d) does not work with Audacious.\n"
-#~ "Please use GTK+ %s or newer.\n"
-#~ msgstr ""
-#~ "Простите, ваша версия GTK+ (%d.%d.%d) не будет работать с Audacious.\n"
-#~ "Пожалуйста, используйте GTK+ %s или новее.\n"
-
-#~ msgid "OPTIONS MENU"
-#~ msgstr "МЕНЮ НАСТРОЕК"
-
-#~ msgid "DISABLE ALWAYS ON TOP"
-#~ msgstr "ОТКЛЮЧИТЬ ВСЕГДА НАВЕРХУ"
-
-#~ msgid "ENABLE ALWAYS ON TOP"
-#~ msgstr "ВКЛЮЧИТЬ ВСЕГДА НАВЕРХУ"
-
-#~ msgid "FILE INFO BOX"
-#~ msgstr "ОКНО ИНФОРМАЦИИ О ФАЙЛЕ"
-
-#~ msgid "DISABLE DOUBLESIZE"
-#~ msgstr "ОТКЛЮЧИТЬ ДВОЙНОЙ РАЗМЕР"
-
-#~ msgid "ENABLE DOUBLESIZE"
-#~ msgstr "ВКЛЮЧИТЬ ДВОЙНОЙ РАЗМЕР"
-
-#~ msgid "VISUALIZATION MENU"
-#~ msgstr "МЕНЮ ВИЗУАЛИЗАЦИИ"
-
-#~ msgid "Track name: "
-#~ msgstr "Название: "
-
-#~ msgid "Album name: "
-#~ msgstr "Альбом: "
-
-#~ msgid ""
-#~ "<b><big>Unable to play files.</big></b>\n"
-#~ "\n"
-#~ "The following files could not be played. Please check that:\n"
-#~ "1. they are accessible.\n"
-#~ "2. you have enabled the media plugins required."
-#~ msgstr ""
-#~ "<b><big>Невозможно воспроизвести файлы.</big></b>\n"
-#~ "\n"
-#~ "Некоторые файлы не могут быть воспроизведены. Пожалуйста, проверьте "
-#~ "следующее:\n"
-#~ "1. Доступность этих файлов.\n"
-#~ "2. Включены необходимые аудио-модули."
-
-#~ msgid "Don't show this warning anymore"
-#~ msgstr "Больше не показывать это предупреждение"
-
-#~ msgid "Show more _details"
-#~ msgstr "_Подробнее"
-
-#~ msgid ""
-#~ "\n"
-#~ "Received SIGSEGV\n"
-#~ "\n"
-#~ "This could be a bug in Audacious. If you don't know why this happened, "
-#~ "file a bug at http://bugs-meta.atheme.org/\n"
-#~ "\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Получен SIGSEGV\n"
-#~ "\n"
-#~ "Возможно это ошибка в Audacious. Если вы не знаете, почему это произошло, "
-#~ "то напишите сообщение об ошибке на http://bugs-meta.atheme.org/\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "Enables playlist transparency. This is not recommended for slower "
-#~ "machines as it requires some CPU time to create and cache the pixmaps "
-#~ "used for the transparency."
-#~ msgstr ""
-#~ "Включает прозрачность списка воспроизведения. Не рекомендуется для "
-#~ "медленных машин потому что это требует дополнительное процессорное время "
-#~ "для создания и кэширования изображений необходимых для прозрачности."
-
-#~ msgid "Enable playlist transparency"
-#~ msgstr "Прозрачный список воспроизведения"
--- a/src/audacious/Makefile	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/Makefile	Fri Nov 16 05:32:56 2007 +0200
@@ -25,7 +25,6 @@
        input.c				\
        logger.c				\
        main.c				\
-       memorypool.c			\
        mime.c				\
        output.c				\
        pixbuf_effects.c			\
--- a/src/audacious/dbus-service.h	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/dbus-service.h	Fri Nov 16 05:32:56 2007 +0200
@@ -111,8 +111,7 @@
 
 /* Legacy API */
 // Audacious General Information
-gboolean audacious_rc_version(RemoteObject *obj, gchar **version,
-                              GError **error);
+gboolean audacious_rc_version(RemoteObject *obj, gchar **version, GError **error);
 gboolean audacious_rc_quit(RemoteObject *obj, GError **error);
 gboolean audacious_rc_eject(RemoteObject *obj, GError **error);
 gboolean audacious_rc_main_win_visible(RemoteObject *obj,
@@ -185,9 +184,10 @@
 gboolean audacious_rc_toggle_shuffle(RemoteObject *obj, GError **error);
 
 /* new */
-gboolean audacious_rc_show_prefs_box(RemoteObject *obj, GError **error);
-gboolean audacious_rc_show_about_box(RemoteObject *obj, GError **error);
-gboolean audacious_rc_show_jtf_box(RemoteObject *obj, GError **error);
+gboolean audacious_rc_show_prefs_box(RemoteObject *obj, gboolean show, GError **error);
+gboolean audacious_rc_show_about_box(RemoteObject *obj, gboolean show, GError **error);
+gboolean audacious_rc_show_jtf_box(RemoteObject *obj, gboolean show, GError **error);
+gboolean audacious_rc_show_filebrowser(RemoteObject *obj, gboolean show, GError **error); //new Nov 8
 gboolean audacious_rc_play_pause(RemoteObject *obj, GError **error);
 gboolean audacious_rc_activate(RemoteObject *obj, GError **error);
 gboolean audacious_rc_queue_get_list_pos(RemoteObject *obj, gint qpos, gint *pos, GError **error);
@@ -201,10 +201,17 @@
 gboolean audacious_rc_playqueue_remove(RemoteObject *obj, gint pos, GError **error);
 gboolean audacious_rc_playqueue_clear(RemoteObject *obj, GError **error);
 gboolean audacious_rc_playqueue_is_queued(RemoteObject *obj, gint pos, gboolean *is_queued, GError **error);
+gboolean audacious_rc_playlist_ins_url_string(RemoteObject *obj, gchar *url, gint pos, GError **error);
+gboolean audacious_rc_playlist_enqueue_to_temp(RemoteObject *obj, gchar *url, GError **error);
+gboolean audacious_rc_playlist_add(RemoteObject *obj, gpointer list, GError **error);
 
-/* in progress */
-gboolean audacious_rc_playlist_ins_url_string(RemoteObject *obj, gchar *url, gint *pos, GError **error);
-gboolean audacious_rc_playlist_add(RemoteObject *obj, gpointer list, GError **error);
-gboolean audacious_rc_playlist_enqueue_to_temp(RemoteObject *obj, char *list, gint num, gboolean enqueue, GError **error);
+/* new on nov 7 */
+gboolean audacious_rc_get_eq(RemoteObject *obj, gdouble *preamp, GArray **bands, GError **error);
+gboolean audacious_rc_get_eq_preamp(RemoteObject *obj, gdouble *preamp, GError **error);
+gboolean audacious_rc_get_eq_band(RemoteObject *obj, gint band, gdouble *value, GError **error);
+gboolean audacious_rc_set_eq(RemoteObject *obj, gdouble preamp, GArray *bands, GError **error);
+gboolean audacious_rc_set_eq_preamp(RemoteObject *obj, gdouble preamp, GError **error);
+gboolean audacious_rc_set_eq_band(RemoteObject *obj, gint band, gdouble value, GError **error);
+gboolean audacious_rc_equalizer_activate(RemoteObject *obj, gboolean active, GError **error);
 
 #endif // !_DBUS_SERVICE_H
--- a/src/audacious/dbus.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/dbus.c	Fri Nov 16 05:32:56 2007 +0200
@@ -23,7 +23,10 @@
 #endif
 
 #include <glib.h>
+#include <dbus/dbus.h>
+#include <dbus/dbus-glib.h>
 #include <dbus/dbus-glib-bindings.h>
+#include <dbus/dbus-glib-lowlevel.h>
 #include "dbus.h"
 #include "dbus-service.h"
 #include "dbus-server-bindings.h"
@@ -37,12 +40,12 @@
 #include "playlist.h"
 #include "ui_playlist.h"
 #include "ui_preferences.h"
-#include "memorypool.h"
 #include "tuple.h"
 #include "ui_jumptotrack.h"
 #include "strings.h"
 #include "ui_credits.h"
 #include "skin.h"
+#include "ui_fileopener.h"
 
 static DBusGConnection *dbus_conn = NULL;
 static guint signals[LAST_SIG] = { 0 };
@@ -161,6 +164,7 @@
 
 void init_dbus() {
     GError *error = NULL;
+    DBusConnection *local_conn;
     // Initialize the DBus connection
     dbus_conn = dbus_g_bus_get(DBUS_BUS_SESSION, &error);
     if (dbus_conn == NULL) {
@@ -175,6 +179,9 @@
     mpris = g_object_new(mpris_player_get_type(), NULL);
     g_object_new(mpris_tracklist_get_type(), NULL);
     g_message("D-Bus support has been activated");
+
+    local_conn = dbus_g_connection_get_connection(dbus_conn);
+    dbus_connection_set_exit_on_disconnect(local_conn, FALSE);
 }
 
 GValue *tuple_value_to_gvalue(Tuple *tuple, const gchar *key) {
@@ -486,8 +493,7 @@
 }
 
 // Audacious General Information
-gboolean audacious_rc_version(RemoteObject *obj, gchar **version,
-                              GError **error) {
+gboolean audacious_rc_version(RemoteObject *obj, gchar **version, GError **error) {
     *version = g_strdup(VERSION);
     return TRUE;
 }
@@ -795,20 +801,43 @@
 }
 
 /* New on Oct 5 */
-gboolean audacious_rc_show_prefs_box(RemoteObject *obj, GError **error) {
-    if (has_x11_connection)
-        show_prefs_window();
+gboolean audacious_rc_show_prefs_box(RemoteObject *obj, gboolean show, GError **error) {
+    if (has_x11_connection) {
+        if (show)
+            show_prefs_window();
+        else
+            hide_prefs_window();
+    }
     return TRUE;
 }
-gboolean audacious_rc_show_about_box(RemoteObject *obj, GError **error) {
-    if (has_x11_connection)
-        show_about_window();
+gboolean audacious_rc_show_about_box(RemoteObject *obj, gboolean show, GError **error) {
+    if (has_x11_connection) {
+        if (show)
+            show_about_window();
+        else
+            hide_about_window();
+    }
     return TRUE;
 }
 
-gboolean audacious_rc_show_jtf_box(RemoteObject *obj, GError **error) {
-    if (has_x11_connection)
-        ui_jump_to_track();
+gboolean audacious_rc_show_jtf_box(RemoteObject *obj, gboolean show, GError **error) {
+    if (has_x11_connection) {
+        if (show)
+            ui_jump_to_track();
+        else
+            ui_jump_to_track_hide();
+    }
+    return TRUE;
+}
+
+gboolean audacious_rc_show_filebrowser(RemoteObject *obj, gboolean show, GError **error)
+{
+    if (has_x11_connection) {
+        if (show)
+            run_filebrowser(FALSE);
+        else
+            hide_filebrowser();
+    }
     return TRUE;
 }
 
@@ -848,7 +877,7 @@
     return TRUE;
 }
 
-/* New on Oct9: Queue */
+/* New on Oct 9: Queue */
 gboolean audacious_rc_playqueue_add(RemoteObject *obj, gint pos, GError **error) {
     if (pos < (guint)playlist_get_length(playlist_get_active()))
         playlist_queue_position(playlist_get_active(), pos);
@@ -890,31 +919,109 @@
     return TRUE;
 }
 
-
+gboolean audacious_rc_playlist_ins_url_string(RemoteObject *obj, gchar *url, gint pos, GError **error) {
+    if (pos >= 0 && url && strlen(url)) {
+        playlist_ins_url(playlist_get_active(), url, pos);
+    }
+    return TRUE;
+}
 
-/* In Progress */
-static void call_add_url(GList *list, gpointer *data) {
+static void call_playlist_add_url(GList *list, gpointer *data) {
         playlist_add_url(playlist_get_active(), list->data);
 }
 
 gboolean audacious_rc_playlist_add(RemoteObject *obj, gpointer list, GError **error) {
-    g_list_foreach((GList *)list, (GFunc)call_add_url, NULL);
+    g_list_foreach((GList *)list, (GFunc)call_playlist_add_url, NULL);
     return TRUE;
 }
 
-gboolean audacious_rc_playlist_enqueue_to_temp(RemoteObject *obj, char *list, gint num, gboolean enqueue, GError **error) {
+gboolean audacious_rc_playlist_enqueue_to_temp(RemoteObject *obj, gchar *url, GError **error) {
+    GList *playlists = NULL;
+    Playlist *new_pl = playlist_new();
+    gchar *pl_name = NULL;
+
+    pl_name = (gchar*)playlist_get_current_name(new_pl);
+    if(!pl_name)
+        pl_name = g_strdup("New Playlist");
+    playlist_set_current_name(new_pl, pl_name);
+    g_free(pl_name);
+
+    playlists = playlist_get_playlists();
+    playlist_add_playlist(new_pl);
+
+//    DISABLE_MANAGER_UPDATE();
+    playlist_select_playlist(new_pl);
+//    ENABLE_MANAGER_UPDATE();
+
+    playlist_add_url(new_pl, url);
+
+    return TRUE;
+}
+
+/* New on Nov 7: Equalizer */ 
+gboolean audacious_rc_get_eq(RemoteObject *obj, gdouble *preamp, GArray **bands, GError **error)
+{
+    int i;
+
+    *preamp = (gdouble)equalizerwin_get_preamp();
+    *bands = g_array_sized_new(FALSE, FALSE, sizeof(gdouble), 10);
+
+    for(i=0; i<10; i++){
+        gdouble val = (gdouble)equalizerwin_get_band(i);
+        g_array_append_val(*bands, val);
+    }
+
     return TRUE;
 }
 
-gboolean audacious_rc_playlist_ins_url_string(RemoteObject *obj, gchar *url, gint *pos, GError **error) {
-    if (url && strlen(url)) {
-        playlist_ins_url(playlist_get_active(), url, *pos);
-    }
+gboolean audacious_rc_get_eq_preamp(RemoteObject *obj, gdouble *preamp, GError **error)
+{
+    *preamp = (gdouble)equalizerwin_get_preamp();
+    return TRUE;
+}
+
+gboolean audacious_rc_get_eq_band(RemoteObject *obj, gint band, gdouble *value, GError **error)
+{
+    *value = (gdouble)equalizerwin_get_band(band);
     return TRUE;
 }
 
+gboolean audacious_rc_set_eq(RemoteObject *obj, gdouble preamp, GArray *bands, GError **error)
+{
+    gdouble element;
+    int i;
+    
+    equalizerwin_set_preamp((gfloat)preamp);
 
-/********************************************************************************/
+    for (i = 0; i < 10; i++) {
+        element = g_array_index(bands, gdouble, i);
+        equalizerwin_set_band(i, (gfloat)element);
+    }
+    equalizerwin_eq_changed();
+
+    return TRUE;
+}
+
+gboolean audacious_rc_set_eq_preamp(RemoteObject *obj, gdouble preamp, GError **error)
+{
+    equalizerwin_set_preamp((gfloat)preamp);
+    equalizerwin_eq_changed();
+    return TRUE;
+}
+
+gboolean audacious_rc_set_eq_band(RemoteObject *obj, gint band, gdouble value, GError **error)
+{
+    equalizerwin_set_band(band, (gfloat)value);
+    equalizerwin_eq_changed();
+    return TRUE;
+}
+
+gboolean audacious_rc_equalizer_activate(RemoteObject *obj, gboolean active, GError **error)
+{
+    equalizer_activate(active);
+    return TRUE;
+}
+
 
 DBusGProxy *audacious_get_dbus_proxy(void)
 {
--- a/src/audacious/glade/prefswin.glade	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/glade/prefswin.glade	Fri Nov 16 05:32:56 2007 +0200
@@ -4698,7 +4698,6 @@
 
 	      <child>
 		<widget class="GtkButton" id="reload_plugins">
-		  <property name="visible">True</property>
 		  <property name="can_default">True</property>
 		  <property name="can_focus">True</property>
 		  <property name="relief">GTK_RELIEF_NORMAL</property>
--- a/src/audacious/main.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/main.c	Fri Nov 16 05:32:56 2007 +0200
@@ -1081,6 +1081,13 @@
     {NULL},
 };
 
+static gboolean
+aud_start_playback(gpointer unused)
+{
+    drct_play();
+    return FALSE;
+}
+
 static void
 handle_cmd_line_options(BmpCmdLineOpt * options,
                         gboolean remote)
@@ -1088,6 +1095,9 @@
     gchar **filenames = options->filenames;
 #ifdef USE_DBUS
     DBusGProxy *session = audacious_get_dbus_proxy();
+    gboolean is_running = audacious_remote_is_running(session);
+#else
+    gboolean is_running = FALSE;
 #endif
 
     if (options->version)
@@ -1097,65 +1107,74 @@
     }
 
 #ifdef USE_DBUS
-    if (filenames != NULL)
+    if (is_running)
     {
-        gint pos = 0;
-        gint i = 0;
-        GList *fns = NULL;
-
-        for (i = 0; filenames[i] != NULL; i++)
+        if (filenames != NULL)
         {
-            gchar *filename;
-            gchar *current_dir = g_get_current_dir();
+            gint pos = 0;
+            gint i = 0;
+            GList *fns = NULL;
 
-            if (filenames[i][0] == '/' || strstr(filenames[i], "://"))
-                filename = g_strdup(filenames[i]);
-            else
-                filename = g_build_filename(current_dir, filenames[i], NULL);
-
-            fns = g_list_prepend(fns, filename);
+            for (i = 0; filenames[i] != NULL; i++)
+            {
+                gchar *filename;
+                gchar *current_dir = g_get_current_dir();
 
-            g_free(current_dir);
-        }
-
-        fns = g_list_reverse(fns);
+		if (!strstr(filenames[i], "://"))
+		{
+                    if (filenames[i][0] == '/')
+   	               filename = g_strdup_printf("file:///%s", filenames[i]);
+                    else
+	               filename = g_strdup_printf("file:///%s/%s", current_dir, filenames[i]);
+		}
+                else
+                    filename = g_strdup(filenames[i]);
 
-        if (options->load_skins)
-        {
-            audacious_remote_set_skin(session, filenames[0]);
-            skin_install_skin(filenames[0]);
-        }
-        else
-        {
-            if (options->enqueue_to_temp)
-                audacious_remote_playlist_enqueue_to_temp(session, filenames[0]);
+                fns = g_list_prepend(fns, filename);
 
-            if (options->enqueue && options->play)
-                pos = audacious_remote_get_playlist_length(session);
-
-            if (!options->enqueue)
-            {
-                audacious_remote_playlist_clear(session);
-                audacious_remote_stop(session);
+                g_free(current_dir);
             }
 
-            audacious_remote_playlist_add(session, fns);
+            fns = g_list_reverse(fns);
 
-            if (options->enqueue && options->play &&
-                audacious_remote_get_playlist_length(session) > pos)
-                audacious_remote_set_playlist_pos(session, pos);
+            if (options->load_skins)
+            {
+                audacious_remote_set_skin(session, filenames[0]);
+                skin_install_skin(filenames[0]);
+            }
+            else
+            {
+                GList *i;
+
+                if (options->enqueue_to_temp)
+                    audacious_remote_playlist_enqueue_to_temp(session, filenames[0]);
+
+                if (options->enqueue && options->play)
+                    pos = audacious_remote_get_playlist_length(session);
 
-            if (!options->enqueue)
-                audacious_remote_play(session);
-        }
+                if (!options->enqueue)
+                {
+                    audacious_remote_playlist_clear(session);
+                    audacious_remote_stop(session);
+                }
+
+                for (i = fns; i != NULL; i = i->next)
+                    audacious_remote_playlist_add_url_string(session, i->data);
 
-        g_list_foreach(fns, (GFunc) g_free, NULL);
-        g_list_free(fns);
+                if (options->enqueue && options->play &&
+                    audacious_remote_get_playlist_length(session) > pos)
+                    audacious_remote_set_playlist_pos(session, pos);
 
-        g_strfreev(filenames);
-    } /* filename */
+                if (!options->enqueue)
+                    audacious_remote_play(session);
+            }
 
-    if (remote) {
+            g_list_foreach(fns, (GFunc) g_free, NULL);
+            g_list_free(fns);
+
+            g_strfreev(filenames);
+        } /* filename */
+
         if (options->rew)
             audacious_remote_playlist_prev(session);
 
@@ -1182,7 +1201,69 @@
 
         if (options->activate)
             audacious_remote_activate(session);
-    } else {
+
+        exit(EXIT_SUCCESS);
+    }
+    else
+#endif
+    {
+        if (filenames != NULL)
+        {
+            gint pos = 0;
+            gint i = 0;
+            GList *fns = NULL;
+
+            for (i = 0; filenames[i] != NULL; i++)
+            {
+                gchar *filename;
+                gchar *current_dir = g_get_current_dir();
+
+		if (!strstr(filenames[i], "://"))
+		{
+                    if (filenames[i][0] == '/')
+   	               filename = g_strdup_printf("file:///%s", filenames[i]);
+                    else
+	               filename = g_strdup_printf("file:///%s/%s", current_dir, filenames[i]);
+		}
+                else
+                    filename = g_strdup(filenames[i]);
+
+                fns = g_list_prepend(fns, filename);
+
+                g_free(current_dir);
+            }
+
+            fns = g_list_reverse(fns);
+
+            {
+                if (options->enqueue_to_temp)
+                    drct_pl_enqueue_to_temp(filenames[0]);
+
+                if (options->enqueue && options->play)
+                    pos = drct_pl_get_length();
+
+                if (!options->enqueue)
+                {
+                    drct_pl_clear();
+                    drct_stop();
+                }
+
+                drct_pl_add(fns);
+
+                if (options->enqueue && options->play &&
+                    drct_pl_get_length() > pos)
+                    drct_pl_set_pos(pos);
+
+                if (!options->enqueue)
+                    g_idle_add(aud_start_playback, NULL);
+            }
+
+            g_list_foreach(fns, (GFunc) g_free, NULL);
+            g_list_free(fns);
+
+            g_strfreev(filenames);
+        } /* filename */
+
         if (options->rew)
             drct_pl_prev();
 
@@ -1214,13 +1295,6 @@
         if (options->activate)
             drct_activate();
     }
-
-    if(remote) {
-        gboolean is_running = audacious_remote_is_running(session);
-        if (is_running)
-            exit(EXIT_SUCCESS);
-    }
-#endif
 }
 
 static void
@@ -1385,11 +1459,6 @@
 
     bmp_config_load();
 
-    handle_cmd_line_options(&options, TRUE);
-
-#ifdef USE_DBUS
-    init_dbus();
-#endif
     mowgli_init();
 
     if (options.headless != 1)
@@ -1405,6 +1474,15 @@
 
     /* Initialize the playlist system. */
     playlist_init();
+    playlist = playlist_get_active();
+    playlist_load(playlist, bmp_paths[BMP_PATH_PLAYLIST_FILE]);
+    playlist_set_position(playlist, cfg.playlist_position);
+
+    handle_cmd_line_options(&options, TRUE);
+
+#ifdef USE_DBUS
+    init_dbus();
+#endif
 
     if (options.headless != 1)
     {
@@ -1426,11 +1504,6 @@
         GDK_THREADS_ENTER();
     }
 
-    /* Load the default playlist in. */
-    playlist = playlist_get_active();
-    playlist_load(playlist, bmp_paths[BMP_PATH_PLAYLIST_FILE]);
-    playlist_set_position(playlist, cfg.playlist_position);
-
     /* Load extra playlists */
     if(!dir_foreach(bmp_paths[BMP_PATH_PLAYLISTS_DIR], load_extra_playlist,
             playlist, NULL)) {
--- a/src/audacious/memorypool.c	Tue Oct 30 11:22:17 2007 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,134 +0,0 @@
-/*  Audacious
- *  Copyright (c) 2007 William Pitcock <nenolod -at- atheme.org>
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; under version 3 of the License.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses>.
- *
- *  The Audacious team does not consider modular code linking to
- *  Audacious or using our public API to be a derived work.
- */
-
-#include <glib.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "util.h"
-#include "memorypool.h"
-
-/* visibility of this object is not available to the outside */
-struct _MemoryPool {
-    GList *stack;
-    GDestroyNotify notify;
-    GMutex *mutex;
-};
-
-MemoryPool *
-memory_pool_new(void)
-{
-    MemoryPool *pool;
-
-    pool = g_new0(MemoryPool, 1);
-    pool->notify = g_free;
-    pool->mutex = g_mutex_new();
-
-    return pool;
-}
-
-MemoryPool *
-memory_pool_with_custom_destructor(GDestroyNotify notify)
-{
-    MemoryPool *pool;
-
-    pool = g_new0(MemoryPool, 1);
-    pool->notify = notify;
-    pool->mutex = g_mutex_new();
-
-    return pool;
-}
-
-gpointer
-memory_pool_add(MemoryPool * pool, gpointer ptr)
-{
-    g_mutex_lock(pool->mutex);
-    pool->stack = g_list_append(pool->stack, ptr);
-    g_mutex_unlock(pool->mutex);
-
-    return ptr;
-}
-
-gpointer
-memory_pool_allocate(MemoryPool * pool, gsize sz)
-{
-    gpointer addr;
-
-    g_mutex_lock(pool->mutex);
-    addr = g_malloc0(sz);
-    pool->stack = g_list_append(pool->stack, addr);
-    g_mutex_unlock(pool->mutex);
-
-    return addr;
-}
-
-void
-memory_pool_release(MemoryPool * pool, gpointer addr)
-{
-    g_mutex_lock(pool->mutex);
-
-    pool->stack = g_list_remove(pool->stack, addr);
-    pool->notify(addr);
-
-    g_mutex_unlock(pool->mutex);
-}
-
-static void
-memory_pool_cleanup_nolock(MemoryPool * pool)
-{
-    GList *iter;
-
-    for (iter = pool->stack; iter != NULL; iter = g_list_next(iter))
-    {
-        pool->stack = g_list_delete_link(pool->stack, iter);
-        g_warning("MemoryPool<%p> element at %p was not released until cleanup!", pool, iter->data);
-        pool->notify(iter->data);
-    }
-}
-
-void
-memory_pool_cleanup(MemoryPool * pool)
-{
-    g_mutex_lock(pool->mutex);
-    memory_pool_cleanup_nolock(pool);
-    g_mutex_unlock(pool->mutex);
-}
-
-void
-memory_pool_destroy(MemoryPool * pool)
-{
-    g_mutex_lock(pool->mutex);
-    memory_pool_cleanup_nolock(pool);
-    g_mutex_unlock(pool->mutex);
-
-    g_mutex_free(pool->mutex);
-    g_free(pool);
-}
-
-gchar *
-memory_pool_strdup(MemoryPool * pool, gchar * src)
-{
-    gchar *out;
-    gsize sz = strlen(src) + 1;
-
-    out = memory_pool_allocate(pool, sz);
-    g_strlcpy(out, src, sz);
-
-    return out;
-}
--- a/src/audacious/memorypool.h	Tue Oct 30 11:22:17 2007 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-/*  Audacious
- *  Copyright (c) 2007 William Pitcock <nenolod -at- atheme.org>
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; under version 3 of the License.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses>.
- *
- *  The Audacious team does not consider modular code linking to
- *  Audacious or using our public API to be a derived work.
- */
-
-#ifndef AUDACIOUS_MEMORYPOOL_H
-#define AUDACIOUS_MEMORYPOOL_H
-
-typedef struct _MemoryPool MemoryPool;
-
-MemoryPool * memory_pool_new(void);
-MemoryPool * memory_pool_with_custom_destructor(GDestroyNotify notify);
-
-gpointer memory_pool_add(MemoryPool * pool, gpointer ptr);
-gpointer memory_pool_allocate(MemoryPool * pool, gsize sz);
-void memory_pool_release(MemoryPool * pool, gpointer addr);
-
-void memory_pool_cleanup(MemoryPool * pool);
-
-void memory_pool_destroy(MemoryPool * pool);
-
-gchar * memory_pool_strdup(MemoryPool * pool, gchar * src);
-
-#define memory_pool_alloc_object(pool, obj) \
-	memory_pool_allocate(pool, sizeof(obj))
-
-#endif
--- a/src/audacious/objects.xml	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/objects.xml	Fri Nov 16 05:32:56 2007 +0200
@@ -19,7 +19,7 @@
 
 <!--
     Defined:
-    CMD_GET_VERSION
+    CMD_GET_VERSION //CHANGED: now it returns audacious version instead of protocol version.
     CMD_PLAY
     CMD_PAUSE
     CMD_STOP
@@ -60,7 +60,7 @@
     CMD_SHOW_ABOUT_BOX
     CMD_SHOW_JTF_BOX
 
-    New:
+    Newly defined:
     CMD_PLAY_PAUSE
     CMD_ACTIVATE
     CMD_GET_SKIN
@@ -71,27 +71,24 @@
     CMD_PLAYQUEUE_ADD
     CMD_PLAYQUEUE_REMOVE
     CMD_PLAYQUEUE_CLEAR
-    CMD_PLAYQUEUE_GET_LPOS //CHANGED: get list position by queue position
-    CMD_PLAYQUEUE_GET_QPOS //CHANGED: get queue position by list postion
+    CMD_PLAYQUEUE_GET_LIST_POS //CHANGED: get list position by queue position
+    CMD_PLAYQUEUE_GET_QUEUE_POS //CHANGED: get queue position by list postion
     CMD_PLAYQUEUE_IS_QUEUED
-
+    CMD_PLAYLIST_INS_URL_STRING
+    CMD_PLAYLIST_ENQUEUE_TO_TEMP
+    CMD_PLAYLIST_ADD
+    CMD_GET_EQ //CHANGED: now these functions use double due to dbus-glib restriction
+    CMD_GET_EQ_PREAMP
+    CMD_GET_EQ_BAND //NOTE: GArray is used for bands
+    CMD_SET_EQ
+    CMD_SET_EQ_PREAMP
+    CMD_SET_EQ_BAND
 
-    In Progress:
-    CMD_PLAYLIST_INS_URL_STRING
-    CMD_PLAYLIST_ADD
-    CMD_PLAYLIST_ENQUEUE_TO_TEMP
-
-
-    Remaining:
+    Obsolete:
     CMD_PLAYLIST_INS //unnecessary?
     CMD_GET_EQ_DATA //obsolete
     CMD_SET_EQ_DATA //obsolete
-    CMD_GET_EQ
-    CMD_GET_EQ_PREAMP
-    CMD_GET_EQ_BAND
-    CMD_SET_EQ
-    CMD_SET_EQ_PREAMP
-    CMD_SET_EQ_BAND
+
 -->
 
 <node name="/">
@@ -367,16 +364,25 @@
         <!-- Show preferences window -->
         <method name="ShowPrefsBox">
             <annotation name="org.freedesktop.DBus.GLib.NoReply" value=""/>
+            <arg type="b" name="show"/>
         </method>
 
         <!-- Show about window -->
         <method name="ShowAboutBox">
             <annotation name="org.freedesktop.DBus.GLib.NoReply" value=""/>
+            <arg type="b" name="show"/>
         </method>
 
         <!-- Show jump to file window -->
         <method name="ShowJtfBox">
             <annotation name="org.freedesktop.DBus.GLib.NoReply" value=""/>
+            <arg type="b" name="show"/>
+        </method>
+
+        <!-- Show filebrowser -->
+        <method name="ShowFilebrowser">
+            <annotation name="org.freedesktop.DBus.GLib.NoReply" value=""/>
+            <arg type="b" name="show"/>
         </method>
 
         <!-- Either play or pause -->
@@ -465,5 +471,44 @@
             <arg type="s" name="url"/>
         </method>
 
+        <!-- equalizer -->
+        <method name="GetEq">
+            <annotation name="org.freedesktop.DBus.GLib.NoReply" value=""/>
+            <arg type="d" direction="out" name="preamp"/>
+            <arg type="ad" direction="out" name="bands"/>
+        </method>
+
+        <method name="GetEqPreamp">
+            <arg type="d" direction="out" name="preamp"/>
+        </method>
+
+        <method name="GetEqBand">
+            <arg type="i" name="band"/>
+            <arg type="d" direction="out" name="value"/>
+        </method>
+
+        <method name="SetEq">
+            <annotation name="org.freedesktop.DBus.GLib.NoReply" value=""/>
+            <arg type="d" name="preamp"/>
+            <arg type="ad" name="bands"/>
+        </method>
+
+        <method name="SetEqPreamp">
+            <annotation name="org.freedesktop.DBus.GLib.NoReply" value=""/>
+            <arg type="d" name="preamp"/>
+        </method>
+
+        <method name="SetEqBand">
+            <annotation name="org.freedesktop.DBus.GLib.NoReply" value=""/>
+            <arg type="i" name="band"/>
+            <arg type="d" name="value"/>
+        </method>
+
+       <!-- Activate/Deactivate Equalizer -->
+        <method name="EqualizerActivate">
+            <annotation name="org.freedesktop.DBus.GLib.NoReply" value=""/>
+            <arg type="b" name="active"/>
+        </method>
+
     </interface>
 </node>
--- a/src/audacious/playback.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/playback.c	Fri Nov 16 05:32:56 2007 +0200
@@ -168,7 +168,7 @@
     if (playback && playback->plugin->get_song_tuple) {
         Tuple *tuple = playback->plugin->get_song_tuple(playback->filename);
         if (tuple_get_value_type(tuple, FIELD_LENGTH, NULL) == TUPLE_INT)
-            return tuple_get_value_type(tuple, FIELD_LENGTH, NULL);
+            return tuple_get_int(tuple, FIELD_LENGTH, NULL);
     }
 
     return -1;
--- a/src/audacious/playlist.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/playlist.c	Fri Nov 16 05:32:56 2007 +0200
@@ -110,6 +110,8 @@
 static gboolean playlist_get_info_going = FALSE;
 static GThread *playlist_get_info_thread;
 
+extern GHashTable *ext_hash;
+
 static gint path_compare(const gchar * a, const gchar * b);
 static gint playlist_compare_path(PlaylistEntry * a, PlaylistEntry * b);
 static gint playlist_compare_filename(PlaylistEntry * a, PlaylistEntry * b);
@@ -143,6 +145,8 @@
 static void playlist_recalc_total_time(Playlist *);
 static gboolean playlist_entry_get_info(PlaylistEntry * entry);
 
+static gboolean filter_by_extension(const gchar *filename);
+
 static mowgli_heap_t *playlist_entry_heap = NULL;
 
 /* *********************** playlist entry code ********************** */
@@ -451,6 +455,7 @@
     playlist->entries = NULL;
     playlist->tail = NULL;
     playlist->attribute = PLAYLIST_PLAIN;
+    playlist->serial = 0;
 
     PLAYLIST_UNLOCK(playlist);
 }
@@ -465,6 +470,7 @@
     playlist_generate_shuffle_list(playlist);
     playlistwin_update_list(playlist);
     playlist_recalc_total_time(playlist);
+    PLAYLIST_INCR_SERIAL(playlist);
     playlist_manager_update();
 }
 
@@ -524,6 +530,7 @@
     g_list_free_1(node);
 
     playlist_recalc_total_time_nolock(playlist);
+    PLAYLIST_INCR_SERIAL(playlist);
 }
 
 void
@@ -549,6 +556,7 @@
     PLAYLIST_UNLOCK(playlist);
 
     playlist_recalc_total_time(playlist);
+    PLAYLIST_INCR_SERIAL(playlist);
 
     playlistwin_update_list(playlist);
     if (restart_playing) {
@@ -586,6 +594,7 @@
     PLAYLIST_UNLOCK(playlist);
 
     playlist_recalc_total_time(playlist);
+    PLAYLIST_INCR_SERIAL(playlist);
     playlistwin_update_list(playlist);
 
     if (restart_playing) {
@@ -626,6 +635,7 @@
     PLAYLIST_UNLOCK(playlist);
 
     playlist_recalc_total_time(playlist);
+    PLAYLIST_INCR_SERIAL(playlist);
 
     if (restart_playing) {
         if (playlist->position)
@@ -658,6 +668,7 @@
     playlist_get_info_scan_active = TRUE;
     g_mutex_unlock(mutex_scan);
     g_cond_signal(cond_scan);
+    PLAYLIST_INCR_SERIAL(playlist);
 }
 
 static void
@@ -743,13 +754,14 @@
     if (parent_tuple)
         tuple_free(parent_tuple);
 
-    if (tuple != NULL && tuple_get_int(tuple, FIELD_MTIME, NULL) == -1) {
-        // kick the scanner thread only if mtime = -1 (uninitialized)
+    if (!tuple || (tuple && tuple_get_int(tuple, FIELD_MTIME, NULL) == -1)) {
+        // kick the scanner thread when tuple == NULL or mtime = -1 (uninitialized)
         g_mutex_lock(mutex_scan);
         playlist_get_info_scan_active = TRUE;
         g_mutex_unlock(mutex_scan);
         g_cond_signal(cond_scan);
     }
+    PLAYLIST_INCR_SERIAL(playlist);
 }
 
 gboolean
@@ -772,10 +784,13 @@
         return TRUE;
     }
 
-    if (playlist->loading_playlist == TRUE || cfg.playlist_detect == TRUE)
-	dec = NULL;
+    if (playlist->loading_playlist == TRUE || cfg.playlist_detect == TRUE) {
+        dec = NULL;
+        if(!filter_by_extension(filename))
+            return FALSE;
+    }
     else if (!str_has_prefix_nocase(filename, "http://") && 
-	     !str_has_prefix_nocase(filename, "https://")) {
+             !str_has_prefix_nocase(filename, "https://")) {
         pr = input_check_file(filename, TRUE);
 
         if (pr) {
@@ -788,7 +803,9 @@
     if (cfg.playlist_detect == TRUE || playlist->loading_playlist == TRUE ||
        (playlist->loading_playlist == FALSE && dec != NULL) ||
        (playlist->loading_playlist == FALSE && !is_playlist_name(filename) &&
-       str_has_prefix_nocase(filename, "http"))) {
+        str_has_prefix_nocase(filename, "http"))) {
+        if(!filter_by_extension(filename))
+            return FALSE;
         __playlist_ins_with_info_tuple(playlist, filename, pos, tuple, dec);
         playlist_generate_shuffle_list(playlist);
         playlistwin_update_list(playlist);
@@ -948,8 +965,11 @@
             g_free(filename);
             list = g_list_concat(list, sub);
         }
-        else if (cfg.playlist_detect == TRUE)
-            list = g_list_prepend(list, filename);
+        else if (cfg.playlist_detect == TRUE) {
+            if(filter_by_extension(filename)) {
+                list = g_list_prepend(list, filename);
+            }
+        }
         else if ((pr = input_check_file(filename, TRUE)) != NULL)
         {
             list = g_list_prepend(list, filename);
@@ -985,7 +1005,6 @@
 {
     guint entries;
     entries = playlist_ins_url(playlist, url, -1);
-//    printf("playlist_add_url: entries = %d\n", entries);
     return entries;
 }
 
@@ -1038,8 +1057,6 @@
     g_return_val_if_fail(playlist != NULL, 0);
     g_return_val_if_fail(string != NULL, 0);
 
-//    playlistwin_update_list(playlist); // is this necessary? --yaz
-
     while (*string) {
         GList *node;
         guint i = 0;
@@ -1081,6 +1098,7 @@
     }
 
     playlist_recalc_total_time(playlist);
+    PLAYLIST_INCR_SERIAL(playlist); //probably necessary because there is no underlying __playlist_ins --yaz
     playlist_generate_shuffle_list(playlist);
     playlistwin_update_list(playlist);
 
@@ -1145,6 +1163,7 @@
     }
 
     playlist_recalc_total_time(playlist);
+    PLAYLIST_INCR_SERIAL(playlist); //tentative --yaz
 
     mainwin_set_song_info(rate, freq, nch);
 
@@ -1683,7 +1702,7 @@
 
 void
 playlist_load_ins_file(Playlist *playlist,
-		       const gchar * filename_p,
+                       const gchar * filename_p,
                        const gchar * playlist_name, gint pos,
                        const gchar * title, gint len)
 {
@@ -1707,22 +1726,27 @@
             *tmp = '\0';
         else {
 	    if ((playlist->loading_playlist == TRUE ||
-		cfg.playlist_detect == TRUE))
+             cfg.playlist_detect == TRUE)) {
                 pr = NULL;
+                if(!filter_by_extension(filename))
+                    return;
+        }
 	    else if (!str_has_prefix_nocase(filename, "http://") && 
 	        !str_has_prefix_nocase(filename, "https://"))
 		pr = input_check_file(filename, FALSE);
 
             __playlist_ins_with_info(playlist, filename, pos, title, len, pr ? pr->ip : NULL);
-
             g_free(pr);
             return;
         }
         tmp = g_build_filename(path, filename, NULL);
 
-	if (playlist->loading_playlist == TRUE && cfg.playlist_detect == TRUE)
-	    pr = NULL;
-        else if (!str_has_prefix_nocase(tmp, "http://") && 
+        if (playlist->loading_playlist == TRUE && cfg.playlist_detect == TRUE) {
+            pr = NULL;
+            if(!filter_by_extension(filename))
+                return;
+        }
+    else if (!str_has_prefix_nocase(tmp, "http://") && 
 	    !str_has_prefix_nocase(tmp, "https://"))
 	    pr = input_check_file(tmp, FALSE);
 
@@ -1734,14 +1758,16 @@
     else
     {
         if ((playlist->loading_playlist == TRUE ||
-  	    cfg.playlist_detect == TRUE))
+             cfg.playlist_detect == TRUE)) {
             pr = NULL;
+        if(!filter_by_extension(filename))
+            return;
+        }
 	else if (!str_has_prefix_nocase(filename, "http://") && 
 	    !str_has_prefix_nocase(filename, "https://"))
 	    pr = input_check_file(filename, FALSE);
 
         __playlist_ins_with_info(playlist, filename, pos, title, len, pr ? pr->ip : NULL);
-
         g_free(pr);
     }
 
@@ -1775,25 +1801,30 @@
             *tmp = '\0';
         else {
             if ((playlist->loading_playlist == TRUE ||
-    	        cfg.playlist_detect == TRUE))
+                 cfg.playlist_detect == TRUE)) {
                 pr = NULL;
+                if(!filter_by_extension(filename))
+                    return;
+            }
 	    else if (!str_has_prefix_nocase(filename, "http://") && 
 	        !str_has_prefix_nocase(filename, "https://"))
 	        pr = input_check_file(filename, FALSE);
 
             __playlist_ins_with_info_tuple(playlist, filename, pos, tuple, pr ? pr->ip : NULL);
-
             g_free(pr);
             return;
         }
         tmp = g_build_filename(path, filename, NULL);
 
         if ((playlist->loading_playlist == TRUE ||
-            cfg.playlist_detect == TRUE))
+             cfg.playlist_detect == TRUE)) {
             pr = NULL;
+            if(!filter_by_extension(filename))
+                return;
+        }
         else if (!str_has_prefix_nocase(filename, "http://") && 
             !str_has_prefix_nocase(filename, "https://"))
-            pr = input_check_file(filename, FALSE);
+            pr = input_check_file(filename, FALSE); //here! --yaz
 
         __playlist_ins_with_info_tuple(playlist, tmp, pos, tuple, pr ? pr->ip : NULL);
         g_free(tmp);
@@ -1803,8 +1834,11 @@
     else
     {
         if ((playlist->loading_playlist == TRUE ||
-            cfg.playlist_detect == TRUE))
+             cfg.playlist_detect == TRUE)) {
             pr = NULL;
+            if(!filter_by_extension(filename))
+                return;
+        }
         else if (!str_has_prefix_nocase(filename, "http://") && 
             !str_has_prefix_nocase(filename, "https://"))
             pr = input_check_file(filename, FALSE);
@@ -1850,6 +1884,9 @@
     playlistwin_update_list(playlist);
     playlist_manager_update();
 
+    playlist_recalc_total_time(playlist); //tentative --yaz
+    PLAYLIST_INCR_SERIAL(playlist);
+
     return new_len - old_len;
 }
 
@@ -2613,7 +2650,7 @@
             for (node = playlist->entries; node; node = g_list_next(node)) {
                 entry = node->data;
 
-                if(playlist->attribute & PLAYLIST_STATIC ||
+                if(playlist->attribute & PLAYLIST_STATIC || // live lock fix
                    (entry->tuple && tuple_get_int(entry->tuple, FIELD_LENGTH, NULL) > -1 &&
                     tuple_get_int(entry->tuple, FIELD_MTIME, NULL) != -1)) {
                     update_playlistwin = TRUE;
@@ -2658,7 +2695,7 @@
 
                  entry = node->data;
 
-                 if(playlist->attribute & PLAYLIST_STATIC ||
+                 if(playlist->attribute & PLAYLIST_STATIC || // live lock fix
                    (entry->tuple && tuple_get_int(entry->tuple, FIELD_LENGTH, NULL) > -1 &&
                     tuple_get_int(entry->tuple, FIELD_MTIME, NULL) != -1)) {
                     update_playlistwin = TRUE;
@@ -2710,6 +2747,8 @@
         g_cond_wait(cond_scan, mutex_scan);
         g_mutex_unlock(mutex_scan);
 
+//        g_print("scanner invoked\n");
+
     } // while
 
     g_thread_exit(NULL);
@@ -2793,6 +2832,7 @@
     playlist_generate_shuffle_list(playlist);
     playlistwin_update_list(playlist);
     playlist_recalc_total_time(playlist);
+    PLAYLIST_INCR_SERIAL(playlist);
     playlist_manager_update();
 }
 
@@ -2912,6 +2952,7 @@
 
     playlistwin_update_list(playlist);
     playlist_recalc_total_time(playlist);
+    PLAYLIST_INCR_SERIAL(playlist);
 
     playlist_manager_update();
 }
@@ -2931,7 +2972,6 @@
     PLAYLIST_UNLOCK(playlist);
 }
 
-
 static void
 playlist_recalc_total_time_nolock(Playlist *playlist)
 {
@@ -3140,6 +3180,7 @@
 
     PLAYLIST_UNLOCK(playlist);
     playlist_recalc_total_time(playlist);
+//    PLAYLIST_INCR_SERIAL(playlist); //unnecessary? --yaz
 
     return num_of_entries_found;
 }
@@ -3253,6 +3294,7 @@
 
     playlistwin_update_list(playlist);
     playlist_recalc_total_time(playlist);
+    PLAYLIST_INCR_SERIAL(playlist); //tentative --yaz
 
     return retval;
 }
@@ -3275,6 +3317,7 @@
 
     playlistwin_update_list(playlist);
     playlist_recalc_total_time(playlist);
+    PLAYLIST_INCR_SERIAL(playlist); //tentative --yaz
 }
 
 Playlist *
@@ -3315,6 +3358,9 @@
     playlist->title = NULL;
     playlist->filename = NULL;
     playlist_clear(playlist);
+    playlist->tail = NULL;
+    playlist->attribute = PLAYLIST_PLAIN;
+    playlist->serial = 0;
 
     return playlist;
 }
@@ -3327,6 +3373,7 @@
     
     g_mutex_free( playlist->mutex );
     g_free( playlist );
+    playlist = NULL; //XXX lead to crash? --yaz
 }
 
 Playlist *
@@ -3420,3 +3467,33 @@
     } while(1);
     return TRUE;
 }
+
+static gboolean
+filter_by_extension(const gchar *uri)
+{
+    gchar *base, *ext, *lext, *filename;
+    gchar *tmp = g_filename_from_uri(uri, NULL, NULL);
+    gboolean rv;
+
+    filename = g_strdup(tmp ? tmp : uri);
+    g_free(tmp);
+
+    base = g_path_get_basename(filename);
+    ext = g_strrstr(base, ".");
+
+    if(!ext) {
+        g_free(base);
+        return FALSE;
+    }
+
+    lext = g_utf8_strdown(ext+1, -1);
+
+    if(g_hash_table_lookup(ext_hash, lext))
+        rv = TRUE;
+    else
+        rv = FALSE;
+
+    g_free(lext);
+    g_free(base);
+    return rv;
+}
--- a/src/audacious/playlist.h	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/playlist.h	Fri Nov 16 05:32:56 2007 +0200
@@ -94,8 +94,9 @@
     gboolean       pl_selection_more;
     gboolean       loading_playlist;
     GMutex        *mutex;       /* this is required for multiple playlist */
-    GList *tail; /* marker for the last element in playlist->entries */
+    GList         *tail; /* marker for the last element in playlist->entries */
     gint           attribute; /* PlaylistAttribute */
+    gulong         serial;     /* serial number */
 };
 
 typedef enum {
@@ -223,8 +224,9 @@
 
 gboolean is_playlist_name(const gchar * filename);
 
-#define PLAYLIST_LOCK(pl)    g_mutex_lock(pl->mutex)
-#define PLAYLIST_UNLOCK(pl)  g_mutex_unlock(pl->mutex)
+#define PLAYLIST_LOCK(pl)    g_mutex_lock((pl)->mutex)
+#define PLAYLIST_UNLOCK(pl)  g_mutex_unlock((pl)->mutex)
+#define PLAYLIST_INCR_SERIAL(pl)    (pl)->serial++
 
 G_LOCK_EXTERN(playlists);
 
--- a/src/audacious/plugin.h	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/plugin.h	Fri Nov 16 05:32:56 2007 +0200
@@ -926,7 +926,9 @@
 #include "audacious/auddrct.h"
 
 /* for multi-file plugins :( */
+G_BEGIN_DECLS
 extern struct _AudaciousFuncTableV1 *_audvt;
+G_END_DECLS
 
 #define DECLARE_PLUGIN(name, init, fini, ...) \
 	G_BEGIN_DECLS \
--- a/src/audacious/pluginenum.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/pluginenum.c	Fri Nov 16 05:32:56 2007 +0200
@@ -68,6 +68,8 @@
     NULL
 };
 
+GHashTable *ext_hash = NULL;
+
 /*****************************************************************/
 
 static struct _AudaciousFuncTableV1 _aud_papi_v1 = {
@@ -517,6 +519,14 @@
     /* XXX: we need something better than p->filename if plugins
        will eventually provide multiple plugins --nenolod */
     mowgli_dictionary_add(plugin_dict, g_basename(p->filename), p);
+
+    /* build the extension hash table */
+    gint i;
+    if(p->vfs_extensions) {
+        for(i = 0; p->vfs_extensions[i] != NULL; i++) {
+            g_hash_table_replace(ext_hash, g_strdup(p->vfs_extensions[i]), g_strdup(p->description));
+        }
+    }
 }
 
 static void
@@ -752,6 +762,9 @@
 
     plugin_dict = mowgli_dictionary_create(g_ascii_strcasecmp);
 
+    /* make extension hash */
+    ext_hash = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
+
 #ifndef DISABLE_USER_PLUGIN_DIR
     scan_plugins(bmp_paths[BMP_PATH_USER_PLUGIN_DIR]);
     /*
@@ -1030,4 +1043,5 @@
     }
 
     mowgli_dictionary_destroy(plugin_dict, NULL, NULL);
+    g_hash_table_remove_all(ext_hash);
 }
--- a/src/audacious/skin.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/skin.c	Fri Nov 16 05:32:56 2007 +0200
@@ -48,6 +48,10 @@
 #include "vfs.h"
 
 #include "ui_skinned_window.h"
+#include "ui_skinned_button.h"
+#include "ui_skinned_number.h"
+#include "ui_skinned_horizontal_slider.h"
+#include "ui_skinned_playstatus.h"
 
 #define EXTENSION_TARGETS 7
 
@@ -1348,7 +1352,6 @@
     vfs_fclose(file);
 }
 
-#if 0
 static void
 skin_numbers_generate_dash(Skin * skin)
 {
@@ -1362,22 +1365,22 @@
     if (!numbers->pixmap || numbers->current_width < 99)
         return;
 
-    gc = gdk_gc_new(numbers->pixmap);
-    pixmap = gdk_pixmap_new(mainwin->window, 108,
+    pixmap = gdk_pixmap_new(NULL, 108,
                             numbers->current_height,
-                            -1);
+                            gdk_rgb_get_visual()->depth);
+    gc = gdk_gc_new(pixmap);
 
-    skin_draw_pixmap(skin, pixmap, gc, SKIN_NUMBERS, 0, 0, 0, 0, 99, 13);
-    skin_draw_pixmap(skin, pixmap, gc, SKIN_NUMBERS, 90, 0, 99, 0, 9, 13);
-    skin_draw_pixmap(skin, pixmap, gc, SKIN_NUMBERS, 20, 6, 101, 6, 5, 1);
+    skin_draw_pixmap(NULL, skin, pixmap, gc, SKIN_NUMBERS, 0, 0, 0, 0, 99, numbers->current_height);
+    skin_draw_pixmap(NULL, skin, pixmap, gc, SKIN_NUMBERS, 90, 0, 99, 0, 9, numbers->current_height);
+    skin_draw_pixmap(NULL, skin, pixmap, gc, SKIN_NUMBERS, 20, 6, 101, 6, 5, 1);
 
     g_object_unref(numbers->pixmap);
     g_object_unref(gc);
 
     numbers->pixmap = pixmap;
     numbers->current_width = 108;
+    numbers->width = 108;
 }
-#endif
 
 static void
 skin_load_cursor(Skin * skin, const gchar * dirname)
@@ -1428,10 +1431,9 @@
     if (text_pm)
         skin_get_textcolors(text_pm, skin->textbg, skin->textfg);
 
-#if 0
-    if (skin->pixmaps[SKIN_NUMBERS].pixmap)
+    if (skin->pixmaps[SKIN_NUMBERS].pixmap &&
+        skin->pixmaps[SKIN_NUMBERS].width < 108 )
         skin_numbers_generate_dash(skin);
-#endif
 
     filename = find_file_recursively(path, "pledit.txt");
     inifile = open_ini_file(filename);
@@ -1581,6 +1583,14 @@
     g_free(command);
 }
 
+static SkinPixmap *
+skin_get_pixmap(Skin * skin, SkinPixmapId map_id)
+{
+    g_return_val_if_fail(skin != NULL, NULL);
+    g_return_val_if_fail(map_id < SKIN_PIXMAP_COUNT, NULL);
+
+    return &skin->pixmaps[map_id];
+}
 
 gboolean
 skin_load(Skin * skin, const gchar * path)
@@ -1595,7 +1605,29 @@
     skin_lock(skin);
     error = skin_load_nolock(skin, path, FALSE);
     skin_unlock(skin);
-    
+
+    SkinPixmap *pixmap = NULL;
+    pixmap = skin_get_pixmap(skin, SKIN_NUMBERS);
+    if (pixmap) {
+        ui_skinned_number_set_size(mainwin_minus_num, 9, pixmap->height);
+        ui_skinned_number_set_size(mainwin_10min_num, 9, pixmap->height);
+        ui_skinned_number_set_size(mainwin_min_num, 9, pixmap->height);
+        ui_skinned_number_set_size(mainwin_10sec_num, 9, pixmap->height);
+        ui_skinned_number_set_size(mainwin_sec_num, 9, pixmap->height);
+    }
+
+    pixmap = skin_get_pixmap(skin, SKIN_MAIN);
+    if (pixmap && skin->properties.mainwin_height > pixmap->height)
+        skin->properties.mainwin_height = pixmap->height;
+
+    pixmap = skin_get_pixmap(skin, SKIN_PLAYPAUSE);
+    if (pixmap)
+        ui_skinned_playstatus_set_size(mainwin_playstatus, 11, pixmap->height);
+
+    pixmap = skin_get_pixmap(skin, SKIN_EQMAIN);
+    if (pixmap->height >= 313)
+        gtk_widget_show(equalizerwin_graph);
+
     return error;
 }
 
@@ -1618,16 +1650,6 @@
     skin_load_nolock(skin, skin->path, TRUE);
 }
 
-
-static SkinPixmap *
-skin_get_pixmap(Skin * skin, SkinPixmapId map_id)
-{
-    g_return_val_if_fail(skin != NULL, NULL);
-    g_return_val_if_fail(map_id < SKIN_PIXMAP_COUNT, NULL);
-
-    return &skin->pixmaps[map_id];
-}
-
 GdkBitmap *
 skin_get_mask(Skin * skin, SkinMaskId mi)
 {
@@ -1689,7 +1711,7 @@
 }
 
 void
-skin_draw_pixmap(Skin * skin, GdkDrawable * drawable, GdkGC * gc,
+skin_draw_pixmap(GtkWidget *widget, Skin * skin, GdkDrawable * drawable, GdkGC * gc,
                  SkinPixmapId pixmap_id,
                  gint xsrc, gint ysrc, gint xdest, gint ydest,
                  gint width, gint height)
@@ -1702,20 +1724,51 @@
     g_return_if_fail(pixmap != NULL);
     g_return_if_fail(pixmap->pixmap != NULL);
 
+    /* perhaps we should use transparency or resize widget? */
     if (xsrc+width > pixmap->width || ysrc+height > pixmap->height) {
-        if (pixmap_id == SKIN_NUMBERS)
-            xsrc = 90;
-        else if (pixmap_id == SKIN_VOLUME) {
-            /* some winamp skins have too strait SKIN_VOLUME, so let's copy what's remain from SKIN_MAIN */
-            gdk_draw_drawable(drawable, gc, skin_get_pixmap(bmp_active_skin, SKIN_MAIN)->pixmap,
-                              skin->properties.mainwin_volume_x, skin->properties.mainwin_volume_y,
-                              pixmap->width, ydest, width - pixmap->width, height);
-            width = pixmap->width;
-        } else if (pixmap_id == SKIN_MONOSTEREO) {
-            /* XMMS skins seems to have SKIN_MONOSTEREO with size 58x20 instead of 58x24 */
-            gdk_draw_drawable(drawable, gc, skin_get_pixmap(bmp_active_skin, SKIN_MAIN)->pixmap,
-                              212 + xdest, 41, xdest, ydest, width, height);
-            height = pixmap->height/2;
+        if (widget) {
+            /* it's better to hide widget using SKIN_PLAYPAUSE/SKIN_POSBAR than display mess */
+            if ((pixmap_id == SKIN_PLAYPAUSE && pixmap->width != 42) || pixmap_id == SKIN_POSBAR) {
+                gtk_widget_hide(widget);
+                return;
+            }
+            gint x, y;
+            x = -1;
+            y = -1;
+
+            if (gtk_widget_get_parent(widget) == SKINNED_WINDOW(mainwin)->fixed) {
+                GList *iter;
+                for (iter = GTK_FIXED (SKINNED_WINDOW(mainwin)->fixed)->children; iter; iter = g_list_next (iter)) {
+                     GtkFixedChild *child_data = (GtkFixedChild *) iter->data;
+                     if (child_data->widget == widget) {
+                         x = child_data->x;
+                         y = child_data->y;
+                         break;
+                     }
+                }
+
+                if (x != -1 && y != -1) {
+                    /* Some skins include SKIN_VOLUME and/or SKIN_BALANCE
+                       without knobs */
+                    if (pixmap_id == SKIN_VOLUME || pixmap_id == SKIN_BALANCE) {
+                        if (ysrc+height > 421 && xsrc+width <= pixmap->width)
+                            return;
+                    }
+                    /* let's copy what's under widget */
+                    gdk_draw_drawable(drawable, gc, skin_get_pixmap(bmp_active_skin, SKIN_MAIN)->pixmap,
+                                      x, y, xdest, ydest, width, height);
+
+                    /* XMMS skins seems to have SKIN_MONOSTEREO with size 58x20 instead of 58x24 */
+                    if (pixmap_id == SKIN_MONOSTEREO)
+                        height = pixmap->height/2;
+                }
+            } else if (gtk_widget_get_parent(widget) == SKINNED_WINDOW(equalizerwin)->fixed) {
+                   if (!(pixmap_id == SKIN_EQMAIN && ysrc == 314)) /* equalizer preamp on equalizer graph */
+                         gtk_widget_hide(widget);
+            } else if (gtk_widget_get_parent(widget) == SKINNED_WINDOW(playlistwin)->fixed) {
+                   /* I haven't seen any skin with substandard playlist */
+                   gtk_widget_hide(widget);
+            }
         } else
             return;
     }
@@ -1783,14 +1836,14 @@
         y = 21;
 
     /* left corner */
-    skin_draw_pixmap(skin, drawable, gc, SKIN_PLEDIT, 0, y, 0, 0, 25, 20);
+    skin_draw_pixmap(NULL, skin, drawable, gc, SKIN_PLEDIT, 0, y, 0, 0, 25, 20);
 
     /* titlebar title */
-    skin_draw_pixmap(skin, drawable, gc, SKIN_PLEDIT, 26, y,
+    skin_draw_pixmap(NULL, skin, drawable, gc, SKIN_PLEDIT, 26, y,
                      (width - 100) / 2, 0, 100, 20);
 
     /* titlebar right corner  */
-    skin_draw_pixmap(skin, drawable, gc, SKIN_PLEDIT, 153, y,
+    skin_draw_pixmap(NULL, skin, drawable, gc, SKIN_PLEDIT, 153, y,
                      width - 25, 0, 25, 20);
 
     /* tile draw the remaining frame */
@@ -1800,20 +1853,20 @@
 
     for (i = 0; i < c / 2; i++) {
         /* left of title */
-        skin_draw_pixmap(skin, drawable, gc, SKIN_PLEDIT, 127, y,
+        skin_draw_pixmap(NULL, skin, drawable, gc, SKIN_PLEDIT, 127, y,
                          25 + i * 25, 0, 25, 20);
 
         /* right of title */
-        skin_draw_pixmap(skin, drawable, gc, SKIN_PLEDIT, 127, y,
+        skin_draw_pixmap(NULL, skin, drawable, gc, SKIN_PLEDIT, 127, y,
                          (width + 100) / 2 + i * 25, 0, 25, 20);
     }
 
     if (c & 1) {
         /* Odd tile count, so one remaining to draw. Here we split
          * it into two and draw half on either side of the title */
-        skin_draw_pixmap(skin, drawable, gc, SKIN_PLEDIT, 127, y,
+        skin_draw_pixmap(NULL, skin, drawable, gc, SKIN_PLEDIT, 127, y,
                          ((c / 2) * 25) + 25, 0, 12, 20);
-        skin_draw_pixmap(skin, drawable, gc, SKIN_PLEDIT, 127, y,
+        skin_draw_pixmap(NULL, skin, drawable, gc, SKIN_PLEDIT, 127, y,
                          (width / 2) + ((c / 2) * 25) + 50, 0, 13, 20);
     }
 }
@@ -1838,7 +1891,7 @@
     gint i, c;
 
     /* bottom left corner (menu buttons) */
-    skin_draw_pixmap(skin, drawable, gc, SKIN_PLEDIT, 0, 72,
+    skin_draw_pixmap(NULL, skin, drawable, gc, SKIN_PLEDIT, 0, 72,
                      0, height - 38, 125, 38);
 
     c = (width - 275) / 25;
@@ -1846,17 +1899,17 @@
     /* draw visualization window, if width allows */
     if (c >= 3) {
         c -= 3;
-        skin_draw_pixmap(skin, drawable, gc, SKIN_PLEDIT, 205, 0,
+        skin_draw_pixmap(NULL, skin, drawable, gc, SKIN_PLEDIT, 205, 0,
                          width - (150 + 75), height - 38, 75, 38);
     }
 
     /* Bottom right corner (playbuttons etc) */
-    skin_draw_pixmap(skin, drawable, gc, SKIN_PLEDIT,
+    skin_draw_pixmap(NULL, skin, drawable, gc, SKIN_PLEDIT,
                      126, 72, width - 150, height - 38, 150, 38);
 
     /* Tile draw the remaining undrawn portions */
     for (i = 0; i < c; i++)
-        skin_draw_pixmap(skin, drawable, gc, SKIN_PLEDIT, 179, 0,
+        skin_draw_pixmap(NULL, skin, drawable, gc, SKIN_PLEDIT, 179, 0,
                          125 + i * 25, height - 38, 25, 38);
 }
 
@@ -1877,11 +1930,11 @@
     /* frame sides */
     for (i = 0; i < (height - (20 + 38)) / 29; i++) {
         /* left */
-        skin_draw_pixmap(skin, drawable, gc, SKIN_PLEDIT, 0, 42,
+        skin_draw_pixmap(NULL, skin, drawable, gc, SKIN_PLEDIT, 0, 42,
                          0, 20 + i * 29, 12, 29);
 
         /* right */
-        skin_draw_pixmap(skin, drawable, gc, SKIN_PLEDIT, 32, 42,
+        skin_draw_pixmap(NULL, skin, drawable, gc, SKIN_PLEDIT, 32, 42,
                          width - 19, 20 + i * 29, 19, 29);
     }
 }
@@ -1915,15 +1968,15 @@
     gint i;
 
     /* left corner */
-    skin_draw_pixmap(skin, drawable, gc, SKIN_PLEDIT, 72, 42, 0, 0, 25, 14);
+    skin_draw_pixmap(NULL, skin, drawable, gc, SKIN_PLEDIT, 72, 42, 0, 0, 25, 14);
 
     /* bar tile */
     for (i = 0; i < (width - 75) / 25; i++)
-        skin_draw_pixmap(skin, drawable, gc, SKIN_PLEDIT, 72, 57,
+        skin_draw_pixmap(NULL, skin, drawable, gc, SKIN_PLEDIT, 72, 57,
                          (i * 25) + 25, 0, 25, 14);
 
     /* right corner */
-    skin_draw_pixmap(skin, drawable, gc, SKIN_PLEDIT, 99, focus ? 42 : 57,
+    skin_draw_pixmap(NULL, skin, drawable, gc, SKIN_PLEDIT, 99, focus ? 42 : 57,
                      width - 50, 0, 50, 14);
 }
 
@@ -1959,7 +2012,7 @@
             y_offset = 15;
     }
 
-    skin_draw_pixmap(skin, drawable, gc, SKIN_TITLEBAR, 27, y_offset,
+    skin_draw_pixmap(NULL, skin, drawable, gc, SKIN_TITLEBAR, 27, y_offset,
                      0, 0, bmp_active_skin->properties.mainwin_width, MAINWIN_TITLEBAR_HEIGHT);
 }
 
--- a/src/audacious/skin.h	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/skin.h	Fri Nov 16 05:32:56 2007 +0200
@@ -29,7 +29,7 @@
 
 #include <glib.h>
 #include <gdk/gdk.h>
-
+#include <gtk/gtk.h>
 
 #define BMP_DEFAULT_SKIN_PATH \
   DATA_DIR G_DIR_SEPARATOR_S "Skins" G_DIR_SEPARATOR_S "Default"
@@ -219,7 +219,7 @@
 
 void skin_get_viscolor(Skin * skin, guchar vis_color[24][3]);
 gint skin_get_id(void);
-void skin_draw_pixmap(Skin * skin, GdkDrawable * drawable, GdkGC * gc,
+void skin_draw_pixmap(GtkWidget * widget, Skin * skin, GdkDrawable * drawable, GdkGC * gc,
                       SkinPixmapId pixmap_id,
                       gint xsrc, gint ysrc, gint xdest, gint ydest,
                       gint width, gint height);
--- a/src/audacious/ui_about.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/ui_about.c	Fri Nov 16 05:32:56 2007 +0200
@@ -203,3 +203,10 @@
     gtk_widget_show_all(about_window);
     gtk_window_present(GTK_WINDOW(about_window));
 }
+
+void
+hide_about_window(void)
+{
+    g_return_if_fail(about_window);
+    gtk_widget_hide(GTK_WIDGET(about_window));
+}
--- a/src/audacious/ui_credits.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/ui_credits.c	Fri Nov 16 05:32:56 2007 +0200
@@ -75,6 +75,7 @@
 
     N_("Default skin:"),
     "George Averill",
+	"Michael Färber",
     "William Pitcock",
     NULL,
 
--- a/src/audacious/ui_credits.h	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/ui_credits.h	Fri Nov 16 05:32:56 2007 +0200
@@ -3,6 +3,7 @@
 #define ABOUT_H
 
 void show_about_window(void);
+void hide_about_window(void);
 void show_credits_window(void);
 
 #endif
--- a/src/audacious/ui_equalizer.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/ui_equalizer.c	Fri Nov 16 05:32:56 2007 +0200
@@ -74,6 +74,7 @@
 
 
 GtkWidget *equalizerwin;
+GtkWidget *equalizerwin_graph;
 
 static GtkWidget *equalizerwin_load_window = NULL;
 static GtkWidget *equalizerwin_load_auto_window = NULL;
@@ -87,7 +88,6 @@
 static GtkWidget *equalizerwin_on, *equalizerwin_auto;
 
 static GtkWidget *equalizerwin_close, *equalizerwin_presets, *equalizerwin_shade;
-static GtkWidget *equalizerwin_graph;
 static GtkWidget *equalizerwin_preamp,*equalizerwin_bands[10];
 static GtkWidget *equalizerwin_volume, *equalizerwin_balance;
 
@@ -1282,7 +1282,7 @@
 gfloat
 equalizerwin_get_band(gint band)
 {
-    g_return_val_if_fail(band >= 0 && band < 10, 0);
+    g_return_val_if_fail(band >= 0 && band < 10, 0.0);
     return ui_skinned_equalizer_slider_get_position(equalizerwin_bands[band]);
 }
 
@@ -1515,3 +1515,13 @@
                                     G_CALLBACK(equalizerwin_delete_auto_delete),
                                     NULL);
 }
+
+void
+equalizer_activate(gboolean active)
+{
+    cfg.equalizer_active = active;
+    UI_SKINNED_BUTTON(equalizerwin_on)->inside = active;
+    gtk_widget_queue_draw(equalizerwin_on);
+
+    equalizerwin_eq_changed();
+}
--- a/src/audacious/ui_equalizer.h	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/ui_equalizer.h	Fri Nov 16 05:32:56 2007 +0200
@@ -58,6 +58,9 @@
 gboolean equalizerwin_has_focus(void);
 
 extern GtkWidget *equalizerwin;
+extern GtkWidget *equalizerwin_graph;
 extern gboolean equalizerwin_focus;
 
+void equalizer_activate(gboolean active);
+
 #endif
--- a/src/audacious/ui_fileinfopopup.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/ui_fileinfopopup.c	Fri Nov 16 05:32:56 2007 +0200
@@ -220,6 +220,8 @@
     GtkWidget *filepopup_progress;
 
     filepopup_win = gtk_window_new(GTK_WINDOW_POPUP);
+    gtk_window_set_type_hint(GTK_WINDOW(filepopup_win),
+		    		 GDK_WINDOW_TYPE_HINT_TOOLTIP);
     gtk_window_set_decorated(GTK_WINDOW(filepopup_win), FALSE);
     gtk_container_set_border_width(GTK_CONTAINER(filepopup_win), 6);
     gtk_window_set_transient_for(GTK_WINDOW(filepopup_win),
--- a/src/audacious/ui_fileopener.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/ui_fileopener.c	Fri Nov 16 05:32:56 2007 +0200
@@ -108,8 +108,8 @@
     return FALSE;
 }
 
-void
-util_run_filebrowser_gtk2style(gboolean play_button)
+static void
+util_run_filebrowser_gtk2style(gboolean play_button, gboolean show)
 {
     static GtkWidget *window = NULL;
     GtkWidget *vbox, *hbox, *bbox;
@@ -119,9 +119,19 @@
     gchar *window_title, *toggle_text;
     gpointer action_stock, storage;
 
-    if(window) {
-        gtk_window_present(GTK_WINDOW(window)); /* raise filebrowser */
-        return;
+    if(!show) {
+        if(window){
+            gtk_widget_hide(window);
+            return;
+        }
+        else
+            return;
+    }
+    else {
+        if(window) {
+            gtk_window_present(GTK_WINDOW(window)); /* raise filebrowser */
+            return;
+        }
     }
     
     window_title = play_button ? _("Open Files") : _("Add Files");
@@ -339,17 +349,27 @@
     gtk_entry_set_text(GTK_ENTRY(filesel->selection_entry), "");
 }
 
-void
-util_run_filebrowser_classic(gboolean play_button)
+static void
+util_run_filebrowser_classic(gboolean play_button, gboolean show)
 {
     static GtkWidget *dialog;
     GtkWidget *button_add_selected, *button_add_all, *button_close,
     *button_add;
     char *title;
 
-    if (dialog != NULL) {
-    gtk_window_present(GTK_WINDOW(dialog));
-    return;
+    if (!show) {
+        if(dialog) {
+            gtk_widget_hide(dialog);
+            return;
+        }
+        else
+            return;
+    }
+    else {
+        if (dialog) {
+            gtk_window_present(GTK_WINDOW(dialog));
+            return;
+        }
     }
 
     if (play_button)
@@ -450,7 +470,16 @@
 run_filebrowser(gboolean play_button)
 {
     if (!cfg.use_xmms_style_fileselector)
-        util_run_filebrowser_gtk2style(play_button);
+        util_run_filebrowser_gtk2style(play_button, TRUE);
     else
-        util_run_filebrowser_classic(play_button);
+        util_run_filebrowser_classic(play_button, TRUE);
 }
+
+void
+hide_filebrowser(void)
+{
+    if (!cfg.use_xmms_style_fileselector)
+        util_run_filebrowser_gtk2style(FALSE, FALSE);
+    else
+        util_run_filebrowser_classic(FALSE, FALSE);
+}
--- a/src/audacious/ui_fileopener.h	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/ui_fileopener.h	Fri Nov 16 05:32:56 2007 +0200
@@ -26,5 +26,6 @@
 #define PLAY_BUTTON     TRUE
 
 void run_filebrowser(gboolean clear_pl_on_ok);
+void hide_filebrowser(void);
 
 #endif
--- a/src/audacious/ui_jumptotrack.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/ui_jumptotrack.c	Fri Nov 16 05:32:56 2007 +0200
@@ -80,6 +80,7 @@
 #include "ui_skinned_window.h"
 
 static GtkWidget *jump_to_track_win = NULL;
+static gulong serial = 0;
 
 static void
 change_song(guint pos)
@@ -91,6 +92,13 @@
     playback_initiate();
 }
 
+void
+ui_jump_to_track_hide(void)
+{
+    g_return_if_fail(jump_to_track_win);
+    gtk_widget_hide(jump_to_track_win);
+}
+
 static void
 ui_jump_to_track_jump(GtkTreeView * treeview)
 {
@@ -109,11 +117,8 @@
 
     change_song(pos - 1);
 
-    /* FIXME: should only hide window */
-    if(cfg.close_jtf_dialog){
-        gtk_widget_destroy(jump_to_track_win);
-        jump_to_track_win = NULL;
-    }
+    if(cfg.close_jtf_dialog)
+        ui_jump_to_track_hide();
 }
 
 static void
@@ -212,9 +217,7 @@
 {
     switch (event->keyval) {
     case GDK_Escape:
-        /* FIXME: show only hide window */
-        gtk_widget_destroy(jump_to_track_win);
-        jump_to_track_win = NULL;
+        ui_jump_to_track_hide();
         return TRUE;
     case GDK_KP_Enter:
         ui_jump_to_track_queue_cb(NULL, data);
@@ -247,12 +250,9 @@
     return rv;
 }
 
-/* FIXME: Clear the entry when the list gets updated */
 void
 ui_jump_to_track_update(GtkWidget * widget, gpointer user_data)
 {
-    /* FIXME: Is not in sync with playlist due to delayed extinfo
-     * reading */
     guint row;
     GList *playlist_glist;
     gchar *desc_buf = NULL;
@@ -262,10 +262,18 @@
 
     GtkTreeModel *store;
 
+    GtkTreeView *tree = GTK_TREE_VIEW(g_object_get_data(user_data, "treeview"));
+    GtkEntry *edit = g_object_get_data(user_data, "edit");
+
     if (!jump_to_track_win)
         return;
 
-    store = gtk_tree_view_get_model(GTK_TREE_VIEW(user_data));
+    /* clear edit widget */
+    if(edit){
+        gtk_entry_set_text(edit, "\0");
+    }
+
+    store = gtk_tree_view_get_model(tree);
     gtk_list_store_clear(GTK_LIST_STORE(store));
 
     row = 1;
@@ -296,8 +304,9 @@
     }
 
     gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), &iter);
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(user_data));
+    selection = gtk_tree_view_get_selection(tree);
     gtk_tree_selection_select_iter(selection, &iter);
+    serial = playlist->serial; // important. --yaz
 }
 
 static void
@@ -443,11 +452,9 @@
     gtk_list_store_clear(jtf_store);
 
     row = 1;
-
     playlist = playlist_get_active();
 
     PLAYLIST_LOCK(playlist);
-
     for (playlist_glist = playlist->entries; playlist_glist;
          playlist_glist = g_list_next(playlist_glist)) {
 
@@ -470,36 +477,50 @@
                            0, row, 1, desc_buf, -1);
         row++;
 
-        if (desc_buf) {
-            g_free(desc_buf);
-            desc_buf = NULL;
-        }
+        g_free(desc_buf);
+        desc_buf = NULL;
     }
-
     PLAYLIST_UNLOCK(playlist);
 
     /* attach liststore to treeview */
     gtk_tree_view_set_model(GTK_TREE_VIEW(treeview), GTK_TREE_MODEL(jtf_store));
     g_object_unref(jtf_store);
+    serial = playlist->serial;
     return FALSE;
 }
 
+static gboolean
+watchdog(gpointer storage)
+{
+    GtkWidget *widget;
+    Playlist *playlist = playlist_get_active();
+
+    if(serial == playlist->serial)
+        return TRUE;
+
+    widget = g_object_get_data(storage, "widget");
+    ui_jump_to_track_update(widget, storage);
+    return TRUE;
+}
+
 void
 ui_jump_to_track(void)
 {
     GtkWidget *scrollwin;
     GtkWidget *vbox, *bbox, *sep;
     GtkWidget *toggle;
-    GtkWidget *jump, *queue, *cancel;
+    GtkWidget *jump, *queue, *close;
     GtkWidget *rescan, *edit;
     GtkWidget *search_label, *hbox;
 
-    GtkWidget *treeview;
+    GtkWidget *treeview = NULL;
     GtkListStore *jtf_store;
 
     GtkCellRenderer *renderer;
     GtkTreeViewColumn *column;
 
+    gpointer storage;
+
     if (jump_to_track_win) {
         gtk_window_present(GTK_WINDOW(jump_to_track_win));
         return;
@@ -612,8 +633,16 @@
 
     rescan = gtk_button_new_from_stock(GTK_STOCK_REFRESH);
     gtk_box_pack_start(GTK_BOX(bbox), rescan, FALSE, FALSE, 0);
+
+    /* pack to container */
+    storage = g_object_new(G_TYPE_OBJECT, NULL);
+    g_object_set_data(storage, "widget", rescan);
+    g_object_set_data(storage, "treeview", treeview);
+    g_object_set_data(storage, "edit", edit);
+
     g_signal_connect(rescan, "clicked",
-                     G_CALLBACK(ui_jump_to_track_update), treeview);
+                     G_CALLBACK(ui_jump_to_track_update), storage);
+
     GTK_WIDGET_SET_FLAGS(rescan, GTK_CAN_DEFAULT);
     gtk_widget_grab_default(rescan);
 
@@ -627,14 +656,18 @@
     GTK_WIDGET_SET_FLAGS(jump, GTK_CAN_DEFAULT);
     gtk_widget_grab_default(jump);
 
-    cancel = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
-    gtk_box_pack_start(GTK_BOX(bbox), cancel, FALSE, FALSE, 0);
-    g_signal_connect_swapped(cancel, "clicked",
-                             G_CALLBACK(gtk_widget_destroy),
-                             jump_to_track_win);
-    GTK_WIDGET_SET_FLAGS(cancel, GTK_CAN_DEFAULT);
+    close = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
+    gtk_box_pack_start(GTK_BOX(bbox), close, FALSE, FALSE, 0);
+/*     g_signal_connect_swapped(close, "clicked", */
+/*                              G_CALLBACK(gtk_widget_destroy), */
+/*                              jump_to_track_win); */
+    g_signal_connect_swapped(close, "clicked",
+                             G_CALLBACK(gtk_widget_hide),
+                             jump_to_track_win); // just hide --yaz
+    GTK_WIDGET_SET_FLAGS(close, GTK_CAN_DEFAULT);
 
     g_timeout_add(100, (GSourceFunc)ui_jump_to_track_fill, treeview);
+    g_timeout_add(500, (GSourceFunc)watchdog, storage);
 
     gtk_widget_show_all(jump_to_track_win);
     gtk_widget_grab_focus(edit);
--- a/src/audacious/ui_jumptotrack.h	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/ui_jumptotrack.h	Fri Nov 16 05:32:56 2007 +0200
@@ -28,5 +28,6 @@
 
 extern void ui_jump_to_track_update(GtkWidget * widget, gpointer user_data);
 extern void ui_jump_to_track(void);
+extern void ui_jump_to_track_hide(void);
 
 #endif
--- a/src/audacious/ui_main.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/ui_main.c	Fri Nov 16 05:32:56 2007 +0200
@@ -694,23 +694,16 @@
         cfg.player_shaded ? 3 : bmp_active_skin->properties.mainwin_close_y);
 
     mainwin_refresh_visible();
+
     /* window size, mainwinWidth && mainwinHeight properties */
     if (bmp_active_skin->properties.mainwin_height && bmp_active_skin->properties.mainwin_width)
     {
-    gint width, height;
-
-    gdk_window_get_size(mainwin->window, &width, &height);
-
-        if (width == bmp_active_skin->properties.mainwin_width * (cfg.doublesize + 1) &&
-        height == bmp_active_skin->properties.mainwin_height * (cfg.doublesize + 1))
-            return;
-
         dock_window_resize(GTK_WINDOW(mainwin), cfg.player_shaded ? MAINWIN_SHADED_WIDTH * (cfg.doublesize + 1) : bmp_active_skin->properties.mainwin_width * (cfg.doublesize + 1),
-        cfg.player_shaded ? MAINWIN_SHADED_HEIGHT * (cfg.doublesize + 1) : bmp_active_skin->properties.mainwin_height * (cfg.doublesize + 1),
-        bmp_active_skin->properties.mainwin_width * (cfg.doublesize + 1),
-        bmp_active_skin->properties.mainwin_height * (cfg.doublesize + 1));
-
-    gdk_flush();
+            cfg.player_shaded ? MAINWIN_SHADED_HEIGHT * (cfg.doublesize + 1) : bmp_active_skin->properties.mainwin_height * (cfg.doublesize + 1),
+            bmp_active_skin->properties.mainwin_width * (cfg.doublesize + 1),
+            bmp_active_skin->properties.mainwin_height * (cfg.doublesize + 1));
+
+        gdk_flush();
     }
 }
 
@@ -1697,17 +1690,11 @@
       nullmask = NULL;
     }
 
-    gtk_window_resize(GTK_WINDOW(mainwin),
-                         !bmp_active_skin->properties.mainwin_width ? PLAYER_WIDTH :
-                bmp_active_skin->properties.mainwin_width,
-                         !bmp_active_skin->properties.mainwin_height ? PLAYER_HEIGHT :
-                bmp_active_skin->properties.mainwin_height);
-
     if (cfg.player_x != -1 && cfg.save_window_position)
         gtk_window_move(GTK_WINDOW(mainwin), cfg.player_x, cfg.player_y);
 
+    mainwin_refresh_hints();
     gtk_window_present(GTK_WINDOW(mainwin));
-    mainwin_refresh_hints();
 }
 
 void
--- a/src/audacious/ui_main_evlisteners.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/ui_main_evlisteners.c	Fri Nov 16 05:32:56 2007 +0200
@@ -19,6 +19,8 @@
  */
 
 #include <glib.h>
+#include <math.h>
+
 #include "hook.h"
 #include "playback.h"
 #include "playlist.h"
@@ -26,6 +28,7 @@
 #include "playlist_evlisteners.h"
 
 #include "ui_main.h"
+#include "ui_equalizer.h"
 #include "ui_skinned_textbox.h"
 #include "ui_playlist.h"
 
@@ -45,9 +48,33 @@
     mainwin_disable_seekbar();
 }
 
+static void
+ui_main_evlistener_volume_change(gpointer hook_data, gpointer user_data)
+{
+    gint *h_vol = (gint *) hook_data;
+    gint vl, vr, b, v;
+
+    vl = CLAMP(h_vol[0], 0, 100);
+    vr = CLAMP(h_vol[1], 0, 100);
+    v = MAX(vl, vr);
+    if (vl > vr)
+        b = (gint) rint(((gdouble) vr / vl) * 100) - 100;
+    else if (vl < vr)
+        b = 100 - (gint) rint(((gdouble) vl / vr) * 100);
+    else
+        b = 0;
+
+    mainwin_set_volume_slider(v);
+    equalizerwin_set_volume_slider(v);
+    mainwin_set_balance_slider(b);
+    equalizerwin_set_balance_slider(b);
+}
+
 void
 ui_main_evlistener_init(void)
 {
     hook_associate("title change", ui_main_evlistener_title_change, NULL);
     hook_associate("hide seekbar", ui_main_evlistener_hide_seekbar, NULL);
+    hook_associate("volume set", ui_main_evlistener_volume_change, NULL);
 }
+
--- a/src/audacious/ui_preferences.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/ui_preferences.c	Fri Nov 16 05:32:56 2007 +0200
@@ -2182,6 +2182,13 @@
     }
 }
 
+void
+hide_prefs_window(void)
+{
+    g_return_if_fail(prefswin);
+    gtk_widget_hide(GTK_WIDGET(prefswin));
+}
+
 static void
 prefswin_page_queue_new(GtkWidget *container, gchar *name, gchar *imgurl)
 {
--- a/src/audacious/ui_preferences.h	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/ui_preferences.h	Fri Nov 16 05:32:56 2007 +0200
@@ -22,6 +22,7 @@
 
 void create_prefs_window(void);
 void show_prefs_window(void);
+void hide_prefs_window(void);
 
 gint prefswin_page_new(GtkWidget *container, gchar *name, gchar *imgurl);
 void prefswin_page_destroy(GtkWidget *container);
--- a/src/audacious/ui_skinned_button.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/ui_skinned_button.c	Fri Nov 16 05:32:56 2007 +0200
@@ -40,7 +40,6 @@
     gint             h;
     SkinPixmapId     skin_index1;
     SkinPixmapId     skin_index2;
-    GtkWidget        *fixed;
     gboolean         double_size;
     gint             move_x, move_y;
 
@@ -307,7 +306,7 @@
 
     switch (button->type) {
         case TYPE_PUSH:
-            skin_draw_pixmap(bmp_active_skin, obj, gc,
+            skin_draw_pixmap(widget, bmp_active_skin, obj, gc,
                              button->pressed ? priv->skin_index2 : priv->skin_index1,
                              button->pressed ? priv->px : priv->nx,
                              button->pressed ? priv->py : priv->ny,
@@ -315,13 +314,13 @@
             break;
         case TYPE_TOGGLE:
             if (button->inside)
-                skin_draw_pixmap(bmp_active_skin, obj, gc,
+                skin_draw_pixmap(widget, bmp_active_skin, obj, gc,
                                  button->pressed ? priv->skin_index2 : priv->skin_index1,
                                  button->pressed ? priv->ppx : priv->pnx,
                                  button->pressed ? priv->ppy : priv->pny,
                                  0, 0, priv->w, priv->h);
             else
-                skin_draw_pixmap(bmp_active_skin, obj, gc,
+                skin_draw_pixmap(widget, bmp_active_skin, obj, gc,
                                  button->pressed ? priv->skin_index2 : priv->skin_index1,
                                  button->pressed ? priv->px : priv->nx,
                                  button->pressed ? priv->py : priv->ny,
@@ -372,10 +371,9 @@
     sbutton->type = TYPE_PUSH;
     priv->skin_index1 = si;
     priv->skin_index2 = si;
-    priv->fixed = fixed;
     priv->double_size = FALSE;
 
-    gtk_fixed_put(GTK_FIXED(priv->fixed),GTK_WIDGET(button), sbutton->x, sbutton->y);
+    gtk_fixed_put(GTK_FIXED(fixed), GTK_WIDGET(button), sbutton->x, sbutton->y);
 }
 
 void ui_skinned_toggle_button_setup(GtkWidget *button, GtkWidget *fixed, gint x, gint y, gint w, gint h, gint nx, gint ny, gint px, gint py, gint pnx, gint pny, gint ppx, gint ppy, SkinPixmapId si) {
@@ -397,10 +395,9 @@
     sbutton->type = TYPE_TOGGLE;
     priv->skin_index1 = si;
     priv->skin_index2 = si;
-    priv->fixed = fixed;
     priv->double_size = FALSE;
 
-    gtk_fixed_put(GTK_FIXED(priv->fixed),GTK_WIDGET(button), sbutton->x, sbutton->y);
+    gtk_fixed_put(GTK_FIXED(fixed), GTK_WIDGET(button), sbutton->x, sbutton->y);
 }
 
 void ui_skinned_small_button_setup(GtkWidget *button, GtkWidget *fixed, gint x, gint y, gint w, gint h) {
@@ -412,10 +409,9 @@
     sbutton->x = x;
     sbutton->y = y;
     sbutton->type = TYPE_SMALL;
-    priv->fixed = fixed;
     priv->double_size = FALSE;
 
-    gtk_fixed_put(GTK_FIXED(priv->fixed),GTK_WIDGET(button), sbutton->x, sbutton->y);
+    gtk_fixed_put(GTK_FIXED(fixed), GTK_WIDGET(button), sbutton->x, sbutton->y);
 }
 
 static void button_pressed(UiSkinnedButton *button) {
@@ -516,7 +512,8 @@
 static void ui_skinned_button_redraw(UiSkinnedButton *button) {
     UiSkinnedButtonPrivate *priv = UI_SKINNED_BUTTON_GET_PRIVATE (button);
     if (priv->move_x || priv->move_y)
-        gtk_fixed_move(GTK_FIXED(priv->fixed), GTK_WIDGET(button), button->x+priv->move_x, button->y+priv->move_y);
+        gtk_fixed_move(GTK_FIXED(gtk_widget_get_parent(GTK_WIDGET(button))), GTK_WIDGET(button),
+                       button->x+priv->move_x, button->y+priv->move_y);
 
     gtk_widget_queue_draw(GTK_WIDGET(button));
 }
--- a/src/audacious/ui_skinned_equalizer_graph.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/ui_skinned_equalizer_graph.c	Fri Nov 16 05:32:56 2007 +0200
@@ -101,10 +101,9 @@
     equalizer_graph->x = x;
     equalizer_graph->y = y;
     equalizer_graph->skin_index = SKIN_EQMAIN;
-    equalizer_graph->fixed = fixed;
     equalizer_graph->double_size = FALSE;
 
-    gtk_fixed_put(GTK_FIXED(equalizer_graph->fixed), GTK_WIDGET(equalizer_graph), equalizer_graph->x, equalizer_graph->y);
+    gtk_fixed_put(GTK_FIXED(fixed), GTK_WIDGET(equalizer_graph), equalizer_graph->x, equalizer_graph->y);
 
     return GTK_WIDGET(equalizer_graph);
 }
@@ -246,9 +245,9 @@
      */
     void (*__init_spline) (gfloat *, gfloat *, gint, gfloat *) = init_spline;
 
-    skin_draw_pixmap(bmp_active_skin, obj, gc, equalizer_graph->skin_index, 0, 294, 0, 0,
+    skin_draw_pixmap(widget, bmp_active_skin, obj, gc, equalizer_graph->skin_index, 0, 294, 0, 0,
                      equalizer_graph->width, equalizer_graph->height);
-    skin_draw_pixmap(bmp_active_skin, obj, gc, equalizer_graph->skin_index, 0, 314,
+    skin_draw_pixmap(widget, bmp_active_skin, obj, gc, equalizer_graph->skin_index, 0, 314,
                      0, 9 + ((cfg.equalizer_preamp * 9) / 20),
                      equalizer_graph->width, 1);
 
--- a/src/audacious/ui_skinned_equalizer_graph.h	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/ui_skinned_equalizer_graph.h	Fri Nov 16 05:32:56 2007 +0200
@@ -46,7 +46,6 @@
 
     gint             x, y, width, height;
     SkinPixmapId     skin_index;
-    GtkWidget        *fixed;
     gboolean         double_size;
 };
 
--- a/src/audacious/ui_skinned_equalizer_slider.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/ui_skinned_equalizer_slider.c	Fri Nov 16 05:32:56 2007 +0200
@@ -38,7 +38,6 @@
 };
 
 struct _UiSkinnedEqualizerSliderPrivate {
-    GtkWidget        *fixed;
     SkinPixmapId     skin_index;
     gboolean         double_size;
     gint             position;
@@ -129,9 +128,8 @@
     priv->width = 14;
     priv->height = 63;
     priv->skin_index = SKIN_EQMAIN;
-    priv->fixed = fixed;
 
-    gtk_fixed_put(GTK_FIXED(priv->fixed), GTK_WIDGET(es), es->x, es->y);
+    gtk_fixed_put(GTK_FIXED(fixed), GTK_WIDGET(es), es->x, es->y);
 
     return GTK_WIDGET(es);
 }
@@ -216,14 +214,14 @@
     gint frame;
     frame = 27 - ((priv->position * 27) / 50);
     if (frame < 14)
-        skin_draw_pixmap(bmp_active_skin, obj, gc, priv->skin_index, (frame * 15) + 13, 164, 0, 0, priv->width, priv->height);
+        skin_draw_pixmap(widget, bmp_active_skin, obj, gc, priv->skin_index, (frame * 15) + 13, 164, 0, 0, priv->width, priv->height);
     else
-        skin_draw_pixmap(bmp_active_skin, obj, gc, priv->skin_index, ((frame - 14) * 15) + 13, 229, 0, 0, priv->width, priv->height);
+        skin_draw_pixmap(widget, bmp_active_skin, obj, gc, priv->skin_index, ((frame - 14) * 15) + 13, 229, 0, 0, priv->width, priv->height);
 
     if (priv->pressed)
-        skin_draw_pixmap(bmp_active_skin, obj, gc, priv->skin_index, 0, 176, 1, priv->position, 11, 11);
+        skin_draw_pixmap(widget, bmp_active_skin, obj, gc, priv->skin_index, 0, 176, 1, priv->position, 11, 11);
     else
-        skin_draw_pixmap(bmp_active_skin, obj, gc, priv->skin_index, 0, 164, 1, priv->position, 11, 11);
+        skin_draw_pixmap(widget, bmp_active_skin, obj, gc, priv->skin_index, 0, 164, 1, priv->position, 11, 11);
 
     GdkPixmap *image = NULL;
 
--- a/src/audacious/ui_skinned_horizontal_slider.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/ui_skinned_horizontal_slider.c	Fri Nov 16 05:32:56 2007 +0200
@@ -39,7 +39,6 @@
 };
 
 struct _UiSkinnedHorizontalSliderPrivate {
-    GtkWidget        *fixed;
     SkinPixmapId     skin_index;
     gboolean         double_size;
     gint             frame, frame_offset, frame_height, min, max;
@@ -141,7 +140,6 @@
     hs->y = y;
     priv->width = w;
     priv->height = h;
-    priv->fixed = fixed;
     hs->knob_nx = knx;
     hs->knob_ny = kny;
     hs->knob_px = kpx;
@@ -158,7 +156,7 @@
         priv->frame = priv->frame_cb(0);
     priv->skin_index = si;
 
-    gtk_fixed_put(GTK_FIXED(priv->fixed), GTK_WIDGET(hs), hs->x, hs->y);
+    gtk_fixed_put(GTK_FIXED(fixed), GTK_WIDGET(hs), hs->x, hs->y);
 
     return GTK_WIDGET(hs);
 }
@@ -249,18 +247,18 @@
     obj = gdk_pixmap_new(NULL, priv->width, priv->height, gdk_rgb_get_visual()->depth);
     gc = gdk_gc_new(obj);
 
-    skin_draw_pixmap(bmp_active_skin, obj, gc,
+    skin_draw_pixmap(widget, bmp_active_skin, obj, gc,
                      priv->skin_index, priv->frame_offset,
                      priv->frame * priv->frame_height,
                      0, 0, priv->width, priv->height);
     if (hs->pressed)
-        skin_draw_pixmap(bmp_active_skin, obj, gc,
+        skin_draw_pixmap(widget, bmp_active_skin, obj, gc,
                          priv->skin_index, hs->knob_px,
                          hs->knob_py, priv->position,
                          ((priv->height - priv->knob_height) / 2),
                          priv->knob_width, priv->knob_height);
     else
-        skin_draw_pixmap(bmp_active_skin, obj, gc,
+        skin_draw_pixmap(widget, bmp_active_skin, obj, gc,
                          priv->skin_index, hs->knob_nx,
                          hs->knob_ny, priv->position,
                          ((priv->height - priv->knob_height) / 2),
--- a/src/audacious/ui_skinned_menurow.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/ui_skinned_menurow.c	Fri Nov 16 05:32:56 2007 +0200
@@ -133,10 +133,9 @@
 
     menurow->skin_index = si;
 
-    menurow->fixed = fixed;
     menurow->double_size = FALSE;
 
-    gtk_fixed_put(GTK_FIXED(menurow->fixed), GTK_WIDGET(menurow), menurow->x, menurow->y);
+    gtk_fixed_put(GTK_FIXED(fixed), GTK_WIDGET(menurow), menurow->x, menurow->y);
 
     return GTK_WIDGET(menurow);
 }
@@ -219,23 +218,23 @@
 
     if (menurow->selected == MENUROW_NONE) {
         if (cfg.always_show_cb || menurow->pushed)
-            skin_draw_pixmap(bmp_active_skin, obj, gc, menurow->skin_index,
+            skin_draw_pixmap(widget, bmp_active_skin, obj, gc, menurow->skin_index,
                              menurow->nx, menurow->ny, 0, 0, 8, 43);
         else
-            skin_draw_pixmap(bmp_active_skin, obj, gc, menurow->skin_index,
+            skin_draw_pixmap(widget, bmp_active_skin, obj, gc, menurow->skin_index,
                              menurow->nx + 8, menurow->ny, 0, 0, 8, 43);
     }
     else {
-        skin_draw_pixmap(bmp_active_skin, obj, gc, menurow->skin_index,
+        skin_draw_pixmap(widget, bmp_active_skin, obj, gc, menurow->skin_index,
                          menurow->sx + ((menurow->selected - 1) * 8),
                          menurow->sy, 0, 0, 8, 43);
     }
     if (cfg.always_show_cb || menurow->pushed) {
         if (menurow->always_selected)
-            skin_draw_pixmap(bmp_active_skin, obj, gc, menurow->skin_index,
+            skin_draw_pixmap(widget, bmp_active_skin, obj, gc, menurow->skin_index,
                              menurow->sx + 8, menurow->sy + 10, 0, 10, 8, 8);
         if (menurow->doublesize_selected)
-            skin_draw_pixmap(bmp_active_skin, obj, gc, menurow->skin_index,
+            skin_draw_pixmap(widget, bmp_active_skin, obj, gc, menurow->skin_index,
                              menurow->sx + 24, menurow->sy + 26, 0, 26, 8, 8);
     }
 
--- a/src/audacious/ui_skinned_menurow.h	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/ui_skinned_menurow.h	Fri Nov 16 05:32:56 2007 +0200
@@ -50,7 +50,6 @@
     GtkWidget        widget;
 
     gint             x, y, width, height;
-    GtkWidget        *fixed;
     gboolean         double_size;
     gint             nx, ny;
     gint             sx, sy;
--- a/src/audacious/ui_skinned_monostereo.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/ui_skinned_monostereo.c	Fri Nov 16 05:32:56 2007 +0200
@@ -102,10 +102,9 @@
     monostereo->x = x;
     monostereo->y = y;
     monostereo->skin_index = si;
-    monostereo->fixed = fixed;
     monostereo->double_size = FALSE;
 
-    gtk_fixed_put(GTK_FIXED(monostereo->fixed), GTK_WIDGET(monostereo), monostereo->x, monostereo->y);
+    gtk_fixed_put(GTK_FIXED(fixed), GTK_WIDGET(monostereo), monostereo->x, monostereo->y);
 
     return GTK_WIDGET(monostereo);
 }
@@ -187,17 +186,17 @@
 
     switch (monostereo->num_channels) {
     case 1:
-        skin_draw_pixmap(bmp_active_skin, obj, gc, monostereo->skin_index, 29, 0, 0, 0, 27, 12);
-        skin_draw_pixmap(bmp_active_skin, obj, gc, monostereo->skin_index, 0, 12, 27, 0, 29, 12);
+        skin_draw_pixmap(widget, bmp_active_skin, obj, gc, monostereo->skin_index, 29, 0, 0, 0, 27, 12);
+        skin_draw_pixmap(widget, bmp_active_skin, obj, gc, monostereo->skin_index, 0, 12, 27, 0, 29, 12);
         break;
     case 2:
-        skin_draw_pixmap(bmp_active_skin, obj, gc, monostereo->skin_index, 29, 12, 0, 0, 27, 12);
-        skin_draw_pixmap(bmp_active_skin, obj, gc, monostereo->skin_index, 0, 0, 27, 0, 29, 12);
+        skin_draw_pixmap(widget, bmp_active_skin, obj, gc, monostereo->skin_index, 29, 12, 0, 0, 27, 12);
+        skin_draw_pixmap(widget, bmp_active_skin, obj, gc, monostereo->skin_index, 0, 0, 27, 0, 29, 12);
         break;
     default:
     case 0:
-        skin_draw_pixmap(bmp_active_skin, obj, gc, monostereo->skin_index, 29, 12, 0, 0, 27, 12);
-        skin_draw_pixmap(bmp_active_skin, obj, gc, monostereo->skin_index, 0, 12, 27, 0, 29, 12);
+        skin_draw_pixmap(widget, bmp_active_skin, obj, gc, monostereo->skin_index, 29, 12, 0, 0, 27, 12);
+        skin_draw_pixmap(widget, bmp_active_skin, obj, gc, monostereo->skin_index, 0, 12, 27, 0, 29, 12);
         break;
     }
 
--- a/src/audacious/ui_skinned_monostereo.h	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/ui_skinned_monostereo.h	Fri Nov 16 05:32:56 2007 +0200
@@ -47,7 +47,6 @@
     gint             x, y, width, height;
     gint             num_channels;
     SkinPixmapId     skin_index;
-    GtkWidget        *fixed;
     gboolean         double_size;
 };
 
--- a/src/audacious/ui_skinned_number.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/ui_skinned_number.c	Fri Nov 16 05:32:56 2007 +0200
@@ -108,10 +108,9 @@
     number->num = 0;
     number->skin_index = si;
 
-    number->fixed = fixed;
     number->double_size = FALSE;
 
-    gtk_fixed_put(GTK_FIXED(number->fixed), GTK_WIDGET(number), number->x, number->y);
+    gtk_fixed_put(GTK_FIXED(fixed), GTK_WIDGET(number), number->x, number->y);
 
     return GTK_WIDGET(number);
 }
@@ -193,7 +192,7 @@
     if (number->num > 11 || number->num < 0)
         number->num = 10;
 
-    skin_draw_pixmap(bmp_active_skin, obj, gc,
+    skin_draw_pixmap(widget, bmp_active_skin, obj, gc,
                      number->skin_index, number->num * 9, 0,
                      0, 0, number->width, number->height);
 
@@ -227,6 +226,7 @@
 }
 
 void ui_skinned_number_set_number(GtkWidget *widget, gint num) {
+    g_return_if_fail(UI_SKINNED_IS_NUMBER(widget));
     UiSkinnedNumber *number = UI_SKINNED_NUMBER (widget);
 
     if (number->num == num)
@@ -235,3 +235,13 @@
     number->num = num;
     gtk_widget_queue_draw(GTK_WIDGET(number));
 }
+
+void ui_skinned_number_set_size(GtkWidget *widget, gint width, gint height) {
+    g_return_if_fail(UI_SKINNED_IS_NUMBER(widget));
+    UiSkinnedNumber *number = UI_SKINNED_NUMBER (widget);
+
+    number->width = width;
+    number->height = height;
+
+    gtk_widget_set_size_request(widget, width*(1+number->double_size), height*(1+number->double_size));
+}
--- a/src/audacious/ui_skinned_number.h	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/ui_skinned_number.h	Fri Nov 16 05:32:56 2007 +0200
@@ -42,7 +42,6 @@
     gint             num;
     gboolean         double_size;
     SkinPixmapId     skin_index;
-    GtkWidget        *fixed;
 };
 
 struct _UiSkinnedNumberClass {
@@ -53,6 +52,7 @@
 GtkWidget* ui_skinned_number_new (GtkWidget *fixed, gint x, gint y, SkinPixmapId si);
 GtkType ui_skinned_number_get_type(void);
 void ui_skinned_number_set_number(GtkWidget *widget, gint num);
+void ui_skinned_number_set_size(GtkWidget *widget, gint width, gint height);
 
 #ifdef __cplusplus
 }
--- a/src/audacious/ui_skinned_playlist.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/ui_skinned_playlist.c	Fri Nov 16 05:32:56 2007 +0200
@@ -72,7 +72,6 @@
 };
 
 struct _UiSkinnedPlaylistPrivate {
-    GtkWidget        *fixed;
     SkinPixmapId     skin_index;
     gint             width, height;
     gint             resize_width, resize_height;
@@ -179,10 +178,9 @@
     hs->y = y;
     priv->width = w;
     priv->height = h;
-    priv->fixed = fixed;
     priv->skin_index = SKIN_PLEDIT;
 
-    gtk_fixed_put(GTK_FIXED(priv->fixed), GTK_WIDGET(hs), hs->x, hs->y);
+    gtk_fixed_put(GTK_FIXED(fixed), GTK_WIDGET(hs), hs->x, hs->y);
 
     return GTK_WIDGET(hs);
 }
--- a/src/audacious/ui_skinned_playlist_slider.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/ui_skinned_playlist_slider.c	Fri Nov 16 05:32:56 2007 +0200
@@ -39,7 +39,6 @@
 };
 
 struct _UiSkinnedPlaylistSliderPrivate {
-    GtkWidget        *fixed;
     SkinPixmapId     skin_index;
     gint             width, height;
 
@@ -133,10 +132,9 @@
     hs->y = y;
     priv->width = 8;
     priv->height = h;
-    priv->fixed = fixed;
     priv->skin_index = SKIN_PLEDIT;
 
-    gtk_fixed_put(GTK_FIXED(priv->fixed), GTK_WIDGET(hs), hs->x, hs->y);
+    gtk_fixed_put(GTK_FIXED(fixed), GTK_WIDGET(hs), hs->x, hs->y);
 
     return GTK_WIDGET(hs);
 }
@@ -251,7 +249,7 @@
     }
 
     /* drawing knob */
-    skin_draw_pixmap(bmp_active_skin, obj, gc, priv->skin_index, ps->pressed ? 61 : 52, 53, 0, y, priv->width, 18);
+    skin_draw_pixmap(widget, bmp_active_skin, obj, gc, priv->skin_index, ps->pressed ? 61 : 52, 53, 0, y, priv->width, 18);
 
     gdk_draw_drawable(widget->window, gc, obj, 0, 0, 0, 0, priv->width, priv->height);
     g_object_unref(obj);
@@ -326,7 +324,8 @@
     if (priv->resize_height)
         gtk_widget_set_size_request(GTK_WIDGET(playlist_slider), priv->width, priv->height+priv->resize_height);
     if (priv->move_x)
-        gtk_fixed_move(GTK_FIXED(priv->fixed), GTK_WIDGET(playlist_slider), playlist_slider->x+priv->move_x, playlist_slider->y);
+        gtk_fixed_move(GTK_FIXED(gtk_widget_get_parent(GTK_WIDGET(playlist_slider))), GTK_WIDGET(playlist_slider),
+                       playlist_slider->x+priv->move_x, playlist_slider->y);
 
     gtk_widget_queue_draw(GTK_WIDGET(playlist_slider));
 }
--- a/src/audacious/ui_skinned_playstatus.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/ui_skinned_playstatus.c	Fri Nov 16 05:32:56 2007 +0200
@@ -104,10 +104,9 @@
     playstatus->x = x;
     playstatus->y = y;
 
-    playstatus->fixed = fixed;
     playstatus->double_size = FALSE;
 
-    gtk_fixed_put(GTK_FIXED(playstatus->fixed), GTK_WIDGET(playstatus), playstatus->x, playstatus->y);
+    gtk_fixed_put(GTK_FIXED(fixed), GTK_WIDGET(playstatus), playstatus->x, playstatus->y);
 
     return GTK_WIDGET(playstatus);
 }
@@ -190,20 +189,20 @@
     if (playstatus->status == STATUS_STOP && playstatus->buffering == TRUE)
         playstatus->buffering = FALSE;
     if (playstatus->status == STATUS_PLAY && playstatus->buffering == TRUE)
-        skin_draw_pixmap(bmp_active_skin, obj, gc, SKIN_PLAYPAUSE, 39, 0, 0, 0, 3, 9);
+        skin_draw_pixmap(widget, bmp_active_skin, obj, gc, SKIN_PLAYPAUSE, 39, 0, 0, 0, 3, playstatus->height);
     else if (playstatus->status == STATUS_PLAY)
-        skin_draw_pixmap(bmp_active_skin, obj, gc, SKIN_PLAYPAUSE, 36, 0, 0, 0, 3, 9);
+        skin_draw_pixmap(widget, bmp_active_skin, obj, gc, SKIN_PLAYPAUSE, 36, 0, 0, 0, 3, playstatus->height);
     else
-        skin_draw_pixmap(bmp_active_skin, obj, gc, SKIN_PLAYPAUSE, 27, 0, 0, 0, 2, 9);
+        skin_draw_pixmap(widget, bmp_active_skin, obj, gc, SKIN_PLAYPAUSE, 27, 0, 0, 0, 2, playstatus->height);
     switch (playstatus->status) {
     case STATUS_STOP:
-        skin_draw_pixmap(bmp_active_skin, obj, gc, SKIN_PLAYPAUSE, 18, 0, 2, 0, 9, 9);
+        skin_draw_pixmap(widget, bmp_active_skin, obj, gc, SKIN_PLAYPAUSE, 18, 0, 2, 0, 9, playstatus->height);
         break;
     case STATUS_PAUSE:
-        skin_draw_pixmap(bmp_active_skin, obj, gc, SKIN_PLAYPAUSE, 9, 0, 2, 0, 9, 9);
+        skin_draw_pixmap(widget, bmp_active_skin, obj, gc, SKIN_PLAYPAUSE, 9, 0, 2, 0, 9, playstatus->height);
         break;
     case STATUS_PLAY:
-        skin_draw_pixmap(bmp_active_skin, obj, gc, SKIN_PLAYPAUSE, 1, 0, 3, 0, 8, 9);
+        skin_draw_pixmap(widget, bmp_active_skin, obj, gc, SKIN_PLAYPAUSE, 1, 0, 3, 0, 8, playstatus->height);
         break;
     }
 
@@ -250,3 +249,13 @@
     playstatus->buffering = status;
     gtk_widget_queue_draw(widget);
 }
+
+void ui_skinned_playstatus_set_size(GtkWidget *widget, gint width, gint height) {
+    g_return_if_fail (UI_SKINNED_IS_PLAYSTATUS (widget));
+    UiSkinnedPlaystatus *playstatus = UI_SKINNED_PLAYSTATUS (widget);
+
+    playstatus->width = width;
+    playstatus->height = height;
+
+    gtk_widget_set_size_request(widget, width*(1+playstatus->double_size), height*(1+playstatus->double_size));
+}
--- a/src/audacious/ui_skinned_playstatus.h	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/ui_skinned_playstatus.h	Fri Nov 16 05:32:56 2007 +0200
@@ -48,7 +48,6 @@
     GtkWidget        widget;
 
     gint             x, y, width, height;
-    GtkWidget        *fixed;
     gboolean         double_size;
     PStatus          status;
     gboolean         buffering;
@@ -63,6 +62,7 @@
 GtkType ui_skinned_playstatus_get_type(void);
 void ui_skinned_playstatus_set_status(GtkWidget *widget, PStatus status);
 void ui_skinned_playstatus_set_buffering(GtkWidget *widget, gboolean status);
+void ui_skinned_playstatus_set_size(GtkWidget *widget, gint width, gint height);
 
 #ifdef __cplusplus
 }
--- a/src/audacious/ui_skinned_textbox.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/ui_skinned_textbox.c	Fri Nov 16 05:32:56 2007 +0200
@@ -47,7 +47,6 @@
 
 struct _UiSkinnedTextboxPrivate {
     SkinPixmapId     skin_index;
-    GtkWidget        *fixed;
     gboolean         double_size;
     gboolean         scroll_back;
     gint             nominal_y, nominal_height;
@@ -184,10 +183,9 @@
     priv->scroll_timeout = 0;
     priv->scroll_dummy = 0;
 
-    priv->fixed = fixed;
     priv->double_size = FALSE;
 
-    gtk_fixed_put(GTK_FIXED(priv->fixed), GTK_WIDGET(textbox), textbox->x, textbox->y);
+    gtk_fixed_put(GTK_FIXED(fixed), GTK_WIDGET(textbox), textbox->x, textbox->y);
 
     return GTK_WIDGET(textbox);
 }
@@ -431,7 +429,8 @@
     UiSkinnedTextboxPrivate *priv = UI_SKINNED_TEXTBOX_GET_PRIVATE(textbox);
 
     if (priv->move_x || priv->move_y)
-        gtk_fixed_move(GTK_FIXED(priv->fixed), GTK_WIDGET(textbox), textbox->x+priv->move_x, textbox->y+priv->move_y);
+        gtk_fixed_move(GTK_FIXED(gtk_widget_get_parent(GTK_WIDGET(textbox))), GTK_WIDGET(textbox),
+                       textbox->x+priv->move_x, textbox->y+priv->move_y);
 
     gtk_widget_queue_draw(GTK_WIDGET(textbox));
 }
@@ -707,7 +706,7 @@
         else
             textbox_handle_special_char(tmp, &x, &y);
 
-        skin_draw_pixmap(bmp_active_skin,
+        skin_draw_pixmap(GTK_WIDGET(textbox), bmp_active_skin,
                          priv->pixmap, gc, priv->skin_index,
                          x, y, i * bmp_active_skin->properties.textbox_bitmap_font_width, 0,
                          bmp_active_skin->properties.textbox_bitmap_font_width, 
--- a/src/audacious/ui_skinned_window.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audacious/ui_skinned_window.c	Fri Nov 16 05:32:56 2007 +0200
@@ -102,6 +102,8 @@
     window->x = event->x;
     window->y = event->y;
 
+    gtk_window_set_keep_above(GTK_WINDOW(widget), cfg.always_on_top);
+
     return FALSE;
 }
 
@@ -164,21 +166,21 @@
 
     switch (window->type) {
         case WINDOW_MAIN:
-            skin_draw_pixmap(bmp_active_skin, obj, gc, SKIN_MAIN, 0, 0, 0, 0, width, height);
+            skin_draw_pixmap(widget, bmp_active_skin, obj, gc, SKIN_MAIN, 0, 0, 0, 0, width, height);
             skin_draw_mainwin_titlebar(bmp_active_skin, obj, gc, cfg.player_shaded, focus || !cfg.dim_titlebar);
             break;
         case WINDOW_EQ:
-            skin_draw_pixmap(bmp_active_skin, obj, gc, SKIN_EQMAIN, 0, 0, 0, 0, width, height);
+            skin_draw_pixmap(widget, bmp_active_skin, obj, gc, SKIN_EQMAIN, 0, 0, 0, 0, width, height);
             if (focus || !cfg.dim_titlebar) {
                 if (!cfg.equalizer_shaded)
-                    skin_draw_pixmap(bmp_active_skin, obj, gc, SKIN_EQMAIN, 0, 134, 0, 0, width, 14);
+                    skin_draw_pixmap(widget, bmp_active_skin, obj, gc, SKIN_EQMAIN, 0, 134, 0, 0, width, 14);
                 else
-                    skin_draw_pixmap(bmp_active_skin, obj, gc, SKIN_EQ_EX, 0, 0, 0, 0, width, 14);
+                    skin_draw_pixmap(widget, bmp_active_skin, obj, gc, SKIN_EQ_EX, 0, 0, 0, 0, width, 14);
             } else {
                 if (!cfg.equalizer_shaded)
-                    skin_draw_pixmap(bmp_active_skin, obj, gc, SKIN_EQMAIN, 0, 149, 0, 0, width, 14);
+                    skin_draw_pixmap(widget, bmp_active_skin, obj, gc, SKIN_EQMAIN, 0, 149, 0, 0, width, 14);
                 else
-                    skin_draw_pixmap(bmp_active_skin, obj, gc, SKIN_EQ_EX, 0, 15, 0, 0, width, 14);
+                    skin_draw_pixmap(widget, bmp_active_skin, obj, gc, SKIN_EQ_EX, 0, 15, 0, 0, width, 14);
             }
             break;
         case WINDOW_PLAYLIST:
--- a/src/audtool/audtool.h	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audtool/audtool.h	Fri Nov 16 05:32:56 2007 +0200
@@ -107,6 +107,7 @@
 extern void equalizer_show(gint, gchar **);
 extern void show_preferences_window(gint, gchar **);
 extern void show_jtf_window(gint, gchar **);
+extern void show_filebrowser(gint, gchar **);
 extern void shutdown_audacious_server(gint, gchar **);
 extern void show_about_window(gint, gchar **);
 
@@ -120,5 +121,15 @@
 extern void test_get_skin(gint argc, gchar **argv);
 extern void test_set_skin(gint argc, gchar **argv);
 extern void test_get_info(gint argc, gchar **argv);
+extern void test_ins_url_string(gint argc, gchar **argv);
+extern void test_get_version(gint argc, gchar **argv);
+
+extern void test_get_eq(gint argc, gchar **argv);
+extern void test_get_eq_preamp(gint argc, gchar **argv);
+extern void test_get_eq_band(gint argc, gchar **argv);
+extern void test_set_eq(gint argc, gchar **argv);
+extern void test_set_eq_preamp(gint argc, gchar **argv);
+extern void test_set_eq_band(gint argc, gchar **argv);
+void test_equalizer_active(gint argc, gchar **argv);
 
 #endif
--- a/src/audtool/audtool_handlers_general.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audtool/audtool_handlers_general.c	Fri Nov 16 05:32:56 2007 +0200
@@ -54,7 +54,7 @@
 	{
 		audtool_whine("invalid parameters for %s.", argv[0]);
 		audtool_whine("syntax: %s <level>", argv[0]);
-		return;
+		exit(1);
 	}
 
 	current_volume = audacious_remote_get_main_volume(dbus_proxy);
@@ -74,68 +74,167 @@
 
 void mainwin_show(gint argc, gchar **argv)
 {
-	if (argc > 1)
-	{
-		if (!g_ascii_strcasecmp(argv[1], "on")) {
-			audacious_remote_main_win_toggle(dbus_proxy, TRUE);
-			return;
-		}
-		else if (!g_ascii_strcasecmp(argv[1], "off")) {
-			audacious_remote_main_win_toggle(dbus_proxy, FALSE);
-			return;
-		}
-	}
-	audtool_whine("invalid parameter for %s.", argv[0]);
-	audtool_whine("syntax: %s <on/off>", argv[0]);
+	if (argc < 2) {
+        audtool_whine("invalid parameter for %s.", argv[0]);
+        audtool_whine("syntax: %s <on/off>", argv[0]);
+        exit(1);
+    }
+
+    if (!g_ascii_strcasecmp(argv[1], "on")) {
+        audacious_remote_main_win_toggle(dbus_proxy, TRUE);
+        return;
+    }
+    else if (!g_ascii_strcasecmp(argv[1], "off")) {
+        audacious_remote_main_win_toggle(dbus_proxy, FALSE);
+        return;
+    }
 }
 
 void playlist_show(gint argc, gchar **argv)
 {
-	if (argc > 1)
-	{
-		if (!g_ascii_strcasecmp(argv[1], "on")) {
-			audacious_remote_pl_win_toggle(dbus_proxy, TRUE);
-			return;
-		}
-		else if (!g_ascii_strcasecmp(argv[1], "off")) {
-			audacious_remote_pl_win_toggle(dbus_proxy, FALSE);
-			return;
-		}
-	}
-	audtool_whine("invalid parameter for %s.", argv[0]);
-	audtool_whine("syntax: %s <on/off>", argv[0]);
+	if (argc < 2) {
+        audtool_whine("invalid parameter for %s.", argv[0]);
+        audtool_whine("syntax: %s <on/off>", argv[0]);
+        exit(1);
+    }
+
+    if (!g_ascii_strcasecmp(argv[1], "on")) {
+        audacious_remote_pl_win_toggle(dbus_proxy, TRUE);
+        return;
+    }
+    else if (!g_ascii_strcasecmp(argv[1], "off")) {
+        audacious_remote_pl_win_toggle(dbus_proxy, FALSE);
+        return;
+    }
 }
 
 void equalizer_show(gint argc, gchar **argv)
 {
-	if (argc > 1)
-	{
-		if (!g_ascii_strcasecmp(argv[1] ,"on")) {
-			audacious_remote_eq_win_toggle(dbus_proxy, TRUE);
-			return;
-		}
-		else if (!g_ascii_strcasecmp(argv[1] ,"off")) {
-			audacious_remote_eq_win_toggle(dbus_proxy, FALSE);
-			return;
-		}
-	}
-	audtool_whine("invalid parameter for %s.", argv[0]);
-	audtool_whine("syntax: %s <on/off>", argv[0]);
+	if (argc < 2) {
+        audtool_whine("invalid parameter for %s.", argv[0]);
+        audtool_whine("syntax: %s <on/off>", argv[0]);
+        exit(1);
+    }
+
+    if (!g_ascii_strcasecmp(argv[1] ,"on")) {
+        audacious_remote_eq_win_toggle(dbus_proxy, TRUE);
+        return;
+    }
+    else if (!g_ascii_strcasecmp(argv[1] ,"off")) {
+        audacious_remote_eq_win_toggle(dbus_proxy, FALSE);
+        return;
+    }
 }
 
 void show_preferences_window(gint argc, gchar **argv)
 {
-	audacious_remote_show_prefs_box(dbus_proxy);
+    gboolean show = TRUE;
+
+	if (argc < 2) {
+#if 0
+        audtool_whine("invalid parameter for %s.", argv[0]);
+        audtool_whine("syntax: %s <on/off>", argv[0]);
+        exit(1);
+#else
+        audacious_remote_toggle_prefs_box(dbus_proxy, show);
+        return;
+#endif
+    }
+
+    if (!g_ascii_strcasecmp(argv[1], "on"))
+        show = TRUE;
+    else if (!g_ascii_strcasecmp(argv[1], "off"))
+        show = FALSE;
+    else {
+        audtool_whine("invalid parameter for %s.", argv[0]);
+        audtool_whine("syntax: %s <on/off>", argv[0]);
+        exit (1);
+    }
+
+	audacious_remote_toggle_prefs_box(dbus_proxy, show);
 }
 
 void show_about_window(gint argc, gchar **argv)
 {
-	audacious_remote_show_about_box(dbus_proxy);
+    gboolean show = TRUE;
+
+	if (argc < 2) {
+#if 0
+        audtool_whine("invalid parameter for %s.", argv[0]);
+        audtool_whine("syntax: %s <on/off>", argv[0]);
+        exit(1);
+#else
+        audacious_remote_toggle_about_box(dbus_proxy, show);
+        return;
+#endif
+    }
+
+    if (!g_ascii_strcasecmp(argv[1], "on"))
+        show = TRUE;
+    else if (!g_ascii_strcasecmp(argv[1], "off"))
+        show = FALSE;
+    else {
+        audtool_whine("invalid parameter for %s.", argv[0]);
+        audtool_whine("syntax: %s <on/off>", argv[0]);
+        exit (1);
+    }
+
+	audacious_remote_toggle_about_box(dbus_proxy, show);
 }
 
 void show_jtf_window(gint argc, gchar **argv)
 {
-	audacious_remote_show_jtf_box(dbus_proxy);
+    gboolean show = TRUE;
+
+	if (argc < 2) {
+#if 0
+        audtool_whine("invalid parameter for %s.", argv[0]);
+        audtool_whine("syntax: %s <on/off>", argv[0]);
+        exit(1);
+#else
+        audacious_remote_toggle_jtf_box(dbus_proxy, show);
+        return;
+#endif
+    }
+    if (!g_ascii_strcasecmp(argv[1], "on"))
+        show = TRUE;
+    else if (!g_ascii_strcasecmp(argv[1], "off"))
+        show = FALSE;
+    else {
+        audtool_whine("invalid parameter for %s.", argv[0]);
+        audtool_whine("syntax: %s <on/off>", argv[0]);
+        exit (1);
+    }
+
+	audacious_remote_toggle_jtf_box(dbus_proxy, show);
+}
+
+void show_filebrowser(gint argc, gchar **argv)
+{
+    gboolean show = TRUE;
+
+	if (argc < 2) {
+#if 0
+        audtool_whine("invalid parameter for %s.", argv[0]);
+        audtool_whine("syntax: %s <on/off>", argv[0]);
+        exit(1);
+#else
+        audacious_remote_toggle_filebrowser(dbus_proxy, show);
+        return;
+#endif
+    }
+
+    if (!g_ascii_strcasecmp(argv[1], "on"))
+        show = TRUE;
+    else if (!g_ascii_strcasecmp(argv[1], "off"))
+        show = FALSE;
+    else {
+        audtool_whine("invalid parameter for %s.", argv[0]);
+        audtool_whine("syntax: %s <on/off>", argv[0]);
+        exit (1);
+    }
+
+	audacious_remote_toggle_filebrowser(dbus_proxy, show);
 }
 
 void shutdown_audacious_server(gint argc, gchar **argv)
@@ -155,6 +254,7 @@
 			audtool_report("   %-34s - %s", handlers[i].name, handlers[i].desc);
 	}
 
+    audtool_report("");
 	audtool_report("Handlers may be prefixed with `--' (GNU-style long-options) or not, your choice.");
 	audtool_report("Report bugs to http://bugs-meta.atheme.org/");
 }
--- a/src/audtool/audtool_handlers_playback.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audtool/audtool_handlers_playback.c	Fri Nov 16 05:32:56 2007 +0200
@@ -118,7 +118,7 @@
 	{
 		audtool_whine("invalid parameters for %s.", argv[0]);
 		audtool_whine("syntax: %s <position>", argv[0]);
-		return;
+		exit(1);
 	}
 
 	audacious_remote_jump_to_time(dbus_proxy, atoi(argv[1]) * 1000);
@@ -132,7 +132,7 @@
 	{
 		audtool_whine("invalid parameters for %s.", argv[0]);
 		audtool_whine("syntax: %s <position>", argv[0]);
-		return;
+		exit(1);
 	}
 
 	oldtime = audacious_remote_get_output_time(dbus_proxy);
--- a/src/audtool/audtool_handlers_playlist.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audtool/audtool_handlers_playlist.c	Fri Nov 16 05:32:56 2007 +0200
@@ -53,7 +53,7 @@
 	{
 		audtool_whine("invalid parameters for %s.", argv[0]);
 		audtool_whine("syntax: %s <url>", argv[0]);
-		return;
+		exit(1);
 	}
 
 	audacious_remote_playlist_add_url_string(dbus_proxy, argv[1]);
@@ -67,7 +67,7 @@
 	{
 		audtool_whine("invalid parameters for %s.", argv[0]);
 		audtool_whine("syntax: %s <position>", argv[0]);
-		return;
+		exit(1);
 	}
 
 	playpos = atoi(argv[1]);
@@ -99,7 +99,7 @@
 	{
 		audtool_whine("invalid parameters for %s.", argv[0]);
 		audtool_whine("syntax: %s <position>", argv[0]);
-		return;
+		exit(1);
 	}
 
 	playpos = atoi(argv[1]);
@@ -107,7 +107,7 @@
 	if (playpos < 1 || playpos > audacious_remote_get_playlist_length(dbus_proxy))
 	{
 		audtool_whine("invalid playlist position %d", playpos);
-		return;
+		exit(1);
 	}
 
 	song = audacious_remote_get_playlist_title(dbus_proxy, playpos - 1);
@@ -124,7 +124,7 @@
 	{
 		audtool_whine("invalid parameters for %s.", argv[0]);
 		audtool_whine("syntax: %s <position>", argv[0]);
-		return;
+		exit(1);
 	}
 
 	playpos = atoi(argv[1]);
@@ -132,7 +132,7 @@
 	if (playpos < 1 || playpos > audacious_remote_get_playlist_length(dbus_proxy))
 	{
 		audtool_whine("invalid playlist position %d", playpos);
-		return;
+		exit(1);
 	}
 
 	frames = audacious_remote_get_playlist_time(dbus_proxy, playpos - 1);
@@ -149,7 +149,7 @@
 	{
 		audtool_whine("invalid parameters for %s.", argv[0]);
 		audtool_whine("syntax: %s <position>", argv[0]);
-		return;
+		exit(1);
 	}
 
 	playpos = atoi(argv[1]);
@@ -157,7 +157,7 @@
 	if (playpos < 1 || playpos > audacious_remote_get_playlist_length(dbus_proxy))
 	{
 		audtool_whine("invalid playlist position %d", playpos);
-		return;
+		exit(1);
 	}
 
 	frames = audacious_remote_get_playlist_time(dbus_proxy, playpos - 1);
@@ -174,7 +174,7 @@
 	{
 		audtool_whine("invalid parameters for %s.", argv[0]);
 		audtool_whine("syntax: %s <position>", argv[0]);
-		return;
+		exit(1);
 	}
 
 	playpos = atoi(argv[1]);
@@ -182,7 +182,7 @@
 	if (playpos < 1 || playpos > audacious_remote_get_playlist_length(dbus_proxy))
 	{
 		audtool_whine("invalid playlist position %d", playpos);
-		return;
+		exit(1);
 	}
 
 	frames = audacious_remote_get_playlist_time(dbus_proxy, playpos - 1);
@@ -257,7 +257,7 @@
 	{
 		audtool_whine("invalid parameters for %s.", argv[0]);
 		audtool_whine("syntax: %s <position>", argv[0]);
-		return;
+		exit(1);
 	}
 
 	i = atoi(argv[1]);
@@ -265,7 +265,7 @@
 	if (i < 1 || i > audacious_remote_get_playlist_length(dbus_proxy))
 	{
 		audtool_whine("invalid playlist position %d", i);
-		return;
+		exit(1);
 	}
 
 	audtool_report("%s", audacious_remote_get_playlist_file(dbus_proxy, i - 1));
@@ -279,7 +279,7 @@
 	{
 		audtool_whine("invalid parameters for %s.", argv[0]);
 		audtool_whine("syntax: %s <position>", argv[0]);
-		return;
+		exit(1);
 	}
 
 	i = atoi(argv[1]);
@@ -287,7 +287,7 @@
 	if (i < 1 || i > audacious_remote_get_playlist_length(dbus_proxy))
 	{
 		audtool_whine("invalid playlist position %d", i);
-		return;
+		exit(1);
 	}
 
 	audacious_remote_set_playlist_pos(dbus_proxy, i - 1);
@@ -295,6 +295,7 @@
 
 void playlist_clear(gint argc, gchar **argv)
 {
+	audacious_remote_stop(dbus_proxy);
 	audacious_remote_playlist_clear(dbus_proxy);
 }
 
@@ -339,17 +340,17 @@
 void playlist_tuple_field_data(gint argc, gchar **argv)
 {
 	gint i;
-	gpointer data;
+	gchar *data;
 
 	if (argc < 3)
 	{
 		audtool_whine("invalid parameters for %s.", argv[0]);
 		audtool_whine("syntax: %s <fieldname> <position>", argv[0]);
-		audtool_whine("  - fieldname example choices: performer, album_name,");
-		audtool_whine("      track_name, track_number, year, date, genre, comment,");
-		audtool_whine("      file_name, file_ext, file_path, length, formatter,");
-		audtool_whine("      custom, mtime");
-		return;
+		audtool_whine("  - fieldname example choices include but are not limited to:");
+		audtool_whine("      artist, album, title, track_number, year, date,");
+		audtool_whine("      genre, comment, file_name, file_ext, file_path,");
+		audtool_whine("      length, formatter, custom, mtime");
+		exit(1);
 	}
 
 	i = atoi(argv[2]);
@@ -357,7 +358,7 @@
 	if (i < 1 || i > audacious_remote_get_playlist_length(dbus_proxy))
 	{
 		audtool_whine("invalid playlist position %d", i);
-		return;
+		exit(1);
 	}
 
 	if (!(data = audacious_get_tuple_field_data(dbus_proxy, argv[1], i - 1)))
@@ -365,14 +366,7 @@
 		return;
 	}
 	
-	if (!g_ascii_strcasecmp(argv[1], "track_number") || !g_ascii_strcasecmp(argv[1], "year") || !g_ascii_strcasecmp(argv[1], "length") || !g_ascii_strcasecmp(argv[1], "mtime"))
-	{
-		if (*(gint *)data > 0)
-		{
-			audtool_report("%d", *(gint *)data);
-		}
-		return;
-	}
+	audtool_report("%s", data);
 
-	audtool_report("%s", (gchar *)data);
+	g_free(data);
 }
--- a/src/audtool/audtool_handlers_playqueue.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audtool/audtool_handlers_playqueue.c	Fri Nov 16 05:32:56 2007 +0200
@@ -45,7 +45,7 @@
 	{
 		audtool_whine("invalid parameters for %s.", argv[0]);
 		audtool_whine("syntax: %s <position>", argv[0]);
-		return;
+		exit(1);
 	}
 
 	i = atoi(argv[1]);
@@ -53,7 +53,7 @@
 	if (i < 1 || i > audacious_remote_get_playlist_length(dbus_proxy))
 	{
 		audtool_whine("invalid playlist position %d", i);
-		return;
+		exit(1);
 	}
 
 	if (!(audacious_remote_playqueue_is_queued(dbus_proxy, i - 1)))
@@ -68,7 +68,7 @@
 	{
 		audtool_whine("invalid parameters for %s.", argv[0]);
 		audtool_whine("syntax: %s <position>", argv[0]);
-		return;
+		exit(1);
 	}
 
 	i = atoi(argv[1]);
@@ -76,7 +76,7 @@
 	if (i < 1 || i > audacious_remote_get_playlist_length(dbus_proxy))
 	{
 		audtool_whine("invalid playlist position %d", i);
-		return;
+		exit(1);
 	}
 
 	if (audacious_remote_playqueue_is_queued(dbus_proxy, i - 1))
@@ -91,7 +91,7 @@
 	{
 		audtool_whine("invalid parameters for playqueue-is-queued.", argv[0]);
 		audtool_whine("syntax: %s playqueue-is-queued <position>", argv[0]);
-		return;
+		exit(1);
 	}
 
 	i = atoi(argv[1]);
@@ -99,7 +99,7 @@
 	if (i < 1 || i > audacious_remote_get_playlist_length(dbus_proxy))
 	{
 		audtool_whine("invalid playlist position %d", i);
-		return;
+		exit(1);
 	}
     if(audacious_remote_playqueue_is_queued(dbus_proxy, i - 1)) {
         audtool_report("OK");
@@ -117,7 +117,7 @@
 	{
 		audtool_whine("invalid parameters for %s.", argv[0]);
 		audtool_whine("syntax: %s <position>", argv[0]);
-		return;
+		exit(1);
 	}
 
 	i = atoi(argv[1]);
@@ -125,7 +125,7 @@
 	if (i < 1 || i > audacious_remote_get_playlist_length(dbus_proxy))
 	{
 		audtool_whine("invalid playlist position %d", i);
-		return;
+		exit(1);
 	}
 
 	pos = audacious_remote_get_playqueue_queue_position(dbus_proxy, i - 1) + 1;
@@ -144,7 +144,7 @@
 	{
 		audtool_whine("invalid parameters for %s.", argv[0]);
 		audtool_whine("syntax: %s <position>", argv[0]);
-		return;
+		exit(1);
 	}
 
 	i = atoi(argv[1]);
@@ -152,7 +152,7 @@
 	if (i < 1 || i > audacious_remote_get_playqueue_length(dbus_proxy))
 	{
 		audtool_whine("invalid playlist position %d", i);
-		return;
+		exit(1);
 	}
 
 	pos = audacious_remote_get_playqueue_list_position(dbus_proxy, i - 1) + 1;
--- a/src/audtool/audtool_handlers_test.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audtool/audtool_handlers_test.c	Fri Nov 16 05:32:56 2007 +0200
@@ -44,61 +44,51 @@
 
 void test_enqueue_to_temp(gint argc, gchar **argv)
 {
-    gint playpos;
-
-	if (argc < 2)
-	{
-		audtool_whine("invalid parameters for %s.", argv[0]);
-		audtool_whine("syntax: %s <position>", argv[0]);
-		return;
-	}
+    if (argc < 2)
+    {
+        audtool_whine("invalid parameters for %s.", argv[0]);
+        audtool_whine("syntax: %s <url>", argv[0]);
+        exit(1);
+    }
 
-	playpos = atoi(argv[1]);
-
-	if (playpos < 1 || playpos > audacious_remote_get_playlist_length(dbus_proxy))
-	{
-		audtool_whine("invalid playlist position %d", playpos);
-		return;
-	}
-
-    audacious_remote_get_playqueue_queue_position(dbus_proxy, playpos - 1); // xxx playpos - 1?
+    audacious_remote_playlist_enqueue_to_temp(dbus_proxy, argv[1]);
 }
 
 void test_toggle_aot(gint argc, gchar **argv)
 {
-    gboolean ontop;
+    if (argc < 2)
+    {
+        audtool_whine("invalid parameters for %s.", argv[0]);
+        audtool_whine("syntax: %s <on/off>", argv[0]);
+        exit(1);
+    }
 
-	if (argc < 2)
-	{
-		audtool_whine("invalid parameters for %s.", argv[0]);
-		audtool_whine("syntax: %s <boolean>", argv[0]);
-		return;
-	}
-
-	ontop = (gboolean)atoi(argv[1]);
-    printf("ontop = %d\n", ontop);
-    audacious_remote_toggle_aot(dbus_proxy, ontop);
+    if (!g_ascii_strcasecmp(argv[1], "on")) {
+        audacious_remote_toggle_aot(dbus_proxy, TRUE);
+        return;
+    }
+    else if (!g_ascii_strcasecmp(argv[1], "off")) {
+        audacious_remote_toggle_aot(dbus_proxy, FALSE);
+        return;
+    }
 }
 
 void test_get_skin(gint argc, gchar **argv)
 {
     gchar *skin = NULL;
     skin = audacious_remote_get_skin(dbus_proxy);
-    printf("skin = %s\n", skin);
+    audtool_report("%s", skin);
     g_free(skin);
 }
 
 void test_set_skin(gint argc, gchar **argv)
 {
-	if (argc < 2)
-	{
-		audtool_whine("invalid parameters for %s.", argv[0]);
-		audtool_whine("syntax: %s <skin>", argv[0]);
-		return;
-	}
-    printf("argc = %d\n", argc);
-    printf("skin = %p\n", argv[1]);
-
+    if (argc < 2)
+    {
+        audtool_whine("invalid parameters for %s.", argv[0]);
+        audtool_whine("syntax: %s <skin>", argv[0]);
+        exit(1);
+    }
 
     if(!argv[1] || !strcmp(argv[1], ""))
        return;
@@ -111,350 +101,150 @@
     gint rate, freq, nch;
 
     audacious_remote_get_info(dbus_proxy, &rate, &freq, &nch);
-    printf("rate = %d freq = %d nch = %d\n", rate, freq, nch);
-}
-
-
-
-
-#if 0
-void playlist_reverse(gint argc, gchar **argv)
-{
-	audacious_remote_playlist_prev(dbus_proxy);
-}
-
-void playlist_advance(gint argc, gchar **argv)
-{
-	audacious_remote_playlist_next(dbus_proxy);
-}
-
-void playlist_add_url_string(gint argc, gchar **argv)
-{
-	if (argc < 2)
-	{
-		audtool_whine("invalid parameters for %s.", argv[0]);
-		audtool_whine("syntax: %s <url>", argv[0]);
-		return;
-	}
-
-	audacious_remote_playlist_add_url_string(dbus_proxy, argv[1]);
+    audtool_report("rate = %d freq = %d nch = %d", rate, freq, nch);
 }
 
-void playlist_delete(gint argc, gchar **argv)
+void test_ins_url_string(gint argc, gchar **argv)
 {
-	gint playpos;
+    gint pos = -1;
 
-	if (argc < 2)
-	{
-		audtool_whine("invalid parameters for %s.", argv[0]);
-		audtool_whine("syntax: %s <position>", argv[0]);
-		return;
-	}
+    if (argc < 3)
+    {
+        audtool_whine("invalid parameters for %s.", argv[0]);
+        audtool_whine("syntax: %s <url> <position>", argv[0]);
+        exit(1);
+    }
 
-	playpos = atoi(argv[1]);
-
-	if (playpos < 1 || playpos > audacious_remote_get_playlist_length(dbus_proxy))
-	{
-		audtool_whine("invalid playlist position %d", playpos);
-		return;
-	}
-
-	audacious_remote_playlist_delete(dbus_proxy, playpos - 1);
+    pos = atoi(argv[2]) - 1;
+    if(pos >= 0)
+        audacious_remote_playlist_ins_url_string(dbus_proxy, argv[1], pos);
 }
 
-void playlist_length(gint argc, gchar **argv)
+void test_get_version(gint argc, gchar **argv)
 {
-	gint i;
-
-	i = audacious_remote_get_playlist_length(dbus_proxy);
-
-	audtool_report("%d", i);
+    gchar *version = NULL;
+    version = audacious_remote_get_version(dbus_proxy);
+    if(version)
+        audtool_report("Audacious %s", version);
+    g_free(version);
 }
 
-void playlist_song(gint argc, gchar **argv)
+void test_get_eq(gint argc, gchar **argv)
 {
-	gint playpos;
-	gchar *song;
+    double preamp;
+    GArray *bands;
+    int i;
 
-	if (argc < 2)
-	{
-		audtool_whine("invalid parameters for %s.", argv[0]);
-		audtool_whine("syntax: %s <position>", argv[0]);
-		return;
-	}
+    audacious_remote_get_eq(dbus_proxy, &preamp, &bands);
 
-	playpos = atoi(argv[1]);
+    audtool_report("preamp = %.2f", preamp);
+    for(i=0; i<10; i++){
+        printf("%.2f ", g_array_index(bands, gdouble, i));
+    }
+    printf("\n");
+    g_array_free(bands, TRUE);
+}
 
-	if (playpos < 1 || playpos > audacious_remote_get_playlist_length(dbus_proxy))
-	{
-		audtool_whine("invalid playlist position %d", playpos);
-		return;
-	}
-
-	song = audacious_remote_get_playlist_title(dbus_proxy, playpos - 1);
-
-	audtool_report("%s", song);
+void test_get_eq_preamp(gint argc, gchar **argv)
+{
+    audtool_report("preamp = %.2f", audacious_remote_get_eq_preamp(dbus_proxy));
 }
 
-
-void playlist_song_length(gint argc, gchar **argv)
+void test_get_eq_band(gint argc, gchar **argv)
 {
-	gint playpos, frames, length;
-
-	if (argc < 2)
-	{
-		audtool_whine("invalid parameters for %s.", argv[0]);
-		audtool_whine("syntax: %s <position>", argv[0]);
-		return;
-	}
-
-	playpos = atoi(argv[1]);
+    int band;
 
-	if (playpos < 1 || playpos > audacious_remote_get_playlist_length(dbus_proxy))
-	{
-		audtool_whine("invalid playlist position %d", playpos);
-		return;
-	}
-
-	frames = audacious_remote_get_playlist_time(dbus_proxy, playpos - 1);
-	length = frames / 1000;
-
-	audtool_report("%d:%.2d", length / 60, length % 60);
-}
-
-void playlist_song_length_seconds(gint argc, gchar **argv)
-{
-	gint playpos, frames, length;
-
-	if (argc < 2)
-	{
-		audtool_whine("invalid parameters for %s.", argv[0]);
-		audtool_whine("syntax: %s <position>", argv[0]);
-		return;
-	}
+    if (argc < 2)
+    {
+        audtool_whine("invalid parameters for %s.", argv[0]);
+        audtool_whine("syntax: %s <band>", argv[0]);
+        exit(1);
+    }
 
-	playpos = atoi(argv[1]);
-
-	if (playpos < 1 || playpos > audacious_remote_get_playlist_length(dbus_proxy))
-	{
-		audtool_whine("invalid playlist position %d", playpos);
-		return;
-	}
-
-	frames = audacious_remote_get_playlist_time(dbus_proxy, playpos - 1);
-	length = frames / 1000;
-
-	audtool_report("%d", length);
-}
-
-void playlist_song_length_frames(gint argc, gchar **argv)
-{
-	gint playpos, frames;
+    band = atoi(argv[1]);
 
-	if (argc < 2)
-	{
-		audtool_whine("invalid parameters for %s.", argv[0]);
-		audtool_whine("syntax: %s <position>", argv[0]);
-		return;
-	}
-
-	playpos = atoi(argv[1]);
-
-	if (playpos < 1 || playpos > audacious_remote_get_playlist_length(dbus_proxy))
-	{
-		audtool_whine("invalid playlist position %d", playpos);
-		return;
-	}
-
-	frames = audacious_remote_get_playlist_time(dbus_proxy, playpos - 1);
-
-	audtool_report("%d", frames);
+    if (band < 0 || band > 9)
+    {
+        audtool_whine("band number out of range");
+        exit(1);
+    }
+    
+    audtool_report("band %d = %.2f", band, audacious_remote_get_eq_band(dbus_proxy, band));
+    
 }
 
-void playlist_display(gint argc, gchar **argv)
+void test_set_eq(gint argc, gchar **argv)
 {
-	gint i, ii, frames, length, total;
-	gchar *songname;
-	gchar *fmt = NULL, *p;
-	gint column;
-
-	i = audacious_remote_get_playlist_length(dbus_proxy);
-
-	audtool_report("%d track%s.", i, i != 1 ? "s" : "");
-
-	total = 0;
-
-	for (ii = 0; ii < i; ii++)
-	{
-		songname = audacious_remote_get_playlist_title(dbus_proxy, ii);
-		frames = audacious_remote_get_playlist_time(dbus_proxy, ii);
-		length = frames / 1000;
-		total += length;
-
-		/* adjust width for multi byte characters */
-		column = 60;
-		if(songname){
-			p = songname;
-			while(*p){
-				gint stride;
-				stride = g_utf8_next_char(p) - p;
-				if(g_unichar_iswide(g_utf8_get_char(p))
-#if ( (GLIB_MAJOR_VERSION == 2) && (GLIB_MINOR_VERSION >= 12) )
-				   || g_unichar_iswide_cjk(g_utf8_get_char(p))
-#endif
-                                ){
-					column += (stride - 2);
-				}
-				else {
-					column += (stride - 1);
-				}
-				p = g_utf8_next_char(p);
-			}
+    gdouble preamp;
+    GArray *bands = g_array_sized_new(FALSE, FALSE, sizeof(gdouble), 10);
+    int i;
 
-		}
-
-		fmt = g_strdup_printf("%%4d | %%-%ds | %%d:%%.2d", column);
-		audtool_report(fmt, ii + 1, songname, length / 60, length % 60);
-		g_free(fmt);
-	}
-
-	audtool_report("Total length: %d:%.2d", total / 60, total % 60);
-}
-
-void playlist_position(gint argc, gchar **argv)
-{
-	gint i;
-
-	i = audacious_remote_get_playlist_pos(dbus_proxy);
-
-	audtool_report("%d", i + 1);
-}
+    if (argc < 12)
+    {
+        audtool_whine("invalid parameters for %s.", argv[0]);
+        audtool_whine("syntax: %s <preamp> <band0> <band1> <band2> <band3> <band4> <band5> <band6> <band7> <band8> <band9>", argv[0]);
+        exit(1);
+    }
 
-void playlist_song_filename(gint argc, gchar **argv)
-{
-	gint i;
-
-	if (argc < 2)
-	{
-		audtool_whine("invalid parameters for %s.", argv[0]);
-		audtool_whine("syntax: %s <position>", argv[0]);
-		return;
-	}
-
-	i = atoi(argv[1]);
-
-	if (i < 1 || i > audacious_remote_get_playlist_length(dbus_proxy))
-	{
-		audtool_whine("invalid playlist position %d", i);
-		return;
-	}
-
-	audtool_report("%s", audacious_remote_get_playlist_file(dbus_proxy, i - 1));
+    preamp = atof(argv[1]);
+    
+    for(i=0; i<10; i++){
+        gdouble val = atof(argv[i+2]);
+        g_array_append_val(bands, val);
+    }
+    
+    audacious_remote_set_eq(dbus_proxy, preamp, bands);
 }
 
-void playlist_jump(gint argc, gchar **argv)
+void test_set_eq_preamp(gint argc, gchar **argv)
 {
-	gint i;
-
-	if (argc < 2)
-	{
-		audtool_whine("invalid parameters for %s.", argv[0]);
-		audtool_whine("syntax: %s <position>", argv[0]);
-		return;
-	}
-
-	i = atoi(argv[1]);
-
-	if (i < 1 || i > audacious_remote_get_playlist_length(dbus_proxy))
-	{
-		audtool_whine("invalid playlist position %d", i);
-		return;
-	}
-
-	audacious_remote_set_playlist_pos(dbus_proxy, i - 1);
-}
+    gdouble preamp;
 
-void playlist_clear(gint argc, gchar **argv)
-{
-	audacious_remote_playlist_clear(dbus_proxy);
-}
+    if (argc < 2)
+    {
+        audtool_whine("invalid parameters for %s.", argv[0]);
+        audtool_whine("syntax: %s <preamp>", argv[0]);
+        exit(1);
+    }
 
-void playlist_repeat_status(gint argc, gchar **argv)
-{
-	if (audacious_remote_is_repeat(dbus_proxy))
-	{
-		audtool_report("on");
-		return;
-	}
-	else
-	{
-		audtool_report("off");
-		return;
-	}
-}
+    preamp = atof(argv[1]);
 
-void playlist_repeat_toggle(gint argc, gchar **argv)
-{
-	audacious_remote_toggle_repeat(dbus_proxy);
+    audacious_remote_set_eq_preamp(dbus_proxy, preamp);
 }
 
-void playlist_shuffle_status(gint argc, gchar **argv)
+void test_set_eq_band(gint argc, gchar **argv)
 {
-	if (audacious_remote_is_shuffle(dbus_proxy))
-	{
-		audtool_report("on");
-		return;
-	}
-	else
-	{
-		audtool_report("off");
-		return;
-	}
-}
+    int band;
+    gdouble preamp;
 
-void playlist_shuffle_toggle(gint argc, gchar **argv)
-{
-	audacious_remote_toggle_shuffle(dbus_proxy);
+    if (argc < 3)
+    {
+        audtool_whine("invalid parameters for %s.", argv[0]);
+        audtool_whine("syntax: %s <band> <value>", argv[0]);
+        exit(1);
+    }
+
+    band = atoi(argv[1]);
+    preamp = atof(argv[2]);
+
+    audacious_remote_set_eq_band(dbus_proxy, band, preamp);
 }
 
-void playlist_tuple_field_data(gint argc, gchar **argv)
+void test_equalizer_active(gint argc, gchar **argv)
 {
-	gint i;
-	gpointer data;
-
-	if (argc < 3)
-	{
-		audtool_whine("invalid parameters for %s.", argv[0]);
-		audtool_whine("syntax: %s <fieldname> <position>", argv[0]);
-		audtool_whine("  - fieldname example choices: performer, album_name,");
-		audtool_whine("      track_name, track_number, year, date, genre, comment,");
-		audtool_whine("      file_name, file_ext, file_path, length, formatter,");
-		audtool_whine("      custom, mtime");
-		return;
-	}
-
-	i = atoi(argv[2]);
+    if (argc < 2)
+    {
+        audtool_whine("invalid parameters for %s.", argv[0]);
+        audtool_whine("syntax: %s <on/off>", argv[0]);
+        exit(1);
+    }
 
-	if (i < 1 || i > audacious_remote_get_playlist_length(dbus_proxy))
-	{
-		audtool_whine("invalid playlist position %d", i);
-		return;
-	}
-
-	if (!(data = audacious_get_tuple_field_data(dbus_proxy, argv[1], i - 1)))
-	{
-		return;
-	}
-	
-	if (!g_ascii_strcasecmp(argv[1], "track_number") || !g_ascii_strcasecmp(argv[1], "year") || !g_ascii_strcasecmp(argv[1], "length") || !g_ascii_strcasecmp(argv[1], "mtime"))
-	{
-		if (*(gint *)data > 0)
-		{
-			audtool_report("%d", *(gint *)data);
-		}
-		return;
-	}
-
-	audtool_report("%s", (gchar *)data);
+    if (!g_ascii_strcasecmp(argv[1], "on")) {
+        audacious_remote_eq_activate(dbus_proxy, TRUE);
+        return;
+    }
+    else if (!g_ascii_strcasecmp(argv[1], "off")) {
+        audacious_remote_eq_activate(dbus_proxy, FALSE);
+        return;
+    }
 }
-#endif
--- a/src/audtool/audtool_handlers_vitals.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audtool/audtool_handlers_vitals.c	Fri Nov 16 05:32:56 2007 +0200
@@ -161,17 +161,17 @@
 
 void get_current_song_tuple_field_data(gint argc, gchar **argv)
 {
-	gpointer data;
+	gchar *data;
 
 	if (argc < 2)
 	{
 		audtool_whine("invalid parameters for %s.", argv[0]);
 		audtool_whine("syntax: %s <fieldname>", argv[0]);
-		audtool_whine("   - fieldname example choices: performer, album_name,");
-		audtool_whine("       track_name, track_number, year, date, genre, comment,");
-		audtool_whine("       file_name, file_ext, file_path, length, formatter,");
-		audtool_whine("       custom, mtime");
-		return;
+		audtool_whine("  - fieldname example choices include but are not limited to:");
+		audtool_whine("      artist, album, title, track_number, year, date,");
+		audtool_whine("      genre, comment, file_name, file_ext, file_path,");
+		audtool_whine("      length, formatter, custom, mtime");
+		exit(1);
 	}
 
 	if (!(data = audacious_get_tuple_field_data(dbus_proxy, argv[1], audacious_remote_get_playlist_pos(dbus_proxy))))
@@ -179,14 +179,7 @@
 		return;
 	}
 	
-	if (!g_ascii_strcasecmp(argv[1], "track_number") || !g_ascii_strcasecmp(argv[1], "year") || !g_ascii_strcasecmp(argv[1], "length") || !g_ascii_strcasecmp(argv[1], "mtime"))
-	{
-		if (*(gint *)data > 0)
-		{
-			audtool_report("%d", *(gint *)data);
-		}
-		return;
-	}
+	audtool_report("%s", data);
 
-	audtool_report("%s", (gchar *)data);
+	g_free(data);
 }
--- a/src/audtool/audtool_main.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/audtool/audtool_main.c	Fri Nov 16 05:32:56 2007 +0200
@@ -100,9 +100,12 @@
 	{"mainwin-show", mainwin_show, "shows/hides the main window", 1},
 	{"playlist-show", playlist_show, "shows/hides the playlist window", 1},
 	{"equalizer-show", equalizer_show, "shows/hides the equalizer window", 1},
-	{"preferences", show_preferences_window, "shows the preferences window", 0},
-	{"about", show_about_window, "shows the about window", 0},
-	{"jumptofile", show_jtf_window, "shows the jump to file window", 0},
+
+	{"preferences-show", show_preferences_window, "shows/hides the preferences window", 1},
+	{"about-show", show_about_window, "shows/hides the about window", 1},
+	{"jumptofile-show", show_jtf_window, "shows/hides the jump to file window", 1},
+	{"filebrowser-show", show_filebrowser, "shows/hides the filebrowser", 1},
+
 	{"shutdown", shutdown_audacious_server, "shuts down audacious", 0},
 	{"<sep>", NULL, "Help system", 0},
 	{"list-handlers", get_handlers_list, "shows handlers list", 0},
@@ -110,13 +113,24 @@
 
     /* test suite */
 	{"<sep>", NULL, "Test suite", 0},
-	{"activate", test_activate, "activate", 0},
-	{"playlist-enqueue-to-temp", test_enqueue_to_temp, "enqueue_to_temp", 1},
-	{"toggle-aot", test_toggle_aot, "specify allways on top or not", 1}, // xxx need to be improved.
+	{"activate", test_activate, "activate audacious", 0},
+	{"always-on-top", test_toggle_aot, "on/off always on top", 1},
+    {"get-version", test_get_version, "get the version string of audacious", 0},
+    {"get-info", test_get_info, "get info", 0},
     {"get-skin", test_get_skin, "get skin", 0},
     {"set-skin", test_set_skin, "set skin", 1},
-    {"get-info", test_get_info, "get info", 0},
+	{"playlist-addurl-to-new-playlist", test_enqueue_to_temp, "adds a url to the newly created playlist", 1},
+    {"playlist-insurl", test_ins_url_string, "inserts a url at specified position in the playlist", 2},
 
+    /* test suite for equalizer */
+    {"equalizer-get", test_get_eq, "get the equalizer settings", 0},
+    {"equalizer-get-preamp", test_get_eq_preamp, "get the equalizer pre-amplification", 0},
+    {"equalizer-get-band", test_get_eq_band, "get the equalizer value in specified band", 1},
+    {"equalizer-set", test_set_eq, "set the equalizer settings", 11},
+    {"equalizer-set-preamp", test_set_eq_preamp, "set the equalizer pre-amplification", 1},
+    {"equalizer-set-band", test_set_eq_band, "set the equalizer value in the specified band", 2},
+    {"equalizer-activate", test_equalizer_active, "activate/deactivate the equalizer", 1},
+    
 	{NULL, NULL, NULL, 0}
 };
 
@@ -157,7 +171,7 @@
 	mowgli_error_context_push(e, "While processing the commandline");
 
 	if (argc < 2)
-		mowgli_error_context_display_with_error(e, ":\n  * ", "not enough parameters, use audtool --help for more information.");
+		mowgli_error_context_display_with_error(e, ":\n  * ", "not enough parameters, use \'audtool help\' for more information.");
 
 	for (j = 1; j < argc; j++)
 	{
@@ -167,15 +181,18 @@
 			     !g_ascii_strcasecmp(g_strconcat("--", handlers[i].name, NULL), argv[j]))
 			    && g_ascii_strcasecmp("<sep>", handlers[i].name))
   			{
- 				handlers[i].handler(handlers[i].args + 1, &argv[j]);
+				int numargs = handlers[i].args + 1 < argc - 1 ? handlers[i].args + 1 : argc - 1;
+				handlers[i].handler(numargs, &argv[j]);
 				j += handlers[i].args;
 				k++;
+				if(j >= argc)
+					break;
 			}
 		}
 	}
 
 	if (k == 0)
-		mowgli_error_context_display_with_error(e, ":\n  * ", g_strdup_printf("Unknown command `%s' encountered, use audtool --help for a command list.", argv[1]));
+		mowgli_error_context_display_with_error(e, ":\n  * ", g_strdup_printf("Unknown command '%s' encountered, use \'audtool help\' for a command list.", argv[1]));
 
 	return 0;
 }
--- a/src/libaudclient/audctrl.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/libaudclient/audctrl.c	Fri Nov 16 05:32:56 2007 +0200
@@ -67,12 +67,16 @@
  * audacious_remote_get_version:
  * @proxy: DBus proxy for audacious
  *
- * Queries audacious for it's protocol version.
+ * Queries audacious for it's version.
  *
- * Return value: The protocol version used by Audacious.
+ * Return value: The version of Audacious.
  **/
-gint audacious_remote_get_version(DBusGProxy *proxy) {
-    return 0x09a3; // XXX should do actual dbus call.
+gchar *audacious_remote_get_version(DBusGProxy *proxy) {
+    char *string = NULL;
+    org_atheme_audacious_version(proxy, &string, &error);
+    g_clear_error(&error);
+
+    return (string ? string : NULL);
 }
 
 /**
@@ -363,7 +367,7 @@
  **/
 gchar *audacious_remote_get_skin(DBusGProxy *proxy) {
     gchar *skin = NULL;
-    org_atheme_audacious_get_skin (proxy, &skin, &error); // xxx
+    org_atheme_audacious_get_skin (proxy, &skin, &error);
     g_clear_error(&error);
     return skin;
 }
@@ -531,7 +535,18 @@
  * Tells audacious to show the preferences pane.
  **/
 void audacious_remote_show_prefs_box(DBusGProxy *proxy) {
-    org_atheme_audacious_show_prefs_box(proxy, &error);
+    audacious_remote_toggle_prefs_box(proxy, TRUE);
+}
+
+/**
+ * audacious_remote_toggle_prefs_box:
+ * @proxy: DBus proxy for audacious
+ * @show: shows/hides
+ *
+ * Tells audacious to show/hide the preferences pane.
+ **/
+void audacious_remote_toggle_prefs_box(DBusGProxy *proxy, gboolean show) {
+    org_atheme_audacious_show_prefs_box(proxy, show, &error);
     g_clear_error(&error);
 }
 
@@ -542,7 +557,18 @@
  * Tells audacious to show the about box.
  **/
 void audacious_remote_show_about_box(DBusGProxy *proxy) {
-    org_atheme_audacious_show_about_box(proxy, &error);
+    audacious_remote_toggle_about_box(proxy, TRUE);
+}
+
+/**
+ * audacious_remote_toggle_about_box:
+ * @proxy: DBus proxy for audacious
+ * @show: shows/hides
+ *
+ * Tells audacious to show/hide the about box.
+ **/
+void audacious_remote_toggle_about_box(DBusGProxy *proxy, gboolean show) {
+    org_atheme_audacious_show_about_box(proxy, show, &error);
     g_clear_error(&error);
 }
 
@@ -684,9 +710,9 @@
  *
  * Queries audacious about the equalizer settings.
  **/
-void audacious_remote_get_eq(DBusGProxy *proxy, gfloat *preamp,
-                             gfloat **bands) {
-//XXX
+void audacious_remote_get_eq(DBusGProxy *proxy, gdouble *preamp, GArray **bands) {
+    org_atheme_audacious_get_eq(proxy, preamp, bands, &error);
+    g_clear_error(&error);
 }
 
 /**
@@ -697,9 +723,13 @@
  *
  * Return value: The equalizer preamp's setting.
  **/
-gfloat audacious_remote_get_eq_preamp(DBusGProxy *proxy) {
-//XXX
-    return 0.0;
+gdouble audacious_remote_get_eq_preamp(DBusGProxy *proxy) {
+    gdouble preamp = 0.0;
+
+    org_atheme_audacious_get_eq_preamp(proxy, &preamp, &error);
+    g_clear_error(&error);
+
+    return preamp;
 }
 
 /**
@@ -711,9 +741,13 @@
  *
  * Return value: The equalizer band's value.
  **/
-gfloat audacious_remote_get_eq_band(DBusGProxy *proxy, gint band) {
-//XXX
-    return 0.0;
+gdouble audacious_remote_get_eq_band(DBusGProxy *proxy, gint band) {
+    gdouble value = 0.0;
+
+    org_atheme_audacious_get_eq_band(proxy, band, &value, &error);
+    g_clear_error(&error);
+
+    return value;
 }
 
 /**
@@ -724,9 +758,9 @@
  *
  * Tells audacious to set the equalizer up using the provided values.
  **/
-void audacious_remote_set_eq(DBusGProxy *proxy, gfloat preamp,
-                             gfloat *bands) {
-//XXX
+void audacious_remote_set_eq(DBusGProxy *proxy, gdouble preamp, GArray *bands) {
+    org_atheme_audacious_set_eq(proxy, preamp, bands, &error);
+    g_clear_error(&error);
 }
 
 /**
@@ -736,8 +770,9 @@
  *
  * Tells audacious to set the equalizer's preamp setting.
  **/
-void audacious_remote_set_eq_preamp(DBusGProxy *proxy, gfloat preamp) {
-//XXX
+void audacious_remote_set_eq_preamp(DBusGProxy *proxy, gdouble preamp) {
+    org_atheme_audacious_set_eq_preamp(proxy, preamp, &error);
+    g_clear_error(&error);
 }
 
 /**
@@ -748,9 +783,9 @@
  *
  * Tells audacious to set an equalizer band's setting.
  **/
-void audacious_remote_set_eq_band(DBusGProxy *proxy, gint band,
-                                  gfloat value) {
-//XXX
+void audacious_remote_set_eq_band(DBusGProxy *proxy, gint band, gdouble value) {
+    org_atheme_audacious_set_eq_band(proxy, band, value, &error);
+    g_clear_error(&error);
 }
 
 /**
@@ -872,7 +907,30 @@
  * Tells audacious to show the Jump-to-File pane.
  **/
 void audacious_remote_show_jtf_box(DBusGProxy *proxy) {
-    org_atheme_audacious_show_jtf_box(proxy, &error);
+    audacious_remote_toggle_jtf_box(proxy, TRUE);
+}
+
+/**
+ * audacious_remote_toggle_jtf_box:
+ * @proxy: DBus proxy for audacious
+ * @show: shows/hides jtf pane
+ *
+ * Tells audacious to show/hide the Jump-to-File pane.
+ **/
+void audacious_remote_toggle_jtf_box(DBusGProxy *proxy, gboolean show) {
+    org_atheme_audacious_show_jtf_box(proxy, show, &error);
+    g_clear_error(&error);
+}
+
+/**
+ * audacious_remote_toggle_filebrowser:
+ * @proxy: DBus proxy for audacious
+ * @show: shows/hides filebrowser
+ *
+ * Tells audacious to show the filebrowser dialog.
+ **/
+void audacious_remote_toggle_filebrowser(DBusGProxy *proxy, gboolean show) {
+    org_atheme_audacious_show_filebrowser(proxy, show, &error);
     g_clear_error(&error);
 }
 
@@ -960,8 +1018,44 @@
  **/
 gchar *audacious_get_tuple_field_data(DBusGProxy *proxy, gchar *field,
                                       guint pos) {
-//XXX
-	g_clear_error(&error);
-    return NULL;
+    GValue value = {};
+    gchar *s = NULL;
+
+    org_atheme_audacious_song_tuple(proxy, pos, field, &value, &error);
+
+    g_clear_error(&error);
+
+    if (G_IS_VALUE(&value) == FALSE)
+        return NULL;
+
+    if (G_VALUE_HOLDS_STRING(&value))
+        s = g_strescape(g_value_get_string(&value), NULL);
+    else if (g_value_type_transformable(G_VALUE_TYPE(&value), G_TYPE_STRING))
+    {
+        GValue tmp_value = { 0, };
+
+        g_value_init(&tmp_value, G_TYPE_STRING);
+        g_value_transform(&value, &tmp_value);
+
+        s = g_strescape(g_value_get_string(&tmp_value), NULL);
+
+        g_value_unset(&tmp_value);
+    }
+    else
+        s = g_strdup("<unknown type>");
+
+    g_value_unset(&value);
+    return s;
 }
 
+/**
+ * audacious_remote_eq_activate:
+ * @proxy: DBus proxy for audacious
+ * @active: Whether or not to activate the equalizer.
+ *
+ * Toggles the equalizer.
+ **/
+void audacious_remote_eq_activate(DBusGProxy *proxy, gboolean active) {
+    org_atheme_audacious_equalizer_activate (proxy, active, &error);
+    g_clear_error(&error);
+}
--- a/src/libaudclient/audctrl.h	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/libaudclient/audctrl.h	Fri Nov 16 05:32:56 2007 +0200
@@ -23,13 +23,11 @@
 #include <glib.h>
 #include <dbus/dbus-glib.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif
+G_BEGIN_DECLS
 
     void audacious_remote_playlist(DBusGProxy *proxy, gchar **list, gint num,
                                    gboolean enqueue);
-    gint audacious_remote_get_version(DBusGProxy *proxy);
+    gchar *audacious_remote_get_version(DBusGProxy *proxy);
     void audacious_remote_playlist_add(DBusGProxy *proxy, GList *list);
     void audacious_remote_playlist_delete(DBusGProxy *proxy, guint pos);
     void audacious_remote_play(DBusGProxy *proxy);
@@ -74,15 +72,15 @@
     void audacious_remote_toggle_shuffle(DBusGProxy *proxy);
     gboolean audacious_remote_is_repeat(DBusGProxy *proxy);
     gboolean audacious_remote_is_shuffle(DBusGProxy *proxy);
-    void audacious_remote_get_eq(DBusGProxy *proxy, gfloat *preamp,
-                                 gfloat **bands);
-    gfloat audacious_remote_get_eq_preamp(DBusGProxy *proxy);
-    gfloat audacious_remote_get_eq_band(DBusGProxy *proxy, gint band);
-    void audacious_remote_set_eq(DBusGProxy *proxy, gfloat preamp,
-                                 gfloat *bands);
-    void audacious_remote_set_eq_preamp(DBusGProxy *proxy, gfloat preamp);
+    void audacious_remote_get_eq(DBusGProxy *proxy, gdouble *preamp,
+                                 GArray **bands);
+    gdouble audacious_remote_get_eq_preamp(DBusGProxy *proxy);
+    gdouble audacious_remote_get_eq_band(DBusGProxy *proxy, gint band);
+    void audacious_remote_set_eq(DBusGProxy *proxy, gdouble preamp,
+                                 GArray *bands);
+    void audacious_remote_set_eq_preamp(DBusGProxy *proxy, gdouble preamp);
     void audacious_remote_set_eq_band(DBusGProxy *proxy, gint band,
-                                      gfloat value);
+                                      gdouble value);
 
 /* Added in XMMS 1.2.1 */
     void audacious_remote_quit(DBusGProxy *proxy);
@@ -121,9 +119,12 @@
                                           guint pos);
 /* Added in Audacious 1.4 */
     void audacious_remote_show_about_box(DBusGProxy *proxy);
+    void audacious_remote_toggle_about_box(DBusGProxy *proxy, gboolean show);
+    void audacious_remote_toggle_jtf_box(DBusGProxy *proxy, gboolean show);
+    void audacious_remote_toggle_prefs_box(DBusGProxy *proxy, gboolean show);
+    void audacious_remote_toggle_filebrowser(DBusGProxy *proxy, gboolean show);
+    void audacious_remote_eq_activate(DBusGProxy *proxy, gboolean active);
 
-#ifdef __cplusplus
-};
-#endif
+G_END_DECLS
 
 #endif
--- a/src/libguess/cjk_impl.c	Tue Oct 30 11:22:17 2007 +0200
+++ b/src/libguess/cjk_impl.c	Fri Nov 16 05:32:56 2007 +0200
@@ -112,6 +112,8 @@
             break;
     }
 
+    DFA_NEXT(utf8, '\0'); //Bug #53
+
     if(DFA_ALIVE(utf8))
         return 1;
     else