Mercurial > audlegacy
changeset 3805:c3d2de7c4151 trunk
Merged.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sun, 30 Sep 2007 19:00:59 +0300 |
parents | 134456e63256 (current diff) 8b3f1801b9d6 (diff) |
children | fbe7468efaea |
files | m4/sharedlib.m4 src/audacious/audacious.desktop.in |
diffstat | 31 files changed, 1466 insertions(+), 1294 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgignore Mon Sep 24 15:19:30 2007 +0300 +++ b/.hgignore Sun Sep 30 19:00:59 2007 +0300 @@ -1,31 +1,39 @@ +syntax: regexp +^aclocal\.m4 +^autom4te\.cache +^audacious\.pc +^audclient\.pc +^buildsys\.mk +^config\.h +^config\.h\.in +^config\.log +^config\.status +^configure +^extra\.mk +^man/audacious\.1 +^man/audtool\.1 +^mk/rules\.mk +^po/Makefile +^po/Makefile\.in +^po/POTFILES +^po/stamp-po +^src/audacious/audacious +^src/audacious/audacious\.desktop +^src/audacious/build_stamp\.c +^src/audacious/dbus-client-bindings\.h +^src/audacious/dbus-server-bindings\.h +^src/audtool/audtool +^cscope\.out +^tags syntax: glob -aclocal.m4 -autom4te.cache -audacious.pc -audclient.pc -buildsys.mk -config.h -config.h.in -config.log -config.status -configure -extra.mk -man/audacious.1 -man/audtool.1 -po/Makefile -po/Makefile.in -po/POTFILES -po/stamp-po -src/audacious/audacious -src/audacious/audacious.desktop -src/audacious/build_stamp.c -src/audacious/dbus-client-bindings.h -src/audacious/dbus-server-bindings.h -src/audtool/audtool +.git .deps +.depend +.depend-done *.a *.dylib *.gmo *.o *.so *~ +*.swp
--- a/AUTHORS Mon Sep 24 15:19:30 2007 +0300 +++ b/AUTHORS Sun Sep 30 19:00:59 2007 +0300 @@ -4,6 +4,7 @@ -------------------------------------------- George Averill <nhjm449@gmail.com> +Kieran Clancy <clancy.kieran+audacious@gmail.com> Michael Färber <0102@gmx.at> Giacomo Lozito <james@develia.org> William Pitcock <nenolod@sacredspiral.co.uk>
--- a/Makefile Mon Sep 24 15:19:30 2007 +0300 +++ b/Makefile Sun Sep 30 19:00:59 2007 +0300 @@ -101,7 +101,8 @@ Skins/Refugee/text.png \ Skins/Refugee/titlebar.png \ Skins/Refugee/viscolor.txt \ - Skins/Refugee/volume.png + Skins/Refugee/volume.png \ + applications/audacious.desktop DISTCLEAN = extra.mk @@ -116,6 +117,14 @@ ${INSTALL_FAILED}; \ fi; \ done + for i in audacious.desktop; do \ + ${INSTALL_STATUS}; \ + if ${MKDIR_P} ${DESTDIR}${datadir}/applications && ${INSTALL} -m 644 $$i ${DESTDIR}${datadir}/applications/$$i; then \ + ${INSTALL_OK}; \ + else \ + ${INSTALL_FAILED}; \ + fi \ + done uninstall-extra: for i in audacious.pc audclient.pc; do \ @@ -127,3 +136,12 @@ fi \ fi; \ done + for i in audacious.desktop; do \ + if test -f ${DESTDIR}${datadir}/applications/$$i; then \ + if rm -f ${DESTDIR}${datadir}/applications/$$i; then \ + ${DELETE_OK}; \ + else \ + ${DELETE_FAILED}; \ + fi \ + fi \ + done
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/applications/audacious.desktop.in Sun Sep 30 19:00:59 2007 +0300 @@ -0,0 +1,12 @@ +[Desktop Entry] +Name=Audacious +GenericName=Audio Player +Comment=Play music +Comment[hu]=Zene lejátszása +Exec=audacious %U +Icon=audacious +MimeType=application/x-ogg;audio/mp3;audio/mpeg;audio/mpegurl;audio/prs.sid;audio/x-flac;audio/x-it;audio/x-mod;audio/x-mp3;audio/x-mpeg;audio/x-mpegurl;audio/x-ms-wma;audio/x-musepack;audio/x-s3m;audio/x-scpls;audio/x-stm;audio/x-wav;audio/x-xm;application/ogg;audio/x-vorbis+ogg +Categories=Application;GTK;AudioVideo;Player; +Terminal=false +Type=Application +Encoding=UTF-8
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/audacious.desktop Sun Sep 30 19:00:59 2007 +0300 @@ -0,0 +1,12 @@ +[Desktop Entry] +Name=Audacious +GenericName=Audio Player +Comment=Play music +Comment[hu]=Zene lejátszása +Exec=audacious %U +Icon=audacious +MimeType=application/x-ogg;audio/mp3;audio/mpeg;audio/mpegurl;audio/prs.sid;audio/x-flac;audio/x-it;audio/x-mod;audio/x-mp3;audio/x-mpeg;audio/x-mpegurl;audio/x-ms-wma;audio/x-musepack;audio/x-s3m;audio/x-scpls;audio/x-stm;audio/x-wav;audio/x-xm;application/ogg;audio/x-vorbis+ogg +Categories=Application;GTK;AudioVideo;Player; +Terminal=false +Type=Application +Encoding=UTF-8
--- a/buildsys.mk.in Mon Sep 24 15:19:30 2007 +0300 +++ b/buildsys.mk.in Sun Sep 30 19:00:59 2007 +0300 @@ -35,6 +35,9 @@ OBJCFLAGS = @OBJCFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ +PROG_IMPLIB_NEEDED = @PROG_IMPLIB_NEEDED@ +PROG_IMPLIB_LDFLAGS = @PROG_IMPLIB_LDFLAGS@ +PROG_SUFFIX = @EXEEXT@ LIB_CPPFLAGS = @LIB_CPPFLAGS@ LIB_CFLAGS = @LIB_CFLAGS@ LIB_LDFLAGS = @LIB_LDFLAGS@ @@ -49,7 +52,7 @@ CLEAN_LIB = @CLEAN_LIB@ LN_S = @LN_S@ MKDIR_P = mkdir -p -INSTALL = @INSTALL@ +INSTALL = install SHELL = @SHELL@ prefix = @prefix@ exec_prefix = @exec_prefix@ @@ -72,9 +75,12 @@ .SILENT: .SUFFIXES: .beam .c .cc .cxx .d .erl .m -.PHONY: all subdirs depend install uninstall clean distclean +.PHONY: all subdirs pre-depend depend install install-extra uninstall uninstall-extra clean distclean -all: subdirs depend ${OBJS} ${STATIC_LIB} ${STATIC_LIB_NOINST} ${LIB} ${LIB_NOINST} ${PLUGIN} ${PLUGIN_NOINST} ${PROG} ${PROG_NOINST} +all: + for i in subdirs depend ${STATIC_LIB} ${STATIC_LIB_NOINST} ${LIB} ${LIB_NOINST} ${PLUGIN} ${PLUGIN_NOINST} ${PROG} ${PROG_NOINST}; do \ + ${MAKE} ${MFLAGS} $$i || exit 1; \ + done subdirs: for i in ${SUBDIRS}; do \ @@ -85,20 +91,29 @@ depend: pre-depend ${SRCS} regen=0; \ - for i in ${SRCS}; do [ $$i -nt .deps ] && regen=1; done; \ - if [ $$regen = 1 ]; then \ - rm -f .deps; \ + for i in ${SRCS}; do test $$i -nt .deps && regen=1; done; \ + if test x"$$regen" = x"1"; then \ + list=""; \ + ${DEPEND_STATUS}; \ for i in ${SRCS}; do \ case $${i##*.} in \ c|cc|cxx|m) \ - ${CPP} ${CPPFLAGS} -M $$i >>.deps; \ + list="$$list $$i"; \ + ;; \ esac; \ done; \ + if test x"$$list" != "x"; then \ + if ${CPP} ${CPPFLAGS} -M $$list >.deps; then \ + ${DEPEND_OK}; \ + else \ + ${DEPEND_FAILED}; \ + fi; \ + fi; \ fi pre-depend: -${PROG} ${PROG_NOINST}: ${EXT_DEPS} ${OBJS} ${LIB_DEPS} +${PROG} ${PROG_NOINST}: ${EXT_DEPS} ${OBJS} ${LINK_STATUS} if ${LD} -o $@ ${OBJS} ${LDFLAGS} ${LIBS}; then \ ${LINK_OK}; \ @@ -130,8 +145,6 @@ ${LINK_FAILED}; \ fi -${EXT_DEPS}: subdirs - .c.o: ${COMPILE_STATUS} if ${CC} ${CFLAGS} ${CPPFLAGS} -c -o $@ $<; then \ @@ -198,7 +211,7 @@ for i in ${STATIC_LIB}; do \ ${INSTALL_STATUS}; \ - if ${MKDIR_P} ${DESTDIR}${libdir} && ${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$$i; then \ + if ${MKDIR_P} ${DESTDIR}${libdir} && ${INSTALL} -m 644 $$i ${DESTDIR}${libdir}/$$i; then \ ${INSTALL_OK}; \ else \ ${INSTALL_FAILED}; \ @@ -225,7 +238,7 @@ for i in ${PROG}; do \ ${INSTALL_STATUS}; \ - if ${MKDIR_P} ${DESTDIR}${bindir} && ${INSTALL} -m 755 -s $$i ${DESTDIR}${bindir}/$$i; then \ + if ${MKDIR_P} ${DESTDIR}${bindir} && ${INSTALL} -m 755 $$i ${DESTDIR}${bindir}/$$i; then \ ${INSTALL_OK}; \ else \ ${INSTALL_FAILED}; \ @@ -260,7 +273,7 @@ done for i in ${LIB}; do \ - if [ -f ${DESTDIR}${libdir}/$$i ]; then \ + if test -f ${DESTDIR}${libdir}/$$i; then \ if ${UNINSTALL_LIB}; then \ ${DELETE_OK}; \ else \ @@ -270,7 +283,7 @@ done for i in ${STATIC_LIB}; do \ - if [ -f ${DESTDIR}${libdir}/$$i ]; then \ + if test -f ${DESTDIR}${libdir}/$$i; then \ if rm -f ${DESTDIR}${libdir}/$$i; then \ ${DELETE_OK}; \ else \ @@ -280,7 +293,7 @@ done for i in ${PLUGIN}; do \ - if [ -f ${DESTDIR}${libdir}/${plugindir}/$$i ]; then \ + if test -f ${DESTDIR}${libdir}/${plugindir}/$$i; then \ if rm -f ${DESTDIR}${libdir}/${plugindir}/$$i; then \ ${DELETE_OK}; \ else \ @@ -291,7 +304,7 @@ -rmdir ${DESTDIR}${libdir}/${plugindir} >/dev/null 2>&1 for i in ${DATA}; do \ - if [ -f ${DESTDIR}${datadir}/${PACKAGE}/$$i ]; then \ + if test -f ${DESTDIR}${datadir}/${PACKAGE}/$$i; then \ if rm -f ${DESTDIR}${datadir}/${PACKAGE}/$$i; then \ ${DELETE_OK}; \ else \ @@ -301,7 +314,7 @@ done for i in ${PROG}; do \ - if [ -f ${DESTDIR}${bindir}/$$i ]; then \ + if test -f ${DESTDIR}${bindir}/$$i; then \ if rm -f ${DESTDIR}${bindir}/$$i; then \ ${DELETE_OK}; \ else \ @@ -311,7 +324,7 @@ done for i in ${INCLUDES}; do \ - if [ -f ${DESTDIR}${includedir}/${includesubdir}/$$i ]; then \ + if test -f ${DESTDIR}${includedir}/${includesubdir}/$$i; then \ if rm -f ${DESTDIR}${includedir}/${includesubdir}/$$i; then \ ${DELETE_OK}; \ else \ @@ -322,7 +335,7 @@ -rmdir ${DESTDIR}${includedir}/${includesubdir} >/dev/null 2>&1 for i in ${MAN}; do \ - if [ -f ${DESTDIR}${mandir}/${mansubdir}/$$i ]; then \ + if test -f ${DESTDIR}${mandir}/${mansubdir}/$$i; then \ if rm -f ${DESTDIR}${mandir}/${mansubdir}/$$i; then \ ${DELETE_OK}; \ else \ @@ -340,8 +353,8 @@ ${DIR_LEAVE}; \ done - for i in ${OBJS} ${CLEAN} ${CLEAN_LIB} .deps *~; do \ - if [ -f $$i -o -d $$i ]; then \ + for i in ${OBJS} ${CLEAN} ${CLEAN_LIB} .deps; do \ + if test -f $$i -o -d $$i; then \ if rm -fr $$i; then \ ${DELETE_OK}; \ else \ @@ -357,8 +370,8 @@ ${DIR_LEAVE}; \ done - for i in ${PROG} ${PROG_NOINST} ${STATIC_LIB} ${STATIC_LIB_NOINST} ${PLUGIN} ${PLUGIN_NOINST} ${DISTCLEAN}; do \ - if [ -f $$i -o -d $$i ]; then \ + for i in ${PROG} ${PROG_NOINST} ${LIB} ${LIB_NOINST} ${STATIC_LIB} ${STATIC_LIB_NOINST} ${PLUGIN} ${PLUGIN_NOINST} ${DISTCLEAN} *~; do \ + if test -f $$i -o -d $$i; then \ if rm -fr $$i; then \ ${DELETE_OK}; \ else \ @@ -369,12 +382,15 @@ DIR_ENTER = printf "\033[0;36mEntering directory \033[1;36m$$i\033[0;36m.\033[0m\n"; cd $$i || exit 1 DIR_LEAVE = printf "\033[0;36mLeaving directory \033[1;36m$$i\033[0;36m.\033[0m\n"; cd .. || exit 1 +DEPEND_STATUS = printf "\033[0;33mGenerating dependencies...\033[0m\r" +DEPEND_OK = printf "\033[0;32mSuccessfully generated dependencies.\033[0m\n" +DEPEND_FAILED = printf "\033[0;31mFailed to generate dependencies!\033[0m\n"; exit 1 +COMPILE_STATUS = printf "\033[0;33mCompiling \033[1;33m$<\033[0;33m...\033[0m\r" +COMPILE_OK = printf "\033[0;32mSuccessfully compiled \033[1;32m$<\033[0;32m.\033[0m\n" +COMPILE_FAILED = printf "\033[0;31mFailed to compile \033[1;31m$<\033[0;31m!\033[0m\n"; exit 1 LINK_STATUS = printf "\033[0;33mLinking \033[1;33m$@\033[0;33m...\033[0m\r" LINK_OK = printf "\033[0;32mSuccessfully linked \033[1;32m$@\033[0;32m.\033[0m\n" LINK_FAILED = printf "\033[0;31mFailed to link \033[1;31m$@\033[0;31m!\033[0m\n"; exit 1 -COMPILE_STATUS = printf "\033[0;33mCompiling \033[1;33m$<\033[0;33m...\033[0m\r" -COMPILE_OK = printf "\033[0;32mSuccessfully compiled \033[1;32m$<\033[0;32m.\033[0m\n" -COMPILE_FAILED = printf "\033[0;31mFailed to compile \033[1;31m$<\033[0;31m!\033[0m\n"; exit 1 INSTALL_STATUS = printf "\033[0;33mInstalling \033[1;33m$$i\033[0;33m...\033[0m\r" INSTALL_OK = printf "\033[0;32mSuccessfully installed \033[1;32m$$i\033[0;32m.\033[0m\n" INSTALL_FAILED = printf "\033[0;31mFailed to install \033[1;31m$$i\033[0;31m!\033[0m\n"; exit 1
--- a/configure.ac Mon Sep 24 15:19:30 2007 +0300 +++ b/configure.ac Sun Sep 30 19:00:59 2007 +0300 @@ -1,3 +1,4 @@ + dnl Process this file with autoconf to produce a configure script. AC_INIT([audacious], [1.4.0], [bugs+audacious@atheme.org]) AC_PREREQ([2.59]) @@ -48,7 +49,6 @@ dnl Checks for various programs -AC_PROG_INSTALL AC_PROG_LN_S AC_PROG_MAKE_SET @@ -151,29 +151,18 @@ fi AC_SUBST(PCH) -dnl rpath stuff -dnl ======================== -AC_ARG_ENABLE(rpath, - [ --disable-rpath disable hardcoded rpath (default=enabled)], - enable_rpath=$enableval, enable_rpath=yes) - -if test "x$enable_rpath" = xyes; then - case "$target" in - *-apple-*) - ;; - *) - RPATH_VAL="-Wl,-rpath=\${libdir}" - ;; - esac -fi - -AC_SUBST(RPATH_VAL) - dnl plugin stuff dnl ======================== dnl Ok, first we find out what flags we need to use. -AM_SHARED_LIB +BUILDSYS_PROG_IMPLIB +BUILDSYS_SHARED_LIB +if test x"$PROG_IMPLIB_NEEDED" = x"yes"; then + IMPLIB_LIBS='-L../audacious -laudacious.exe' +else + IMPLIB_LIBS='' +fi +AC_SUBST(IMPLIB_LIBS) dnl XXX SHARED_SUFFIX=$PLUGIN_SUFFIX @@ -181,13 +170,6 @@ AC_DEFINE_UNQUOTED(SHARED_SUFFIX, "${SHARED_SUFFIX}", [Define the shared module suffix extension on your platform.]) -# Use -rpath? -AC_ARG_ENABLE(rpath, - [ --enable-rpath enable use of -rpath on ELF systems (default=yes)], [enable_rpath=$enableval], [enable_rpath=no]) -if test "x$enable_rpath" = "xyes"; then - test x"`$CC -dM -E - </dev/null | grep __ELF__`" != x"" && LDFLAGS="$LDFLAGS -Wl,-rpath $libdir" -fi - AC_MSG_CHECKING([if you are running Apple-GCC]) case "$target" in *-apple-*) @@ -416,6 +398,11 @@ AC_SUBST(TRANSPORT_PLUGIN_DIR) AC_SUBST(pluginsubs) +dnl setup rpath if prefix or exec-prefix is specified +if test "$prefix" != "NONE" || test "$exec_prefix" != "NONE" ; then + test x"`$CC -dM -E - </dev/null | grep __ELF__`" != x"" && RPATH="-Wl,-rpath $libdir" +fi + dnl XXX Work around some autoconf bugs. if test "$prefix" = "NONE"; then prefix="${ac_default_prefix}" @@ -450,6 +437,13 @@ AC_DEFINE(HAVE_XSPF_PLAYLIST, 1, [Define if XSPF playlists are available.]) fi +dnl disable rpath +AC_ARG_ENABLE(rpath, + [ --disable-rpath force to disable -rpath. (-rpath is required and automatically appended when --prefix or --exec-prefix is specified on ELF systems.)], [enable_rpath=$enableval], [enable_rpath=yes]) +if test "x$enable_rpath" = "xyes"; then + LDFLAGS="$LDFLAGS $RPATH" +fi + AC_SUBST(beepdir) AC_SUBST(plugindir) @@ -460,7 +454,7 @@ extra.mk man/audtool.1 man/audacious.1 - src/audacious/audacious.desktop + applications/audacious.desktop po/Makefile.in ])
--- a/extra.mk.in Mon Sep 24 15:19:30 2007 +0300 +++ b/extra.mk.in Sun Sep 30 19:00:59 2007 +0300 @@ -340,3 +340,4 @@ TRANSPORT_PLUGINS ?= @TRANSPORT_PLUGINS@ PCH ?= @PCH@ EXPORTDYN ?= @EXPORTDYN@ +IMPLIB_LIBS = @IMPLIB_LIBS@
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/m4/buildsys.m4 Sun Sep 30 19:00:59 2007 +0300 @@ -0,0 +1,132 @@ +dnl +dnl Copyright (c) 2007, Jonathan Schleifer <js@h3c.de> +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 +dnl copyright notice and this permission notice is present in all copies. +dnl +dnl THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +dnl AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +dnl IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +dnl ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +dnl LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +dnl CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +dnl SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +dnl INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +dnl CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +dnl ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +dnl POSSIBILITY OF SUCH DAMAGE. +dnl + +AC_DEFUN([BUILDSYS_PROG_IMPLIB], [ + AC_MSG_CHECKING(wether we need an implib) + case "$target" in + *-*-cygwin | *-*-mingw32) + AC_MSG_RESULT(yes) + PROG_IMPLIB_NEEDED='yes' + PROG_IMPLIB_LDFLAGS='-Wl,-export-all-symbols,--out-implib,lib${PROG}.a' + ;; + *) + AC_MSG_RESULT(no) + PROG_IMPLIB_NEEDED='no' + PROG_IMPLIB_LDFLAGS='' + ;; + esac + + AC_SUBST(PROG_IMPLIB_NEEDED) + AC_SUBST(PROG_IMPLIB_LDFLAGS) +]) + +AC_DEFUN([BUILDSYS_SHARED_LIB], [ + AC_MSG_CHECKING(for shared library system) + case "$target" in + intel-apple-*) + AC_MSG_RESULT([Mac OS X (Intel)]) + LIB_CPPFLAGS='-DPIC' + LIB_CFLAGS='-fPIC' + LIB_LDFLAGS='-dynamiclib -fPIC -install_name ${libdir}/${LIB}' + LIB_PREFIX='lib' + LIB_SUFFIX='.dylib' + PLUGIN_CPPFLAGS='' + PLUGIN_CFLAGS='' + PLUGIN_LDFLAGS='-bundle -fno-common -flat_namespace -undefined suppress' + PLUGIN_SUFFIX='.impl' + INSTALL_LIB='${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib && ${LN_S} -f $${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.dylib && ${LN_S} -f $${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib ${DESTDIR}${libdir}/$$i' + UNINSTALL_LIB='rm -f ${DESTDIR}${libdir}/$$i ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.dylib ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib' + CLEAN_LIB='' + ;; + *-apple-*) + AC_MSG_RESULT(Mac OS X) + LIB_CPPFLAGS='-DPIC' + LIB_CFLAGS='' + LIB_LDFLAGS='-dynamiclib -fPIC -install_name ${libdir}/${LIB}' + LIB_PREFIX='lib' + LIB_SUFFIX='.dylib' + PLUGIN_CPPFLAGS='' + PLUGIN_CFLAGS='' + PLUGIN_LDFLAGS='-bundle -fno-common -flat_namespace -undefined suppress' + PLUGIN_SUFFIX='.impl' + INSTALL_LIB='${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib && ${LN_S} -f $${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.dylib && ${LN_S} -f $${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib ${DESTDIR}${libdir}/$$i' + UNINSTALL_LIB='rm -f ${DESTDIR}${libdir}/$$i ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.dylib ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib' + CLEAN_LIB='' + ;; + *-*-solaris* | *-openbsd-* | *-mirbsd-*) + AC_MSG_RESULT(Solaris) + LIB_CPPFLAGS='-DPIC' + LIB_CFLAGS='-fPIC' + LIB_LDFLAGS='-shared -fPIC -Wl,-soname=${LIB}.${LIB_MAJOR}.${LIB_MINOR}' + LIB_PREFIX='lib' + LIB_SUFFIX='.so' + PLUGIN_CPPFLAGS='-DPIC' + PLUGIN_CFLAGS='-fPIC' + PLUGIN_LDFLAGS='-shared -fPIC' + PLUGIN_SUFFIX='.so' + INSTALL_LIB='${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$$i.${LIB_MAJOR}.${LIB_MINOR} && rm -f ${DESTDIR}${libdir}/$$i && ${LN_S} $$i.${LIB_MAJOR}.${LIB_MINOR} ${DESTDIR}${libdir}/$$i' + UNINSTALL_LIB='rm -f ${DESTDIR}${libdir}/$$i ${DESTDIR}${libdir}/$$i.${LIB_MAJOR}.${LIB_MINOR}' + CLEAN_LIB='' + ;; + *-*-cygwin | *-*-mingw32) + AC_MSG_RESULT(Win32) + LIB_CPPFLAGS='-DPIC' + LIB_CFLAGS='' + LIB_LDFLAGS='-shared -Wl,--out-implib,${LIB}.a' + LIB_PREFIX='lib' + LIB_SUFFIX='.dll' + PLUGIN_CPPFLAGS='' + PLUGIN_CFLAGS='' + PLUGIN_LDFLAGS='-shared' + PLUGIN_SUFFIX='.dll' + INSTALL_LIB='${INSTALL} -m 755 $$i ${DESTDIR}${bindir}/$$i && ${INSTALL} -m 755 $$i.a ${DESTDIR}${libdir}/$$i.a' + UNINSTALL_LIB='rm -f ${DESTDIR}${bindir}/$$i ${DESTDIR}${libdir}/$$i.a' + CLEAN_LIB='${LIB}.a' + ;; + *) + AC_MSG_RESULT(POSIX) + LIB_CPPFLAGS='-DPIC' + LIB_CFLAGS='-fPIC' + LIB_LDFLAGS='-shared -fPIC -Wl,-soname=${LIB}.${LIB_MAJOR}.${LIB_MINOR}.0' + LIB_PREFIX='lib' + LIB_SUFFIX='.so' + PLUGIN_CPPFLAGS='-DPIC' + PLUGIN_CFLAGS='-fPIC' + PLUGIN_LDFLAGS='-shared -fPIC' + PLUGIN_SUFFIX='.so' + INSTALL_LIB='${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$$i.${LIB_MAJOR}.${LIB_MINOR}.0 && ${LN_S} -f $$i.${LIB_MAJOR}.${LIB_MINOR}.0 ${DESTDIR}${libdir}/$$i.${LIB_MAJOR} && ${LN_S} -f $$i.${LIB_MAJOR}.${LIB_MINOR}.0 ${DESTDIR}${libdir}/$$i' + UNINSTALL_LIB='rm -f ${DESTDIR}${libdir}/$$i ${DESTDIR}${libdir}/$$i.${LIB_MAJOR} ${DESTDIR}${libdir}/$$i.${LIB_MAJOR}.${LIB_MINOR}.0' + CLEAN_LIB='' + ;; + esac + + AC_SUBST(LIB_CPPFLAGS) + AC_SUBST(LIB_CFLAGS) + AC_SUBST(LIB_LDFLAGS) + AC_SUBST(LIB_PREFIX) + AC_SUBST(LIB_SUFFIX) + AC_SUBST(PLUGIN_CPPFLAGS) + AC_SUBST(PLUGIN_CFLAGS) + AC_SUBST(PLUGIN_LDFLAGS) + AC_SUBST(PLUGIN_SUFFIX) + AC_SUBST(INSTALL_LIB) + AC_SUBST(UNINSTALL_LIB) + AC_SUBST(CLEAN_LIB) +])
--- a/m4/sharedlib.m4 Mon Sep 24 15:19:30 2007 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,113 +0,0 @@ -dnl -dnl Copyright (c) 2007, Jonathan Schleifer <js@h3c.de> -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 -dnl copyright notice and this permission notice is present in all copies. -dnl -dnl THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -dnl AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -dnl IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -dnl ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -dnl LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -dnl CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -dnl SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -dnl INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -dnl CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -dnl ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -dnl POSSIBILITY OF SUCH DAMAGE. -dnl - -AC_DEFUN([AM_SHARED_LIB], [ - AC_MSG_CHECKING(for shared library system) - case "$target" in - intel-apple-*) - AC_MSG_RESULT([Mac OS X (Intel)]) - LIB_CPPFLAGS='-DPIC' - LIB_CFLAGS='-fPIC' - LIB_LDFLAGS='-dynamiclib -fPIC -install_name ${libdir}/${LIB}' - LIB_PREFIX='lib' - LIB_SUFFIX='.dylib' - PLUGIN_CPPFLAGS='' - PLUGIN_CFLAGS='' - PLUGIN_LDFLAGS='-bundle -fno-common -flat_namespace -undefined suppress' - PLUGIN_SUFFIX='.impl' - INSTALL_LIB='${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib && ${LN_S} -f $${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.dylib && ${LN_S} -f $${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib ${DESTDIR}${libdir}/$$i' - UNINSTALL_LIB='rm -f ${DESTDIR}${libdir}/$$i ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.dylib ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib' - CLEAN_LIB='' - ;; - *-apple-*) - AC_MSG_RESULT(Mac OS X) - LIB_CPPFLAGS='-DPIC' - LIB_CFLAGS='' - LIB_LDFLAGS='-dynamiclib -fPIC -install_name ${libdir}/${LIB}' - LIB_PREFIX='lib' - LIB_SUFFIX='.dylib' - PLUGIN_CPPFLAGS='' - PLUGIN_CFLAGS='' - PLUGIN_LDFLAGS='-bundle -fno-common -flat_namespace -undefined suppress' - PLUGIN_SUFFIX='.impl' - INSTALL_LIB='${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib && ${LN_S} -f $${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.dylib && ${LN_S} -f $${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib ${DESTDIR}${libdir}/$$i' - UNINSTALL_LIB='rm -f ${DESTDIR}${libdir}/$$i ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.dylib ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib' - CLEAN_LIB='' - ;; - *-sun-* | *-openbsd-* | *-mirbsd-*) - AC_MSG_RESULT(Solaris) - LIB_CPPFLAGS='-DPIC' - LIB_CFLAGS='-fPIC' - LIB_LDFLAGS='-shared -fPIC -Wl,-soname=${LIB}.${LIB_MAJOR}.${LIB_MINOR}' - LIB_PREFIX='lib' - LIB_SUFFIX='.so' - PLUGIN_CPPFLAGS='-DPIC' - PLUGIN_CFLAGS='-fPIC' - PLUGIN_LDFLAGS='-shared -fPIC' - PLUGIN_SUFFIX='.so' - INSTALL_LIB='${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$$i.${LIB_MAJOR}.${LIB_MINOR} && ${LN_S} -f $$i.${LIB_MAJOR}.${LIB_MINOR} ${DESTDIR}${libdir}/$$i' - UNINSTALL_LIB='rm -f ${DESTDIR}${libdir}/$$i ${DESTDIR}${libdir}/$$i.${LIB_MAJOR}.${LIB_MINOR}' - CLEAN_LIB='' - ;; - *-*-mingw32) - AC_MSG_RESULT(MinGW32) - LIB_CPPFLAGS='-DPIC' - LIB_CFLAGS='' - LIB_LDFLAGS='-shared -Wl,--out-implib,${LIB}.a' - LIB_PREFIX='lib' - LIB_SUFFIX='.dll' - PLUGIN_CPPFLAGS='' - PLUGIN_CFLAGS='' - PLUGIN_LDFLAGS='' - PLUGIN_SUFFIX='.dll' - INSTALL_LIB='${INSTALL} -m 755 $$i ${DESTDIR}${bindir}/$$i && ${INSTALL} -m 755 $$i.a ${DESTDIR}${libdir}/$$i.a' - UNINSTALL_LIB='rm -f ${DESTDIR}${bindir}/$$i ${DESTDIR}${libdir}/$$i.a' - CLEAN_LIB='${LIB}.a' - ;; - *) - AC_MSG_RESULT(POSIX) - LIB_CPPFLAGS='-DPIC' - LIB_CFLAGS='-fPIC' - LIB_LDFLAGS='-shared -fPIC -Wl,-soname=${LIB}.${LIB_MAJOR}.${LIB_MINOR}.0' - LIB_PREFIX='lib' - LIB_SUFFIX='.so' - PLUGIN_CPPFLAGS='-DPIC' - PLUGIN_CFLAGS='-fPIC' - PLUGIN_LDFLAGS='-shared -fPIC' - PLUGIN_SUFFIX='.so' - INSTALL_LIB='${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$$i.${LIB_MAJOR}.${LIB_MINOR}.0 && ${LN_S} -f $$i.${LIB_MAJOR}.${LIB_MINOR}.0 ${DESTDIR}${libdir}/$$i.${LIB_MAJOR} && ${LN_S} -f $$i.${LIB_MAJOR}.${LIB_MINOR}.0 ${DESTDIR}${libdir}/$$i' - UNINSTALL_LIB='rm -f ${DESTDIR}${libdir}/$$i ${DESTDIR}${libdir}/$$i.${LIB_MAJOR} ${DESTDIR}${libdir}/$$i.${LIB_MAJOR}.${LIB_MINOR}.0' - CLEAN_LIB='' - ;; - esac - - AC_SUBST(LIB_CPPFLAGS) - AC_SUBST(LIB_CFLAGS) - AC_SUBST(LIB_LDFLAGS) - AC_SUBST(LIB_PREFIX) - AC_SUBST(LIB_SUFFIX) - AC_SUBST(PLUGIN_CPPFLAGS) - AC_SUBST(PLUGIN_CFLAGS) - AC_SUBST(PLUGIN_LDFLAGS) - AC_SUBST(PLUGIN_SUFFIX) - AC_SUBST(INSTALL_LIB) - AC_SUBST(UNINSTALL_LIB) - AC_SUBST(CLEAN_LIB) -])
--- a/po/de.po Mon Sep 24 15:19:30 2007 +0300 +++ b/po/de.po Sun Sep 30 19:00:59 2007 +0300 @@ -1599,7 +1599,7 @@ #: src/audacious/ui_manager.c:214 src/audacious/ui_manager.c:215 msgid "Delete Playlist" -msgstr " Wiedergabeliste löschen" +msgstr "Wiedergabeliste löschen" #: src/audacious/ui_manager.c:217 msgid "Load List"
--- a/src/audacious/Makefile Mon Sep 24 15:19:30 2007 +0300 +++ b/src/audacious/Makefile Sun Sep 30 19:00:59 2007 +0300 @@ -2,7 +2,7 @@ SUBDIRS = ${INTL_OBJECTIVE} -PROG = audacious +PROG = audacious${PROG_SUFFIX} SRCS = auddrct.c \ build_stamp.c \ configdb.c \ @@ -153,15 +153,11 @@ ui/playlist.ui \ ui/carbon-menubar.ui -CLEAN = build_stamp.c - -LIB_DEPS += ../libguess/libguess.a +CLEAN = build_stamp.c libaudacious.exe.a +EXT_DEPS = ../libguess/libguess.a include ../../buildsys.mk -LDFLAGS += ${EXPORTDYN} -LIBS += ${LDADD} - ifdef USE_DBUS CPPFLAGS += -I../libaudclient DBUS_BINDINGS = dbus-server-bindings.h dbus-client-bindings.h @@ -184,7 +180,8 @@ -I.. -I../.. \ -I./intl -LIBS += ${LIBINTL} \ +LIBS += ${LDADD} \ + ${LIBINTL} \ ${samplerate_LIBS} \ ../libguess/libguess.a \ ${GTK_LIBS} \ @@ -194,6 +191,8 @@ ${LIBGLADE_LIBS} \ ${REGEX_LIBS} +LDFLAGS += ${EXPORTDYN} ${PROG_IMPLIB_LDFLAGS} + build_stamp.c: if [ -d ../../.hg ]; then \ revh=`hg tip --template 'const char *svn_stamp = "#rev#:#node|short#";\n' 2>/dev/null`; \ @@ -217,4 +216,29 @@ dbus-client-bindings.h: ${DBUS_BINDINGS_SOURCES} ${DBUS_BINDING_TOOL} --mode=glib-client --prefix=audacious_rc objects.xml > $@ -OBJECTIVE_DATA = audacious.desktop:${datadir}/applications +install-extra: + if test x"${PROG_IMPLIB_NEEDED}" = x"yes"; then \ + for i in ${PROG}; do \ + i="lib$$i.a"; \ + ${INSTALL_STATUS}; \ + if ${MKDIR_P} ${DESTDIR}${libdir} && install -m 644 $$i ${DESTDIR}${libdir}/$$i; then \ + ${INSTALL_OK}; \ + else \ + ${INSTALL_FAILED}; \ + fi \ + done \ + fi + +uninstall-extra: + if test x"${PROG_IMPLIB_NEEDED}" = x"yes"; then \ + for i in ${PROG}; do \ + i="lib$$i.a"; \ + if test -f ${DESTDIR}${libdir}/$$i; then \ + if rm -f ${DESTDIR}${libdir}/$$i; then \ + ${DELETE_OK}; \ + else \ + ${DELETE_FAILED}; \ + fi \ + fi \ + done \ + fi
--- a/src/audacious/audacious.desktop.in Mon Sep 24 15:19:30 2007 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12 +0,0 @@ -[Desktop Entry] -Name=Audacious -GenericName=Audio Player -Comment=Play music -Comment[hu]=Zene lejátszása -Exec=audacious %U -Icon=audacious -MimeType=application/x-ogg;audio/mp3;audio/mpeg;audio/mpegurl;audio/prs.sid;audio/x-flac;audio/x-it;audio/x-mod;audio/x-mp3;audio/x-mpeg;audio/x-mpegurl;audio/x-ms-wma;audio/x-musepack;audio/x-s3m;audio/x-scpls;audio/x-stm;audio/x-wav;audio/x-xm;application/ogg;audio/x-vorbis+ogg -Categories=Application;GTK;AudioVideo;Player; -Terminal=false -Type=Application -Encoding=UTF-8
--- a/src/audacious/glade/prefswin.glade Mon Sep 24 15:19:30 2007 +0300 +++ b/src/audacious/glade/prefswin.glade Sun Sep 30 19:00:59 2007 +0300 @@ -39,7 +39,6 @@ <property name="show_tabs">False</property> <property name="show_border">False</property> <property name="scrollable">True</property> - <property name="enable_popup">True</property> <child> <widget class="GtkVBox" id="plugin_page_vbox"> <property name="visible">True</property> @@ -133,9 +132,6 @@ </packing> </child> </widget> - <packing> - <property name="tab_expand">False</property> - </packing> </child> <child> <widget class="GtkLabel" id="plugin_input_label"> @@ -147,7 +143,6 @@ </widget> <packing> <property name="type">tab</property> - <property name="tab_expand">False</property> <property name="tab_fill">False</property> </packing> </child> @@ -238,7 +233,6 @@ </widget> <packing> <property name="position">1</property> - <property name="tab_expand">False</property> </packing> </child> <child> @@ -250,7 +244,6 @@ <packing> <property name="type">tab</property> <property name="position">1</property> - <property name="tab_expand">False</property> <property name="tab_fill">False</property> </packing> </child> @@ -341,7 +334,6 @@ </widget> <packing> <property name="position">2</property> - <property name="tab_expand">False</property> </packing> </child> <child> @@ -353,7 +345,6 @@ <packing> <property name="type">tab</property> <property name="position">2</property> - <property name="tab_expand">False</property> <property name="tab_fill">False</property> </packing> </child> @@ -444,7 +435,6 @@ </widget> <packing> <property name="position">3</property> - <property name="tab_expand">False</property> </packing> </child> <child> @@ -456,16 +446,12 @@ <packing> <property name="type">tab</property> <property name="position">3</property> - <property name="tab_expand">False</property> <property name="tab_fill">False</property> </packing> </child> </widget> </child> </widget> - <packing> - <property name="tab_expand">False</property> - </packing> </child> <child> <widget class="GtkLabel" id="plugin_label"> @@ -474,7 +460,6 @@ </widget> <packing> <property name="type">tab</property> - <property name="tab_expand">False</property> <property name="tab_fill">False</property> </packing> </child> @@ -608,23 +593,38 @@ <property name="column_spacing">2</property> <property name="row_spacing">8</property> <child> - <widget class="GtkAlignment" id="alignment54"> + <widget class="GtkFontButton" id="playlist_font_button"> <property name="visible">True</property> - <property name="left_padding">12</property> - <property name="right_padding">6</property> - <child> - <widget class="GtkLabel" id="label22"> - <property name="visible">True</property> - <property name="xalign">1</property> - <property name="label" translatable="yes">_Player:</property> - <property name="use_markup">True</property> - <property name="use_underline">True</property> - <property name="mnemonic_widget">mainwin_font_button</property> - </widget> - </child> + <property name="can_focus">True</property> + <property name="response_id">0</property> + <property name="title" translatable="yes">Select playlist font:</property> + <property name="use_font">True</property> + <property name="use_size">True</property> + <signal name="realize" handler="on_playlist_font_button_realize" after="yes"/> + <signal name="font_set" handler="on_playlist_font_button_font_set"/> </widget> <packing> - <property name="x_options"></property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <widget class="GtkFontButton" id="mainwin_font_button"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="response_id">0</property> + <property name="title" translatable="yes">Select main player window font:</property> + <property name="use_font">True</property> + <property name="use_size">True</property> + <signal name="realize" handler="on_mainwin_font_button_realize" after="yes"/> + <signal name="font_set" handler="on_mainwin_font_button_font_set"/> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> <property name="y_options"></property> </packing> </child> @@ -653,38 +653,23 @@ </packing> </child> <child> - <widget class="GtkFontButton" id="mainwin_font_button"> + <widget class="GtkAlignment" id="alignment54"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="response_id">0</property> - <property name="title" translatable="yes">Select main player window font:</property> - <property name="use_font">True</property> - <property name="use_size">True</property> - <signal name="realize" handler="on_mainwin_font_button_realize" after="yes"/> - <signal name="font_set" handler="on_mainwin_font_button_font_set"/> + <property name="left_padding">12</property> + <property name="right_padding">6</property> + <child> + <widget class="GtkLabel" id="label22"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="label" translatable="yes">_Player:</property> + <property name="use_markup">True</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">mainwin_font_button</property> + </widget> + </child> </widget> <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <widget class="GtkFontButton" id="playlist_font_button"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="response_id">0</property> - <property name="title" translatable="yes">Select playlist font:</property> - <property name="use_font">True</property> - <property name="use_size">True</property> - <signal name="realize" handler="on_playlist_font_button_realize" after="yes"/> - <signal name="font_set" handler="on_playlist_font_button_font_set"/> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> + <property name="x_options"></property> <property name="y_options"></property> </packing> </child> @@ -881,7 +866,6 @@ </widget> <packing> <property name="position">1</property> - <property name="tab_expand">False</property> </packing> </child> <child> @@ -892,7 +876,6 @@ <packing> <property name="type">tab</property> <property name="position">1</property> - <property name="tab_expand">False</property> <property name="tab_fill">False</property> </packing> </child> @@ -932,39 +915,33 @@ <property name="n_columns">3</property> <property name="row_spacing">6</property> <child> - <widget class="GtkLabel" id="label32"> + <widget class="GtkSpinButton" id="mouse_wheel_volume"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="adjustment">5 0 100 1 10 10</property> + <property name="climb_rate">1</property> + <property name="numeric">True</property> + <signal name="value_changed" handler="on_mouse_wheel_volume_changed"/> + <signal name="realize" handler="on_mouse_wheel_volume_realize" after="yes"/> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="x_options"></property> + <property name="y_options"></property> + <property name="x_padding">4</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label35"> <property name="visible">True</property> <property name="xalign">0</property> <property name="xpad">4</property> - <property name="label" translatable="yes">Changes volume by</property> - </widget> - <packing> - <property name="x_options"></property> - <property name="y_options"></property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="label33"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="xpad">4</property> - <property name="label" translatable="yes">percent</property> + <property name="label" translatable="yes">lines</property> </widget> <packing> <property name="left_attach">2</property> <property name="right_attach">3</property> - <property name="x_options"></property> - <property name="y_options"></property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="label34"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="xpad">4</property> - <property name="label" translatable="yes">Scrolls playlist by</property> - </widget> - <packing> <property name="top_attach">1</property> <property name="bottom_attach">2</property> <property name="x_options"></property> @@ -991,15 +968,13 @@ </packing> </child> <child> - <widget class="GtkLabel" id="label35"> + <widget class="GtkLabel" id="label34"> <property name="visible">True</property> <property name="xalign">0</property> <property name="xpad">4</property> - <property name="label" translatable="yes">lines</property> + <property name="label" translatable="yes">Scrolls playlist by</property> </widget> <packing> - <property name="left_attach">2</property> - <property name="right_attach">3</property> <property name="top_attach">1</property> <property name="bottom_attach">2</property> <property name="x_options"></property> @@ -1007,21 +982,29 @@ </packing> </child> <child> - <widget class="GtkSpinButton" id="mouse_wheel_volume"> + <widget class="GtkLabel" id="label33"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="adjustment">5 0 100 1 10 10</property> - <property name="climb_rate">1</property> - <property name="numeric">True</property> - <signal name="value_changed" handler="on_mouse_wheel_volume_changed"/> - <signal name="realize" handler="on_mouse_wheel_volume_realize" after="yes"/> + <property name="xalign">0</property> + <property name="xpad">4</property> + <property name="label" translatable="yes">percent</property> </widget> <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> + <property name="left_attach">2</property> + <property name="right_attach">3</property> <property name="x_options"></property> <property name="y_options"></property> - <property name="x_padding">4</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label32"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="xpad">4</property> + <property name="label" translatable="yes">Changes volume by</property> + </widget> + <packing> + <property name="x_options"></property> + <property name="y_options"></property> </packing> </child> </widget> @@ -1038,7 +1021,6 @@ </widget> <packing> <property name="position">2</property> - <property name="tab_expand">False</property> </packing> </child> <child> @@ -1049,7 +1031,6 @@ <packing> <property name="type">tab</property> <property name="position">2</property> - <property name="tab_expand">False</property> <property name="tab_fill">False</property> </packing> </child> @@ -1237,20 +1218,30 @@ <property name="n_rows">2</property> <property name="n_columns">2</property> <child> - <widget class="GtkLabel" id="label74"> + <widget class="GtkLabel" id="label73"> <property name="visible">True</property> <property name="xalign">1</property> - <property name="label" translatable="yes">Fallback character encodings:</property> + <property name="label" translatable="yes">Auto character encoding detector for:</property> <property name="justify">GTK_JUSTIFY_RIGHT</property> </widget> <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> <property name="x_options"></property> <property name="y_options"></property> </packing> </child> <child> + <widget class="GtkComboBox" id="combobox1"> + <property name="visible">True</property> + <property name="items" translatable="yes"></property> + <signal name="realize" handler="on_chardet_detector_cbox_realize" after="yes"/> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="y_options"></property> + </packing> + </child> + <child> <widget class="GtkEntry" id="entry1"> <property name="visible">True</property> <property name="can_focus">True</property> @@ -1267,25 +1258,15 @@ </packing> </child> <child> - <widget class="GtkComboBox" id="combobox1"> - <property name="visible">True</property> - <property name="items" translatable="yes"></property> - <signal name="realize" handler="on_chardet_detector_cbox_realize" after="yes"/> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="label73"> + <widget class="GtkLabel" id="label74"> <property name="visible">True</property> <property name="xalign">1</property> - <property name="label" translatable="yes">Auto character encoding detector for:</property> + <property name="label" translatable="yes">Fallback character encodings:</property> <property name="justify">GTK_JUSTIFY_RIGHT</property> </widget> <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> <property name="x_options"></property> <property name="y_options"></property> </packing> @@ -1380,25 +1361,22 @@ <property name="column_spacing">12</property> <property name="row_spacing">4</property> <child> - <widget class="GtkLabel" id="label61"> + <widget class="GtkButton" id="titlestring_help_button"> <property name="visible">True</property> - <property name="xalign">1</property> - <property name="label" translatable="yes">Title format:</property> - <property name="justify">GTK_JUSTIFY_RIGHT</property> + <property name="tooltip" translatable="yes">Show information about titlestring format</property> + <property name="relief">GTK_RELIEF_HALF</property> + <property name="focus_on_click">False</property> + <property name="response_id">0</property> + <child> + <widget class="GtkImage" id="image1"> + <property name="visible">True</property> + <property name="stock">gtk-index</property> + </widget> + </child> </widget> <packing> - <property name="x_options"></property> - <property name="y_options"></property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="label62"> - <property name="visible">True</property> - <property name="xalign">1</property> - <property name="label" translatable="yes">Custom string:</property> - <property name="justify">GTK_JUSTIFY_RIGHT</property> - </widget> - <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> <property name="top_attach">1</property> <property name="bottom_attach">2</property> <property name="x_options"></property> @@ -1406,21 +1384,6 @@ </packing> </child> <child> - <widget class="GtkEntry" id="titlestring_entry"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <signal name="changed" handler="on_titlestring_entry_changed"/> - <signal name="realize" handler="on_titlestring_entry_realize" after="yes"/> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="y_options"></property> - </packing> - </child> - <child> <widget class="GtkComboBox" id="titlestring_cbox"> <property name="visible">True</property> <property name="items" translatable="yes">TITLE @@ -1438,24 +1401,42 @@ </packing> </child> <child> - <widget class="GtkButton" id="titlestring_help_button"> + <widget class="GtkEntry" id="titlestring_entry"> <property name="visible">True</property> - <property name="tooltip" translatable="yes">Show information about titlestring format</property> - <property name="relief">GTK_RELIEF_HALF</property> - <property name="focus_on_click">False</property> - <property name="response_id">0</property> - <child> - <widget class="GtkImage" id="image1"> - <property name="visible">True</property> - <property name="stock">gtk-index</property> - </widget> - </child> + <property name="can_focus">True</property> + <signal name="changed" handler="on_titlestring_entry_changed"/> + <signal name="realize" handler="on_titlestring_entry_realize" after="yes"/> </widget> <packing> - <property name="left_attach">2</property> - <property name="right_attach">3</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> <property name="top_attach">1</property> <property name="bottom_attach">2</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label62"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="label" translatable="yes">Custom string:</property> + <property name="justify">GTK_JUSTIFY_RIGHT</property> + </widget> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options"></property> + <property name="y_options"></property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label61"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="label" translatable="yes">Title format:</property> + <property name="justify">GTK_JUSTIFY_RIGHT</property> + </widget> + <packing> <property name="x_options"></property> <property name="y_options"></property> </packing> @@ -1552,7 +1533,6 @@ </widget> <packing> <property name="position">3</property> - <property name="tab_expand">False</property> </packing> </child> <child> @@ -1563,7 +1543,6 @@ <packing> <property name="type">tab</property> <property name="position">3</property> - <property name="tab_expand">False</property> <property name="tab_fill">False</property> </packing> </child> @@ -1609,15 +1588,26 @@ <property name="column_spacing">6</property> <property name="row_spacing">6</property> <child> - <widget class="GtkEntry" id="eq_dir_preset_entry"> + <widget class="GtkLabel" id="label58"> <property name="visible">True</property> - <property name="can_focus">True</property> - <signal name="changed" handler="on_eq_dir_preset_entry_changed"/> - <signal name="realize" handler="on_eq_dir_preset_entry_realize"/> + <property name="xalign">0</property> + <property name="label" translatable="yes">File preset extension:</property> </widget> <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options"></property> + <property name="y_options"></property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label57"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Directory preset file:</property> + </widget> + <packing> + <property name="x_options"></property> <property name="y_options"></property> </packing> </child> @@ -1637,26 +1627,15 @@ </packing> </child> <child> - <widget class="GtkLabel" id="label57"> + <widget class="GtkEntry" id="eq_dir_preset_entry"> <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Directory preset file:</property> + <property name="can_focus">True</property> + <signal name="changed" handler="on_eq_dir_preset_entry_changed"/> + <signal name="realize" handler="on_eq_dir_preset_entry_realize"/> </widget> <packing> - <property name="x_options"></property> - <property name="y_options"></property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="label58"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">File preset extension:</property> - </widget> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options"></property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> <property name="y_options"></property> </packing> </child> @@ -1760,7 +1739,6 @@ </widget> <packing> <property name="position">4</property> - <property name="tab_expand">False</property> </packing> </child> <child> @@ -1771,7 +1749,6 @@ <packing> <property name="type">tab</property> <property name="position">4</property> - <property name="tab_expand">False</property> <property name="tab_fill">False</property> </packing> </child> @@ -1836,14 +1813,30 @@ <property name="column_spacing">6</property> <property name="row_spacing">6</property> <child> - <widget class="GtkLabel" id="label68"> + <widget class="GtkEntry" id="proxy_port"> <property name="visible">True</property> - <property name="xalign">0</property> - <property name="yalign">0</property> - <property name="label" translatable="yes">Proxy hostname:</property> + <property name="can_focus">True</property> + <signal name="changed" handler="on_proxy_port_changed"/> + <signal name="realize" handler="on_proxy_port_realize"/> </widget> <packing> - <property name="x_options"></property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <widget class="GtkEntry" id="proxy_host"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <signal name="changed" handler="on_proxy_host_changed"/> + <signal name="realize" handler="on_proxy_host_realize"/> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> <property name="y_options"></property> </packing> </child> @@ -1861,30 +1854,14 @@ </packing> </child> <child> - <widget class="GtkEntry" id="proxy_host"> + <widget class="GtkLabel" id="label68"> <property name="visible">True</property> - <property name="can_focus">True</property> - <signal name="changed" handler="on_proxy_host_changed"/> - <signal name="realize" handler="on_proxy_host_realize"/> + <property name="xalign">0</property> + <property name="yalign">0</property> + <property name="label" translatable="yes">Proxy hostname:</property> </widget> <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <widget class="GtkEntry" id="proxy_port"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <signal name="changed" handler="on_proxy_port_changed"/> - <signal name="realize" handler="on_proxy_port_realize"/> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> + <property name="x_options"></property> <property name="y_options"></property> </packing> </child> @@ -1927,14 +1904,31 @@ <property name="column_spacing">6</property> <property name="row_spacing">6</property> <child> - <widget class="GtkLabel" id="label70"> + <widget class="GtkEntry" id="proxy_pass"> <property name="visible">True</property> - <property name="xalign">0</property> - <property name="yalign">0</property> - <property name="label" translatable="yes">Proxy username:</property> + <property name="can_focus">True</property> + <property name="visibility">False</property> + <signal name="changed" handler="on_proxy_pass_changed"/> + <signal name="realize" handler="on_proxy_pass_realize"/> </widget> <packing> - <property name="x_options"></property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <widget class="GtkEntry" id="proxy_user"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <signal name="changed" handler="on_proxy_user_changed"/> + <signal name="realize" handler="on_proxy_user_realize"/> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> <property name="y_options"></property> </packing> </child> @@ -1952,31 +1946,14 @@ </packing> </child> <child> - <widget class="GtkEntry" id="proxy_user"> + <widget class="GtkLabel" id="label70"> <property name="visible">True</property> - <property name="can_focus">True</property> - <signal name="changed" handler="on_proxy_user_changed"/> - <signal name="realize" handler="on_proxy_user_realize"/> + <property name="xalign">0</property> + <property name="yalign">0</property> + <property name="label" translatable="yes">Proxy username:</property> </widget> <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <widget class="GtkEntry" id="proxy_pass"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="visibility">False</property> - <signal name="changed" handler="on_proxy_pass_changed"/> - <signal name="realize" handler="on_proxy_pass_realize"/> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> + <property name="x_options"></property> <property name="y_options"></property> </packing> </child> @@ -2038,7 +2015,6 @@ </widget> <packing> <property name="position">5</property> - <property name="tab_expand">False</property> </packing> </child> <child> @@ -2048,7 +2024,6 @@ <packing> <property name="type">tab</property> <property name="position">5</property> - <property name="tab_expand">False</property> <property name="tab_fill">False</property> </packing> </child> @@ -2062,129 +2037,35 @@ <packing> <property name="type">tab</property> <property name="position">6</property> - <property name="tab_expand">False</property> <property name="tab_fill">False</property> </packing> </child> <child> - <widget class="GtkVBox" id="vbox32"> + <widget class="GtkScrolledWindow" id="audio_scrolled_window"> <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="hscrollbar_policy">GTK_POLICY_NEVER</property> <child> - <widget class="GtkAlignment" id="alignment74"> + <widget class="GtkViewport" id="audio_page_viewport"> <property name="visible">True</property> - <property name="bottom_padding">12</property> + <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> + <property name="resize_mode">GTK_RESIZE_QUEUE</property> + <property name="shadow_type">GTK_SHADOW_NONE</property> <child> - <widget class="GtkLabel" id="label77"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes"><b>Audio System</b></property> - <property name="use_markup">True</property> - </widget> - </child> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <widget class="GtkAlignment" id="alignment73"> - <property name="visible">True</property> - <property name="bottom_padding">6</property> - <property name="left_padding">12</property> - <child> - <widget class="GtkVBox" id="vbox33"> + <widget class="GtkVBox" id="audio_page_vbox"> <property name="visible">True</property> <child> - <widget class="GtkTable" id="table11"> + <widget class="GtkAlignment" id="alignment74"> <property name="visible">True</property> - <property name="n_rows">3</property> - <property name="n_columns">2</property> - <property name="column_spacing">6</property> - <property name="row_spacing">6</property> + <property name="bottom_padding">12</property> <child> - <widget class="GtkLabel" id="label78"> + <widget class="GtkLabel" id="label77"> <property name="visible">True</property> <property name="xalign">0</property> - <property name="label" translatable="yes">Current output plugin:</property> - </widget> - <packing> - <property name="x_options"></property> - <property name="y_options"></property> - </packing> - </child> - <child> - <widget class="GtkComboBox" id="output_plugin_cbox"> - <property name="visible">True</property> - <property name="items" translatable="yes"></property> - <signal name="realize" handler="on_output_plugin_cbox_realize" after="yes"/> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <widget class="GtkSpinButton" id="output_plugin_bufsize"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="adjustment">0 0 600000 100 1000 1000</property> - <property name="climb_rate">1</property> - <signal name="value_changed" handler="on_output_plugin_bufsize_value_changed"/> - <signal name="realize" handler="on_output_plugin_bufsize_realize" after="yes"/> + <property name="label" translatable="yes"><b>Audio System</b></property> + <property name="use_markup">True</property> </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="label82"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes"><span size="small">This is the amount of time to prebuffer audio streams by, in milliseconds. -Increase this value if you are experiencing audio skipping. -Please note however, that high values will result in Audacious performing poorly.</span></property> - <property name="use_markup">True</property> - <property name="wrap">True</property> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="x_options"></property> - <property name="y_options"></property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="label79"> - <property name="visible">True</property> - <property name="xalign">1</property> - <property name="label" translatable="yes">Buffer size:</property> - </widget> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <widget class="GtkImage" id="image7"> - <property name="visible">True</property> - <property name="xalign">1</property> - <property name="yalign">0</property> - <property name="stock">gtk-info</property> - </widget> - <packing> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="x_options">GTK_FILL</property> - </packing> </child> </widget> <packing> @@ -2192,319 +2073,222 @@ <property name="fill">False</property> </packing> </child> - </widget> - </child> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - <child> - <widget class="GtkAlignment" id="alignment82"> - <property name="visible">True</property> - <property name="left_padding">12</property> - <child> - <widget class="GtkHButtonBox" id="output_plugin_button_box"> - <property name="visible">True</property> - <property name="spacing">8</property> - <property name="layout_style">GTK_BUTTONBOX_START</property> <child> - <widget class="GtkButton" id="output_plugin_prefs"> + <widget class="GtkAlignment" id="alignment73"> <property name="visible">True</property> - <property name="sensitive">False</property> - <property name="can_focus">True</property> - <property name="can_default">True</property> - <property name="response_id">0</property> + <property name="bottom_padding">6</property> + <property name="left_padding">12</property> <child> - <widget class="GtkAlignment" id="alignment76"> + <widget class="GtkVBox" id="vbox33"> <property name="visible">True</property> - <property name="xscale">0</property> - <property name="yscale">0</property> <child> - <widget class="GtkHBox" id="hbox7"> + <widget class="GtkTable" id="table11"> <property name="visible">True</property> - <property name="spacing">2</property> + <property name="n_rows">3</property> + <property name="n_columns">2</property> + <property name="column_spacing">6</property> + <property name="row_spacing">6</property> <child> - <widget class="GtkImage" id="image5"> + <widget class="GtkImage" id="image7"> <property name="visible">True</property> - <property name="stock">gtk-preferences</property> + <property name="xalign">1</property> + <property name="yalign">0</property> + <property name="stock">gtk-info</property> </widget> <packing> - <property name="expand">False</property> - <property name="fill">False</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_FILL</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label79"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="label" translatable="yes">Buffer size:</property> + </widget> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="y_options"></property> </packing> </child> <child> - <widget class="GtkLabel" id="label80"> + <widget class="GtkLabel" id="label82"> <property name="visible">True</property> - <property name="label" translatable="yes">Output Plugin Preferences</property> - <property name="use_underline">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes"><span size="small">This is the amount of time to prebuffer audio streams by, in milliseconds. +Increase this value if you are experiencing audio skipping. +Please note however, that high values will result in Audacious performing poorly.</span></property> + <property name="use_markup">True</property> + <property name="wrap">True</property> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options"></property> + <property name="y_options"></property> + </packing> + </child> + <child> + <widget class="GtkSpinButton" id="output_plugin_bufsize"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="adjustment">0 0 600000 100 1000 1000</property> + <property name="climb_rate">1</property> + <signal name="value_changed" handler="on_output_plugin_bufsize_value_changed"/> + <signal name="realize" handler="on_output_plugin_bufsize_realize" after="yes"/> </widget> <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <widget class="GtkComboBox" id="output_plugin_cbox"> + <property name="visible">True</property> + <property name="items" translatable="yes"></property> + <signal name="realize" handler="on_output_plugin_cbox_realize" after="yes"/> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label78"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Current output plugin:</property> + </widget> + <packing> + <property name="x_options"></property> + <property name="y_options"></property> </packing> </child> </widget> - </child> - </widget> - </child> - </widget> - </child> - <child> - <widget class="GtkButton" id="output_plugin_info"> - <property name="visible">True</property> - <property name="sensitive">False</property> - <property name="can_focus">True</property> - <property name="can_default">True</property> - <property name="response_id">0</property> - <child> - <widget class="GtkAlignment" id="alignment77"> - <property name="visible">True</property> - <property name="xscale">0</property> - <property name="yscale">0</property> - <child> - <widget class="GtkHBox" id="hbox8"> - <property name="visible">True</property> - <property name="spacing">2</property> - <child> - <widget class="GtkImage" id="image6"> - <property name="visible">True</property> - <property name="stock">gtk-about</property> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="label81"> - <property name="visible">True</property> - <property name="label" translatable="yes">Output Plugin Information</property> - <property name="use_underline">True</property> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> </child> </widget> </child> </widget> <packing> - <property name="position">1</property> - </packing> - </child> - </widget> - </child> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">2</property> - </packing> - </child> - <child> - <widget class="GtkAlignment" id="alignment78"> - <property name="visible">True</property> - <property name="top_padding">12</property> - <property name="bottom_padding">12</property> - <child> - <widget class="GtkLabel" id="label83"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes"><b>Format Detection</b></property> - <property name="use_markup">True</property> - </widget> - </child> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">3</property> - </packing> - </child> - <child> - <widget class="GtkAlignment" id="alignment84"> - <property name="visible">True</property> - <property name="left_padding">12</property> - <child> - <widget class="GtkCheckButton" id="audio_format_det_cb"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="tooltip" translatable="yes">When checked, Audacious will detect file formats on demand. This can result in a messier playlist, but delivers a major speed benefit.</property> - <property name="label" translatable="yes">Detect file formats on demand, instead of immediately.</property> - <property name="use_underline">True</property> - <property name="response_id">0</property> - <property name="draw_indicator">True</property> - <signal name="toggled" handler="on_audio_format_det_cb_toggled"/> - <signal name="realize" handler="on_audio_format_det_cb_realize"/> - </widget> - </child> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">4</property> - </packing> - </child> - <child> - <widget class="GtkAlignment" id="alignment89"> - <property name="visible">True</property> - <property name="left_padding">12</property> - <child> - <widget class="GtkCheckButton" id="detect_by_extension_cb"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="tooltip" translatable="yes">When checked, Audacious will detect file formats based by extension. This is slightly slower than detection on demand, but still provides a minimal level of format detection.</property> - <property name="label" translatable="yes">Detect file formats by extension.</property> - <property name="use_underline">True</property> - <property name="response_id">0</property> - <property name="draw_indicator">True</property> - <signal name="toggled" handler="on_detect_by_extension_cb_toggled"/> - <signal name="realize" handler="on_detect_by_extension_cb_realize"/> - </widget> - </child> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">5</property> - </packing> - </child> - <child> - <widget class="GtkAlignment" id="alignment19"> - <property name="visible">True</property> - <property name="top_padding">12</property> - <property name="bottom_padding">12</property> - <child> - <widget class="GtkLabel" id="label40"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes"><b>Playback</b></property> - <property name="use_markup">True</property> - </widget> - </child> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">6</property> - </packing> - </child> - <child> - <widget class="GtkAlignment" id="alignment83"> - <property name="visible">True</property> - <property name="left_padding">12</property> - <child> - <widget class="GtkCheckButton" id="continue_playback_on_startup"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="tooltip" translatable="yes">When Audacious starts, automatically begin playing from the point where we stopped before.</property> - <property name="label" translatable="yes">Continue playback on startup</property> - <property name="use_underline">True</property> - <property name="response_id">0</property> - <property name="draw_indicator">True</property> - <signal name="toggled" handler="on_continue_playback_on_startup_toggled"/> - <signal name="realize" handler="on_continue_playback_on_startup_realize"/> - </widget> - </child> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">7</property> - </packing> - </child> - <child> - <widget class="GtkAlignment" id="alignment79"> - <property name="visible">True</property> - <property name="left_padding">12</property> - <child> - <widget class="GtkCheckButton" id="playlist_no_advance"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="tooltip" translatable="yes">When finished playing a song, don't automatically advance to the next.</property> - <property name="label" translatable="yes">Don't advance in the playlist</property> - <property name="use_underline">True</property> - <property name="response_id">0</property> - <property name="draw_indicator">True</property> - <signal name="toggled" handler="on_playlist_no_advance_toggled"/> - <signal name="realize" handler="on_playlist_no_advance_realize" after="yes"/> - </widget> - </child> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">8</property> - </packing> - </child> - <child> - <widget class="GtkAlignment" id="alignment80"> - <property name="visible">True</property> - <property name="left_padding">12</property> - <child> - <widget class="GtkCheckButton" id="pause_between_songs"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Pause between songs</property> - <property name="use_underline">True</property> - <property name="response_id">0</property> - <property name="draw_indicator">True</property> - </widget> - </child> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">9</property> - </packing> - </child> - <child> - <widget class="GtkAlignment" id="alignment22"> - <property name="visible">True</property> - <property name="left_padding">45</property> - <child> - <widget class="GtkHBox" id="pause_between_songs_box"> - <property name="visible">True</property> - <child> - <widget class="GtkLabel" id="label41"> - <property name="visible">True</property> - <property name="xpad">4</property> - <property name="label" translatable="yes">Pause for</property> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <widget class="GtkSpinButton" id="pause_between_songs_time"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="adjustment">2 0 100 1 10 10</property> - <property name="climb_rate">1</property> - <signal name="value_changed" handler="on_pause_between_songs_time_changed"/> - <signal name="realize" handler="on_pause_between_songs_time_realize" after="yes"/> - </widget> - <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">1</property> </packing> </child> <child> - <widget class="GtkLabel" id="label42"> + <widget class="GtkAlignment" id="alignment82"> <property name="visible">True</property> - <property name="xpad">4</property> - <property name="label" translatable="yes">seconds</property> + <property name="left_padding">12</property> + <child> + <widget class="GtkHButtonBox" id="output_plugin_button_box"> + <property name="visible">True</property> + <property name="spacing">8</property> + <property name="layout_style">GTK_BUTTONBOX_START</property> + <child> + <widget class="GtkButton" id="output_plugin_prefs"> + <property name="visible">True</property> + <property name="sensitive">False</property> + <property name="can_focus">True</property> + <property name="can_default">True</property> + <property name="response_id">0</property> + <child> + <widget class="GtkAlignment" id="alignment76"> + <property name="visible">True</property> + <property name="xscale">0</property> + <property name="yscale">0</property> + <child> + <widget class="GtkHBox" id="hbox7"> + <property name="visible">True</property> + <property name="spacing">2</property> + <child> + <widget class="GtkImage" id="image5"> + <property name="visible">True</property> + <property name="stock">gtk-preferences</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label80"> + <property name="visible">True</property> + <property name="label" translatable="yes">Output Plugin Preferences</property> + <property name="use_underline">True</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </widget> + </child> + </widget> + </child> + </widget> + </child> + <child> + <widget class="GtkButton" id="output_plugin_info"> + <property name="visible">True</property> + <property name="sensitive">False</property> + <property name="can_focus">True</property> + <property name="can_default">True</property> + <property name="response_id">0</property> + <child> + <widget class="GtkAlignment" id="alignment77"> + <property name="visible">True</property> + <property name="xscale">0</property> + <property name="yscale">0</property> + <child> + <widget class="GtkHBox" id="hbox8"> + <property name="visible">True</property> + <property name="spacing">2</property> + <child> + <widget class="GtkImage" id="image6"> + <property name="visible">True</property> + <property name="stock">gtk-about</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label81"> + <property name="visible">True</property> + <property name="label" translatable="yes">Output Plugin Information</property> + <property name="use_underline">True</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </widget> + </child> + </widget> + </child> + </widget> + <packing> + <property name="position">1</property> + </packing> + </child> + </widget> + </child> </widget> <packing> <property name="expand">False</property> @@ -2512,228 +2296,434 @@ <property name="position">2</property> </packing> </child> - </widget> - </child> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">10</property> - </packing> - </child> - <child> - <widget class="GtkAlignment" id="alignment90"> - <property name="visible">True</property> - <property name="top_padding">12</property> - <property name="bottom_padding">12</property> - <child> - <widget class="GtkLabel" id="label93"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes"><b>Sampling Rate Converter</b></property> - <property name="use_markup">True</property> - </widget> - </child> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">11</property> - </packing> - </child> - <child> - <widget class="GtkAlignment" id="alignment92"> - <property name="visible">True</property> - <property name="left_padding">12</property> - <child> - <widget class="GtkCheckButton" id="enable_src"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Enable Sampling Rate Converter</property> - <property name="use_underline">True</property> - <property name="response_id">0</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> - <signal name="toggled" handler="on_enable_src_toggled"/> - <signal name="realize" handler="on_enable_src_realize"/> - </widget> - </child> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">12</property> - </packing> - </child> - <child> - <widget class="GtkAlignment" id="alignment91"> - <property name="visible">True</property> - <property name="bottom_padding">6</property> - <property name="left_padding">12</property> - <child> - <widget class="GtkVBox" id="vbox36"> - <property name="visible">True</property> + <child> + <widget class="GtkAlignment" id="alignment78"> + <property name="visible">True</property> + <property name="top_padding">12</property> + <property name="bottom_padding">12</property> + <child> + <widget class="GtkLabel" id="label83"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes"><b>Format Detection</b></property> + <property name="use_markup">True</property> + </widget> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">3</property> + </packing> + </child> <child> - <widget class="GtkTable" id="table13"> + <widget class="GtkAlignment" id="alignment84"> + <property name="visible">True</property> + <property name="left_padding">12</property> + <child> + <widget class="GtkCheckButton" id="audio_format_det_cb"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="tooltip" translatable="yes">When checked, Audacious will detect file formats on demand. This can result in a messier playlist, but delivers a major speed benefit.</property> + <property name="label" translatable="yes">Detect file formats on demand, instead of immediately.</property> + <property name="use_underline">True</property> + <property name="response_id">0</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="on_audio_format_det_cb_toggled"/> + <signal name="realize" handler="on_audio_format_det_cb_realize"/> + </widget> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">4</property> + </packing> + </child> + <child> + <widget class="GtkAlignment" id="alignment89"> <property name="visible">True</property> - <property name="n_rows">3</property> - <property name="n_columns">2</property> - <property name="column_spacing">6</property> - <property name="row_spacing">6</property> + <property name="left_padding">12</property> <child> - <widget class="GtkLabel" id="label91"> + <widget class="GtkCheckButton" id="detect_by_extension_cb"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="tooltip" translatable="yes">When checked, Audacious will detect file formats based by extension. This is slightly slower than detection on demand, but still provides a minimal level of format detection.</property> + <property name="label" translatable="yes">Detect file formats by extension.</property> + <property name="use_underline">True</property> + <property name="response_id">0</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="on_detect_by_extension_cb_toggled"/> + <signal name="realize" handler="on_detect_by_extension_cb_realize"/> + </widget> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">5</property> + </packing> + </child> + <child> + <widget class="GtkAlignment" id="alignment19"> + <property name="visible">True</property> + <property name="top_padding">12</property> + <property name="bottom_padding">12</property> + <child> + <widget class="GtkLabel" id="label40"> <property name="visible">True</property> <property name="xalign">0</property> - <property name="label" translatable="yes">Sampling Rate [Hz]:</property> + <property name="label" translatable="yes"><b>Playback</b></property> + <property name="use_markup">True</property> </widget> - <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - </packing> </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">6</property> + </packing> + </child> + <child> + <widget class="GtkAlignment" id="alignment83"> + <property name="visible">True</property> + <property name="left_padding">12</property> <child> - <widget class="GtkSpinButton" id="src_rate"> + <widget class="GtkCheckButton" id="continue_playback_on_startup"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="tooltip" translatable="yes">When Audacious starts, automatically begin playing from the point where we stopped before.</property> + <property name="label" translatable="yes">Continue playback on startup</property> + <property name="use_underline">True</property> + <property name="response_id">0</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="on_continue_playback_on_startup_toggled"/> + <signal name="realize" handler="on_continue_playback_on_startup_realize"/> + </widget> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">7</property> + </packing> + </child> + <child> + <widget class="GtkAlignment" id="alignment79"> + <property name="visible">True</property> + <property name="left_padding">12</property> + <child> + <widget class="GtkCheckButton" id="playlist_no_advance"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="adjustment">96000 1000 768000 1000 1000 1000</property> - <property name="climb_rate">1</property> - <signal name="value_changed" handler="on_src_rate_value_changed"/> - <signal name="realize" handler="on_src_rate_realize"/> + <property name="tooltip" translatable="yes">When finished playing a song, don't automatically advance to the next.</property> + <property name="label" translatable="yes">Don't advance in the playlist</property> + <property name="use_underline">True</property> + <property name="response_id">0</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="on_playlist_no_advance_toggled"/> + <signal name="realize" handler="on_playlist_no_advance_realize" after="yes"/> </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="y_options"></property> - </packing> </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">8</property> + </packing> + </child> + <child> + <widget class="GtkAlignment" id="alignment80"> + <property name="visible">True</property> + <property name="left_padding">12</property> <child> - <widget class="GtkImage" id="image9"> + <widget class="GtkCheckButton" id="pause_between_songs"> <property name="visible">True</property> - <property name="xalign">1</property> - <property name="yalign">0</property> - <property name="stock">gtk-info</property> - </widget> - <packing> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="label92"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes"><span size="small">All streams will be converted to this sampling rate. -This should be the max supported sampling rate of -the sound card or output plugin.</span></property> - <property name="use_markup">True</property> - <property name="wrap">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">Pause between songs</property> + <property name="use_underline">True</property> + <property name="response_id">0</property> + <property name="draw_indicator">True</property> </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - </packing> </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">9</property> + </packing> + </child> + <child> + <widget class="GtkAlignment" id="alignment22"> + <property name="visible">True</property> + <property name="left_padding">45</property> <child> - <widget class="GtkLabel" id="label94"> + <widget class="GtkHBox" id="pause_between_songs_box"> <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Interpolation Engine:</property> + <child> + <widget class="GtkLabel" id="label41"> + <property name="visible">True</property> + <property name="xpad">4</property> + <property name="label" translatable="yes">Pause for</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + <child> + <widget class="GtkSpinButton" id="pause_between_songs_time"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="adjustment">2 0 100 1 10 10</property> + <property name="climb_rate">1</property> + <signal name="value_changed" handler="on_pause_between_songs_time_changed"/> + <signal name="realize" handler="on_pause_between_songs_time_realize" after="yes"/> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label42"> + <property name="visible">True</property> + <property name="xpad">4</property> + <property name="label" translatable="yes">seconds</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> </widget> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <widget class="GtkComboBox" id="src_converter_type"> - <property name="visible">True</property> - <property name="items">Best Sinc Interpolation -Medium Sinc Interpolation -Fastest Sinc Interpolation -ZOH Interpolation -Linear Interpolation</property> - <signal name="changed" handler="on_src_converter_type_changed"/> - <signal name="realize" handler="on_src_converter_type_realize" after="yes"/> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options">GTK_FILL</property> - </packing> </child> </widget> <packing> <property name="expand">False</property> <property name="fill">False</property> + <property name="position">10</property> + </packing> + </child> + <child> + <widget class="GtkAlignment" id="alignment90"> + <property name="visible">True</property> + <property name="top_padding">12</property> + <property name="bottom_padding">12</property> + <child> + <widget class="GtkLabel" id="label93"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes"><b>Sampling Rate Converter</b></property> + <property name="use_markup">True</property> + </widget> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">11</property> + </packing> + </child> + <child> + <widget class="GtkAlignment" id="alignment92"> + <property name="visible">True</property> + <property name="left_padding">12</property> + <child> + <widget class="GtkCheckButton" id="enable_src"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">Enable Sampling Rate Converter</property> + <property name="use_underline">True</property> + <property name="response_id">0</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="on_enable_src_toggled"/> + <signal name="realize" handler="on_enable_src_realize"/> + </widget> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">12</property> + </packing> + </child> + <child> + <widget class="GtkAlignment" id="alignment91"> + <property name="visible">True</property> + <property name="bottom_padding">6</property> + <property name="left_padding">12</property> + <child> + <widget class="GtkVBox" id="vbox36"> + <property name="visible">True</property> + <child> + <widget class="GtkTable" id="table13"> + <property name="visible">True</property> + <property name="n_rows">3</property> + <property name="n_columns">2</property> + <property name="column_spacing">6</property> + <property name="row_spacing">6</property> + <child> + <widget class="GtkComboBox" id="src_converter_type"> + <property name="visible">True</property> + <property name="items">Best Sinc Interpolation +Medium Sinc Interpolation +Fastest Sinc Interpolation +ZOH Interpolation +Linear Interpolation</property> + <signal name="changed" handler="on_src_converter_type_changed"/> + <signal name="realize" handler="on_src_converter_type_realize" after="yes"/> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label94"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Interpolation Engine:</property> + </widget> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label92"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes"><span size="small">All streams will be converted to this sampling rate. +This should be the max supported sampling rate of +the sound card or output plugin.</span></property> + <property name="use_markup">True</property> + <property name="wrap">True</property> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <widget class="GtkImage" id="image9"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="yalign">0</property> + <property name="stock">gtk-info</property> + </widget> + <packing> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_FILL</property> + </packing> + </child> + <child> + <widget class="GtkSpinButton" id="src_rate"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="adjustment">96000 1000 768000 1000 1000 1000</property> + <property name="climb_rate">1</property> + <signal name="value_changed" handler="on_src_rate_value_changed"/> + <signal name="realize" handler="on_src_rate_realize"/> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label91"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Sampling Rate [Hz]:</property> + </widget> + <packing> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + </widget> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">13</property> + </packing> + </child> + <child> + <widget class="GtkAlignment" id="alignment4"> + <property name="visible">True</property> + <property name="top_padding">12</property> + <property name="bottom_padding">12</property> + <child> + <widget class="GtkLabel" id="label2"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes"><b>Volume Control</b></property> + <property name="use_markup">True</property> + </widget> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">14</property> + </packing> + </child> + <child> + <widget class="GtkAlignment" id="alignment7"> + <property name="visible">True</property> + <property name="left_padding">12</property> + <child> + <widget class="GtkCheckButton" id="software_volume_control"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="tooltip" translatable="yes">Use software volume control. This may be useful for situations where your audio system does not support controlling the playback volume.</property> + <property name="label" translatable="yes">Use software volume control</property> + <property name="use_underline">True</property> + <property name="response_id">0</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="on_software_volume_control_toggled"/> + <signal name="realize" handler="on_software_volume_control_realize"/> + </widget> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">15</property> </packing> </child> </widget> </child> </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">13</property> - </packing> - </child> - <child> - <widget class="GtkAlignment" id="alignment4"> - <property name="visible">True</property> - <property name="top_padding">12</property> - <property name="bottom_padding">12</property> - <child> - <widget class="GtkLabel" id="label2"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes"><b>Volume Control</b></property> - <property name="use_markup">True</property> - </widget> - </child> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">14</property> - </packing> - </child> - <child> - <widget class="GtkAlignment" id="alignment7"> - <property name="visible">True</property> - <property name="left_padding">12</property> - <child> - <widget class="GtkCheckButton" id="software_volume_control"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="tooltip" translatable="yes">Use software volume control. This may be useful for situations where your audio system does not support controlling the playback volume.</property> - <property name="label" translatable="yes">Use software volume control</property> - <property name="use_underline">True</property> - <property name="response_id">0</property> - <property name="draw_indicator">True</property> - <signal name="toggled" handler="on_software_volume_control_toggled"/> - <signal name="realize" handler="on_software_volume_control_realize"/> - </widget> - </child> - </widget> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">15</property> - </packing> </child> </widget> <packing> <property name="position">7</property> - <property name="tab_expand">False</property> + <property name="tab_expand">True</property> </packing> </child> <child> @@ -2743,7 +2733,6 @@ <packing> <property name="type">tab</property> <property name="position">7</property> - <property name="tab_expand">False</property> <property name="tab_fill">False</property> </packing> </child> @@ -2757,7 +2746,6 @@ <packing> <property name="type">tab</property> <property name="position">8</property> - <property name="tab_expand">False</property> <property name="tab_fill">False</property> </packing> </child> @@ -2917,7 +2905,7 @@ <property name="column_spacing">4</property> <property name="row_spacing">4</property> <child> - <widget class="GtkEntry" id="filepopup_settings_cover_name_exclude"> + <widget class="GtkEntry" id="filepopup_settings_cover_name_include"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="activates_default">True</property> @@ -2925,20 +2913,6 @@ <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="label87"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="xpad">12</property> - <property name="label" translatable="yes">Include:</property> - </widget> - <packing> - <property name="x_options"></property> <property name="y_options"></property> </packing> </child> @@ -2957,7 +2931,19 @@ </packing> </child> <child> - <widget class="GtkEntry" id="filepopup_settings_cover_name_include"> + <widget class="GtkLabel" id="label87"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="xpad">12</property> + <property name="label" translatable="yes">Include:</property> + </widget> + <packing> + <property name="x_options"></property> + <property name="y_options"></property> + </packing> + </child> + <child> + <widget class="GtkEntry" id="filepopup_settings_cover_name_exclude"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="activates_default">True</property> @@ -2965,6 +2951,8 @@ <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> <property name="y_options"></property> </packing> </child> @@ -3186,17 +3174,59 @@ <property name="column_spacing">12</property> <property name="row_spacing">6</property> <child> - <widget class="GtkHScale" id="red_scale"> + <widget class="GtkLabel" id="label94"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="label" translatable="yes">Blue</property> + <property name="justify">GTK_JUSTIFY_RIGHT</property> + </widget> + <packing> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label93"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="label" translatable="yes">Green</property> + <property name="justify">GTK_JUSTIFY_RIGHT</property> + </widget> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label92"> + <property name="visible">True</property> + <property name="xalign">1</property> + <property name="label" translatable="yes">Red</property> + <property name="justify">GTK_JUSTIFY_RIGHT</property> + </widget> + <packing> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <widget class="GtkHScale" id="blue_scale"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="adjustment">0 0 255 0 0 0</property> - <property name="digits">3</property> <property name="draw_value">False</property> - <signal name="value_changed" handler="on_red_scale_value_changed"/> + <signal name="value_changed" handler="on_blue_scale_value_changed"/> </widget> <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_FILL</property> </packing> </child> <child> @@ -3216,59 +3246,17 @@ </packing> </child> <child> - <widget class="GtkHScale" id="blue_scale"> + <widget class="GtkHScale" id="red_scale"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="adjustment">0 0 255 0 0 0</property> + <property name="digits">3</property> <property name="draw_value">False</property> - <signal name="value_changed" handler="on_blue_scale_value_changed"/> + <signal name="value_changed" handler="on_red_scale_value_changed"/> </widget> <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="x_options">GTK_FILL</property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="label92"> - <property name="visible">True</property> - <property name="xalign">1</property> - <property name="label" translatable="yes">Red</property> - <property name="justify">GTK_JUSTIFY_RIGHT</property> - </widget> - <packing> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="label93"> - <property name="visible">True</property> - <property name="xalign">1</property> - <property name="label" translatable="yes">Green</property> - <property name="justify">GTK_JUSTIFY_RIGHT</property> - </widget> - <packing> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> - </packing> - </child> - <child> - <widget class="GtkLabel" id="label94"> - <property name="visible">True</property> - <property name="xalign">1</property> - <property name="label" translatable="yes">Blue</property> - <property name="justify">GTK_JUSTIFY_RIGHT</property> - </widget> - <packing> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="x_options">GTK_FILL</property> - <property name="y_options"></property> </packing> </child> </widget>
--- a/src/audacious/playlist.c Mon Sep 24 15:19:30 2007 +0300 +++ b/src/audacious/playlist.c Sun Sep 30 19:00:59 2007 +0300 @@ -205,16 +205,15 @@ g_thread_self() != playlist_get_info_thread) return FALSE; - if (entry->decoder == NULL) - { + if (entry->decoder == NULL) { pr = input_check_file(entry->filename, FALSE); if (pr) - entry->decoder = pr->ip; + entry->decoder = pr->ip; } /* renew tuple if file mtime is newer than tuple mtime. */ - if(entry->tuple){ - if(tuple_get_int(entry->tuple, FIELD_MTIME, NULL) == modtime) + if (entry->tuple){ + if (tuple_get_int(entry->tuple, FIELD_MTIME, NULL) == modtime) return TRUE; else { mowgli_object_unref(entry->tuple); @@ -328,6 +327,7 @@ playlists_iter = playlists; playlistwin_update_list(playlist_get_active()); + playlist_manager_update(); } void @@ -342,6 +342,7 @@ playlists_iter = playlists; playlistwin_update_list(playlist_get_active()); + playlist_manager_update(); } void @@ -353,6 +354,7 @@ playlists_iter = playlists; playlistwin_update_list(playlist); + playlist_manager_update(); } /* *********************** playlist code ********************** */ @@ -368,17 +370,18 @@ gboolean playlist_set_current_name(Playlist *playlist, const gchar * title) { - gchar *oldtitle; - oldtitle = playlist->title; + gchar *oldtitle = playlist->title; if (!title) { playlist->title = NULL; - if(oldtitle) g_free(oldtitle); + g_free(oldtitle); + playlist_manager_update(); return FALSE; } playlist->title = str_to_utf8(title); - if(oldtitle) g_free(oldtitle); + g_free(oldtitle); + playlist_manager_update(); return TRUE; } @@ -389,21 +392,21 @@ gchar *old; old = playlist->filename; - if(!filename) { + if (!filename) { playlist->filename = NULL; - if(old) g_free(old); + g_free(old); return FALSE; } playlist->filename = filename_to_utf8(filename); - if(old) g_free(old); + g_free(old); return TRUE; } gchar * playlist_filename_get(Playlist *playlist) { - if(!playlist->filename) return NULL; + if (!playlist->filename) return NULL; return g_filename_from_utf8(playlist->filename, -1, NULL, NULL, NULL); } @@ -430,7 +433,7 @@ { GList *tmp = playlist->queue; - REQUIRE_LOCK( playlist->mutex ); + REQUIRE_LOCK(playlist->mutex); playlist->position = playlist->queue->data; playlist->queue = g_list_remove_link(playlist->queue, playlist->queue); @@ -551,9 +554,8 @@ if (restart_playing) { if (playlist->position) playback_initiate(); - else { + else mainwin_clear_song_info(); - } } playlist_manager_update(); @@ -589,9 +591,8 @@ if (restart_playing) { if (playlist->position) playback_initiate(); - else { + else mainwin_clear_song_info(); - } } playlist_manager_update(); @@ -629,9 +630,8 @@ if (restart_playing) { if (playlist->position) playback_initiate(); - else { + else mainwin_clear_song_info(); - } } playlistwin_update_list(playlist); @@ -668,33 +668,34 @@ InputPlugin * dec) { PlaylistEntry *entry; - gint subtunes_num = 0, i = 0; + Tuple *main_tuple = NULL; + gint nsubtunes = 0, i = 0; + gboolean add_flag = TRUE; g_return_if_fail(playlist != NULL); g_return_if_fail(filename != NULL); - if (tuple != NULL) - { - subtunes_num = tuple_get_int(tuple, FIELD_SUBSONG_NUM, NULL); - if (subtunes_num > 0) - { + if (tuple != NULL) { + nsubtunes = tuple->nsubtunes; + if (nsubtunes > 0) { + main_tuple = tuple; i = 1; - tuple_free(tuple); /* will be replaced by subtune tuples */ } } - for (; i <= subtunes_num; i++) - { + for (; add_flag && i <= nsubtunes; i++) { gchar *filename_entry; - if (subtunes_num > 0) - { - filename_entry = g_strdup_printf("%s?%d", filename, i); - /* we're dealing with subtune, let's ask again tuple information - to plugin, by passing the ?subsong suffix; this way we may get - specific subtune information in the tuple, if available */ + + if (nsubtunes > 0) { + filename_entry = g_strdup_printf("%s?%d", filename, + main_tuple->subtunes ? main_tuple->subtunes[i] : i); + + /* We're dealing with subtune, let's ask again tuple information + * to plugin, by passing the ?subtune suffix; this way we get + * specific subtune information in the tuple, if available. + */ tuple = dec->get_song_tuple(filename_entry); - } - else + } else filename_entry = g_strdup(filename); @@ -703,7 +704,7 @@ tuple ? tuple_get_int(tuple, FIELD_LENGTH, NULL) : -1, dec); g_free(filename_entry); - if(!playlist->tail) + if (!playlist->tail) playlist->tail = g_list_last(playlist->entries); PLAYLIST_LOCK(playlist); @@ -718,14 +719,14 @@ if(!playlist->entries) { // this is the first element playlist->entries = element; playlist->tail = element; + } else { // the rests + if (playlist->tail != NULL) { + playlist->tail->next = element; + playlist->tail = element; + } else + add_flag = FALSE; } - else { // the rests - g_return_if_fail(playlist->tail != NULL); - playlist->tail->next = element; - playlist->tail = element; - } - } - else { + } else { playlist->entries = g_list_insert(playlist->entries, entry, pos); } @@ -733,14 +734,18 @@ if (tuple != NULL) { const gchar *formatter = tuple_get_string(tuple, FIELD_FORMATTER, NULL); - entry->title = tuple_formatter_make_title_string(tuple, formatter ? - formatter : get_gentitle_format()); + entry->title = tuple_formatter_make_title_string(tuple, + formatter ? formatter : get_gentitle_format()); entry->length = tuple_get_int(tuple, FIELD_LENGTH, NULL); entry->tuple = tuple; } } - - if(tuple != NULL && tuple_get_int(tuple, FIELD_MTIME, NULL) == -1) { // kick the scanner thread only if mtime = -1 (uninitialized). + + if (main_tuple) + tuple_free(main_tuple); + + if (tuple != NULL && tuple_get_int(tuple, FIELD_MTIME, NULL) == -1) { + // kick the scanner thread only if mtime = -1 (uninitialized) g_mutex_lock(mutex_scan); playlist_get_info_scan_active = TRUE; g_mutex_unlock(mutex_scan); @@ -771,24 +776,24 @@ if (playlist->loading_playlist == TRUE || cfg.playlist_detect == TRUE) dec = NULL; 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) - { + if (pr) { dec = pr->ip; tuple = pr->tuple; } - g_free(pr); } - 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"))) - { + 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"))) { __playlist_ins_with_info_tuple(playlist, filename, pos, tuple, dec); playlist_generate_shuffle_list(playlist); playlistwin_update_list(playlist); + playlist_manager_update(); return TRUE; } @@ -806,7 +811,7 @@ if (!vfs_file_test(filename, G_FILE_TEST_IS_REGULAR)) return FALSE; - if (!(file = vfs_fopen(filename, "rb"))) + if ((file = vfs_fopen(filename, "rb")) == NULL) return FALSE; r = vfs_fread(buf, 1, sizeof(buf), file); @@ -842,8 +847,7 @@ { DeviceInode *devino = g_new0(DeviceInode, 1); - if (devino) - { + if (devino) { devino->dev = device; devino->ino = inode; } @@ -1106,7 +1110,7 @@ playlist->position->length = length; // overwrite tuple::title, mainly for streaming. it may incur side effects. --yaz - if(playlist->position->tuple && tuple_get_int(playlist->position->tuple, FIELD_LENGTH, NULL) == -1){ + if (playlist->position->tuple && tuple_get_int(playlist->position->tuple, FIELD_LENGTH, NULL) == -1){ tuple_disassociate(playlist->position->tuple, FIELD_TITLE, NULL); tuple_associate_string(playlist->position->tuple, FIELD_TITLE, NULL, title); } @@ -1145,7 +1149,7 @@ mainwin_set_song_info(rate, freq, nch); - if ( playlist->position ) + if (playlist->position) hook_call( "playlist set info" , playlist->position ); } @@ -1183,13 +1187,13 @@ { GList *plist_pos_list; gboolean restart_playing = FALSE; + if (!playlist_get_length(playlist)) return; PLAYLIST_LOCK(playlist); - if ((playlist_position_before_jump != NULL) && playlist->queue == NULL) - { + if ((playlist_position_before_jump != NULL) && playlist->queue == NULL) { playlist->position = playlist_position_before_jump; playlist_position_before_jump = NULL; } @@ -1224,13 +1228,16 @@ else playlist->position = playlist->entries->data; } + PLAYLIST_UNLOCK(playlist); + playlist_check_pos_current(playlist); if (restart_playing) playback_initiate(); playlistwin_update_list(playlist); + playlist_manager_update(); } void @@ -1244,8 +1251,7 @@ PLAYLIST_LOCK(playlist); - if ((playlist_position_before_jump != NULL) && playlist->queue == NULL) - { + if ((playlist_position_before_jump != NULL) && playlist->queue == NULL) { playlist->position = playlist_position_before_jump; playlist_position_before_jump = NULL; } @@ -1291,6 +1297,8 @@ playback_initiate(); else playlistwin_update_list(playlist); + + playlist_manager_update(); } void @@ -1301,8 +1309,7 @@ PLAYLIST_LOCK(playlist); - if ((cfg.shuffle) && (playlist_position_before_jump == NULL)) - { + if ((cfg.shuffle) && (playlist_position_before_jump == NULL)) { /* Shuffling and this is our first manual jump. */ playlist_position_before_jump = playlist->position; } @@ -1577,13 +1584,11 @@ title = str_to_utf8(playlist->position->title); } else { - gchar *realfn = NULL; - gchar *basename = NULL; - realfn = g_filename_from_uri(playlist->position->filename, NULL, NULL); - basename = g_path_get_basename(realfn ? realfn : playlist->position->filename); + gchar *realfn = g_filename_from_uri(playlist->position->filename, NULL, NULL); + gchar *basename = g_path_get_basename(realfn ? realfn : playlist->position->filename); title = filename_to_utf8(basename); - g_free(realfn); realfn = NULL; - g_free(basename); basename = NULL; + g_free(realfn); + g_free(basename); } /* @@ -1693,7 +1698,7 @@ filename = g_strchug(g_strdup(filename_p)); - if(cfg.convert_slash) + if (cfg.convert_slash) while ((tmp = strchr(filename, '\\')) != NULL) *tmp = '/'; @@ -1761,7 +1766,7 @@ filename = g_strchug(g_strdup(filename_p)); - if(cfg.convert_slash) + if (cfg.convert_slash) while ((tmp = strchr(filename, '\\')) != NULL) *tmp = '/'; @@ -1844,6 +1849,7 @@ playlist_generate_shuffle_list(playlist); playlistwin_update_list(playlist); + playlist_manager_update(); return new_len - old_len; } @@ -1995,9 +2001,8 @@ if (!playlist) return -1; - if (!(node = g_list_nth(playlist->entries, pos))) { + if (!(node = g_list_nth(playlist->entries, pos))) return -1; - } entry = node->data; @@ -2011,10 +2016,8 @@ if (playlist_entry_get_info(entry)) song_time = entry->length; - } - else { + } else song_time = entry->length; - } return song_time; } @@ -2046,6 +2049,19 @@ tracknumber_a - tracknumber_b : 0); } +static void +playlist_get_entry_title(PlaylistEntry * e, const gchar ** title) +{ + if (e->title) + *title = e->title; + else { + if (strrchr(e->filename, '/')) + *title = strrchr(e->filename, '/') + 1; + else + *title = e->filename; + } +} + static gint playlist_compare_playlist(PlaylistEntry * a, PlaylistEntry * b) @@ -2054,24 +2070,9 @@ g_return_val_if_fail(a != NULL, 0); g_return_val_if_fail(b != NULL, 0); - - if (a->title != NULL) - a_title = a->title; - else { - if (strrchr(a->filename, '/')) - a_title = strrchr(a->filename, '/') + 1; - else - a_title = a->filename; - } - - if (b->title != NULL) - b_title = b->title; - else { - if (strrchr(a->filename, '/')) - b_title = strrchr(b->filename, '/') + 1; - else - b_title = b->filename; - } + + playlist_get_entry_title(a, &a_title); + playlist_get_entry_title(b, &b_title); return strcasecmp(a_title, b_title); } @@ -2085,9 +2086,9 @@ g_return_val_if_fail(a != NULL, 0); g_return_val_if_fail(b != NULL, 0); - if(!a->tuple) + if (a->tuple == NULL) playlist_entry_get_info(a); - if(!b->tuple) + if (b->tuple == NULL) playlist_entry_get_info(b); if (a->tuple != NULL) @@ -2098,23 +2099,8 @@ if (a_title != NULL && b_title != NULL) return strcasecmp(a_title, b_title); - if (a->title != NULL) - a_title = a->title; - else { - if (strrchr(a->filename, '/')) - a_title = strrchr(a->filename, '/') + 1; - else - a_title = a->filename; - } - - if (b->title != NULL) - b_title = b->title; - else { - if (strrchr(a->filename, '/')) - b_title = strrchr(b->filename, '/') + 1; - else - b_title = b->filename; - } + playlist_get_entry_title(a, &a_title); + playlist_get_entry_title(b, &b_title); return strcasecmp(a_title, b_title); } @@ -2817,23 +2803,8 @@ g_return_val_if_fail(a != NULL, 0); g_return_val_if_fail(b != NULL, 0); - if (a->title) - a_title = a->title; - else { - if (strrchr(a->filename, '/')) - a_title = strrchr(a->filename, '/') + 1; - else - a_title = a->filename; - } - - if (b->title) - b_title = b->title; - else { - if (strrchr(a->filename, '/')) - b_title = strrchr(b->filename, '/') + 1; - else - b_title = b->filename; - } + playlist_get_entry_title(a, &a_title); + playlist_get_entry_title(b, &b_title); return strcmp(a_title, b_title); } @@ -3358,6 +3329,7 @@ playlist_recalc_total_time(newpl); playlistwin_update_list(playlist); + playlist_manager_update(); return newpl; }
--- a/src/audacious/playlist_container.c Mon Sep 24 15:19:30 2007 +0300 +++ b/src/audacious/playlist_container.c Sun Sep 30 19:00:59 2007 +0300 @@ -40,7 +40,7 @@ registered_plcs = g_list_remove(registered_plcs, plc); } -PlaylistContainer *playlist_container_find(char *ext) +PlaylistContainer *playlist_container_find(gchar *ext) { GList *node; PlaylistContainer *plc; @@ -58,9 +58,9 @@ return NULL; } -void playlist_container_read(char *filename, gint pos) +void playlist_container_read(gchar *filename, gint pos) { - char *ext = strrchr(filename, '.') + 1; /* optimization: skip past the dot -nenolod */ + gchar *ext = strrchr(filename, '.') + 1; /* optimization: skip past the dot -nenolod */ PlaylistContainer *plc = playlist_container_find(ext); if (plc->plc_read == NULL) @@ -69,9 +69,9 @@ plc->plc_read(filename, pos); } -void playlist_container_write(char *filename, gint pos) +void playlist_container_write(gchar *filename, gint pos) { - char *ext = strrchr(filename, '.') + 1; /* optimization: skip past the dot -nenolod */ + gchar *ext = strrchr(filename, '.') + 1; /* optimization: skip past the dot -nenolod */ PlaylistContainer *plc = playlist_container_find(ext); if (plc->plc_write == NULL) @@ -80,9 +80,9 @@ plc->plc_write(filename, pos); } -gboolean is_playlist_name(char *filename) +gboolean is_playlist_name(gchar *filename) { - char *ext = strrchr(filename, '.') + 1; /* optimization: skip past the dot -nenolod */ + gchar *ext = strrchr(filename, '.') + 1; /* optimization: skip past the dot -nenolod */ PlaylistContainer *plc = playlist_container_find(ext); if (plc != NULL)
--- a/src/audacious/playlist_container.h Mon Sep 24 15:19:30 2007 +0300 +++ b/src/audacious/playlist_container.h Sun Sep 30 19:00:59 2007 +0300 @@ -25,8 +25,8 @@ G_BEGIN_DECLS struct _PlaylistContainer { - char *name; /* human-readable name */ - char *ext; /* extension */ + gchar *name; /* human-readable name */ + gchar *ext; /* extension */ void (*plc_read)(const gchar *filename, gint pos); /* plc_load */ void (*plc_write)(const gchar *filename, gint pos); /* plc_write */ }; @@ -37,9 +37,9 @@ extern void playlist_container_register(PlaylistContainer *plc); extern void playlist_container_unregister(PlaylistContainer *plc); -extern void playlist_container_read(char *filename, gint pos); -extern void playlist_container_write(char *filename, gint pos); -extern PlaylistContainer *playlist_container_find(char *ext); +extern void playlist_container_read(gchar *filename, gint pos); +extern void playlist_container_write(gchar *filename, gint pos); +extern PlaylistContainer *playlist_container_find(gchar *ext); G_END_DECLS
--- a/src/audacious/plugin.h Mon Sep 24 15:19:30 2007 +0300 +++ b/src/audacious/plugin.h Sun Sep 30 19:00:59 2007 +0300 @@ -284,11 +284,6 @@ /* So that input plugins can get the title formatting information */ G_CONST_RETURN gchar * get_gentitle_format(void); -/* So that output plugins can communicate with effect plugins */ -EffectPlugin *get_current_effect_plugin(void); -gboolean effects_enabled(void); -gboolean plugin_set_errortext(const gchar * text); - G_END_DECLS #include "audacious/mime.h"
--- a/src/audacious/pluginenum.c Mon Sep 24 15:19:30 2007 +0300 +++ b/src/audacious/pluginenum.c Sun Sep 30 19:00:59 2007 +0300 @@ -492,7 +492,7 @@ * prefix. We will only see one plugin with the same * basename, so this is usually what the user want. */ - if (!strcmp(g_basename(cfg.outputplugin), g_basename(op->filename))) + if (cfg.outputplugin && !strcmp(g_basename(cfg.outputplugin), g_basename(op->filename))) op_data.current_output_plugin = op; if (op->init) op->init();
--- a/src/audacious/skin.c Mon Sep 24 15:19:30 2007 +0300 +++ b/src/audacious/skin.c Sun Sep 30 19:00:59 2007 +0300 @@ -1473,11 +1473,8 @@ if (!g_file_test(path, G_FILE_TEST_IS_REGULAR | G_FILE_TEST_IS_DIR)) return FALSE; - if (!force) { - if (skin->path) - if (!strcmp(skin->path, path)) - return FALSE; - } + if (!force && skin->path && !strcmp(skin->path, path)) + return FALSE; skin_current_num++;
--- a/src/audacious/tuple.c Mon Sep 24 15:19:30 2007 +0300 +++ b/src/audacious/tuple.c Sun Sep 30 19:00:59 2007 +0300 @@ -112,6 +112,8 @@ mowgli_heap_free(tuple_value_heap, value); } + g_free(tuple->subtunes); + mowgli_heap_free(tuple_heap, tuple); TUPLE_UNLOCK_WRITE(); }
--- a/src/audacious/tuple.h Mon Sep 24 15:19:30 2007 +0300 +++ b/src/audacious/tuple.h Sun Sep 30 19:00:59 2007 +0300 @@ -82,6 +82,8 @@ mowgli_object_t parent; mowgli_dictionary_t *dict; TupleValue *values[FIELD_LAST]; + gint nsubtunes; + gint *subtunes; } Tuple;
--- a/src/audacious/ui_fileopener.c Mon Sep 24 15:19:30 2007 +0300 +++ b/src/audacious/ui_fileopener.c Sun Sep 30 19:00:59 2007 +0300 @@ -35,7 +35,6 @@ { GSList *cur; gchar *ptr; - guint ctr = 0; Playlist *playlist = playlist_get_active(); for (cur = files; cur; cur = g_slist_next(cur)) {
--- a/src/audacious/ui_main.c Mon Sep 24 15:19:30 2007 +0300 +++ b/src/audacious/ui_main.c Sun Sep 30 19:00:59 2007 +0300 @@ -134,10 +134,11 @@ static GtkWidget *mainwin_shuffle, *mainwin_repeat; GtkWidget *mainwin_eq, *mainwin_pl; -GtkWidget *mainwin_info, *mainwin_othertext; +GtkWidget *mainwin_info; GtkWidget *mainwin_stime_min, *mainwin_stime_sec; -static GtkWidget *mainwin_rate_text, *mainwin_freq_text; +static GtkWidget *mainwin_rate_text, *mainwin_freq_text, + *mainwin_othertext; GtkWidget *mainwin_playstatus; @@ -2446,7 +2447,6 @@ g_signal_connect(mainwin_info, "right-clicked", mainwin_info_right_clicked_cb, NULL); mainwin_othertext = ui_skinned_textbox_new(SKINNED_WINDOW(mainwin)->fixed, 112, 43, 153, 1, SKIN_TEXT); - ui_skinned_textbox_set_xfont(mainwin_othertext, cfg.mainwin_use_xfont, cfg.mainwin_font); mainwin_rate_text = ui_skinned_textbox_new(SKINNED_WINDOW(mainwin)->fixed, 111, 43, 15, 0, SKIN_TEXT);
--- a/src/audacious/ui_main.h Mon Sep 24 15:19:30 2007 +0300 +++ b/src/audacious/ui_main.h Sun Sep 30 19:00:59 2007 +0300 @@ -99,7 +99,7 @@ extern GtkWidget *mainwin_jtf; extern GtkWidget *mainwin_eq, *mainwin_pl; -extern GtkWidget *mainwin_info, *mainwin_othertext; +extern GtkWidget *mainwin_info; extern GtkWidget *mainwin_stime_min, *mainwin_stime_sec;
--- a/src/audacious/ui_playlist_manager.c Mon Sep 24 15:19:30 2007 +0300 +++ b/src/audacious/ui_playlist_manager.c Sun Sep 30 19:00:59 2007 +0300 @@ -41,18 +41,24 @@ { PLLIST_COL_NAME = 0, PLLIST_COL_ENTRIESNUM, - PLLIST_COL_PLPOINTER, + PLLIST_PLPOINTER, + PLLIST_TEXT_WEIGHT, PLLIST_NUMCOLS }; -static void +static GtkTreeIter playlist_manager_populate ( GtkListStore * store ) { GList *playlists = NULL; - GtkTreeIter iter; + Playlist *active, *iter_playlist, *next_playlist; + GtkTreeIter iter, insert, next, active_iter; + gboolean valid, have_active_iter; + active = playlist_get_active(); playlists = playlist_get_playlists(); + valid = gtk_tree_model_get_iter_first( GTK_TREE_MODEL(store) , &iter ); + have_active_iter = FALSE; while ( playlists != NULL ) { GList *entries = NULL; @@ -67,14 +73,75 @@ entriesnum++; PLAYLIST_UNLOCK(playlist); - gtk_list_store_append( store , &iter ); - gtk_list_store_set( store, &iter, + /* update the tree model conservatively */ + + if ( !valid ) + { + /* append */ + gtk_list_store_append( store , &insert ); + goto store_set; + } + + gtk_tree_model_get( GTK_TREE_MODEL(store) , &iter , + PLLIST_PLPOINTER , &iter_playlist , -1 ); + + if ( playlist == iter_playlist ) + { + /* already have - just update */ + insert = iter; + valid = gtk_tree_model_iter_next( GTK_TREE_MODEL(store) , &iter ); + goto store_set; + } + + /* handle movement/deletion/insertion of single elements */ + if ( gtk_tree_model_iter_next( GTK_TREE_MODEL(store) , &next ) ) + { + gtk_tree_model_get( GTK_TREE_MODEL(store) , &next , + PLLIST_PLPOINTER , &next_playlist , -1 ); + if ( playlist == next_playlist ) + { + /* remove */ + gtk_list_store_remove( store , &iter ); + iter = next; + valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(store), &iter); + goto next_playlist; + } + } + + /* insert */ + gtk_list_store_insert_before( store , &insert , &iter ); + +store_set: + gtk_list_store_set( store, &insert, PLLIST_COL_NAME , pl_name , PLLIST_COL_ENTRIESNUM , entriesnum , - PLLIST_COL_PLPOINTER , playlist , -1 ); + PLLIST_PLPOINTER , playlist , + PLLIST_TEXT_WEIGHT , playlist == active ? + PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL , + -1 ); + if ( !have_active_iter && playlist == active ) + { + active_iter = insert; + have_active_iter = TRUE; + } + +next_playlist: playlists = g_list_next(playlists); } - return; + + while (valid) + { + /* remove any other elements */ + next = iter; + valid = gtk_tree_model_iter_next( GTK_TREE_MODEL(store) , &next ); + gtk_list_store_remove( store , &iter ); + iter = next; + } + + if ( !have_active_iter ) + gtk_tree_model_get_iter_first( GTK_TREE_MODEL(store) , &active_iter ); + + return active_iter; } @@ -101,7 +168,9 @@ gtk_list_store_set( store, &iter, PLLIST_COL_NAME , pl_name , PLLIST_COL_ENTRIESNUM , 0 , - PLLIST_COL_PLPOINTER , newpl , -1 ); + PLLIST_PLPOINTER , newpl , + PLLIST_TEXT_WEIGHT , PANGO_WEIGHT_NORMAL , + -1 ); ENABLE_MANAGER_UPDATE(); @@ -115,11 +184,16 @@ GtkTreeSelection *listsel = gtk_tree_view_get_selection( GTK_TREE_VIEW(listview) ); GtkTreeModel *store; GtkTreeIter iter; + Playlist *active; + gboolean was_active; if ( gtk_tree_selection_get_selected( listsel , &store , &iter ) == TRUE ) { Playlist *playlist = NULL; - gtk_tree_model_get( store, &iter, PLLIST_COL_PLPOINTER , &playlist , -1 ); + gtk_tree_model_get( store, &iter, PLLIST_PLPOINTER , &playlist , -1 ); + + active = playlist_get_active(); + was_active = ( playlist == active ); if ( gtk_tree_model_iter_n_children( store , NULL ) < 2 ) { @@ -135,6 +209,20 @@ playlist_remove_playlist( playlist ); ENABLE_MANAGER_UPDATE(); } + + if ( was_active && gtk_tree_model_get_iter_first( store , &iter ) ) + { + /* update bolded playlist */ + active = playlist_get_active(); + do { + gtk_tree_model_get( store , &iter , + PLLIST_PLPOINTER , &playlist , -1 ); + gtk_list_store_set( GTK_LIST_STORE(store) , &iter , + PLLIST_TEXT_WEIGHT , playlist == active ? + PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL , + -1 ); + } while ( gtk_tree_model_iter_next( store , &iter ) ); + } } return; @@ -142,18 +230,34 @@ static void -playlist_manager_cb_lv_dclick ( GtkTreeView * lv , GtkTreePath * path , +playlist_manager_cb_lv_dclick ( GtkTreeView * listview , GtkTreePath * path , GtkTreeViewColumn * col , gpointer userdata ) { GtkTreeModel *store; GtkTreeIter iter; + Playlist *playlist = NULL, *active; - store = gtk_tree_view_get_model( GTK_TREE_VIEW(lv) ); + store = gtk_tree_view_get_model( GTK_TREE_VIEW(listview) ); if ( gtk_tree_model_get_iter( store , &iter , path ) == TRUE ) { - Playlist *playlist = NULL; - gtk_tree_model_get( store , &iter , PLLIST_COL_PLPOINTER , &playlist , -1 ); + gtk_tree_model_get( store , &iter , PLLIST_PLPOINTER , &playlist , -1 ); + DISABLE_MANAGER_UPDATE(); playlist_select_playlist( playlist ); + ENABLE_MANAGER_UPDATE(); + } + + if ( gtk_tree_model_get_iter_first( store , &iter ) ) + { + /* update bolded playlist */ + active = playlist_get_active(); + do { + gtk_tree_model_get( store , &iter , + PLLIST_PLPOINTER , &playlist , -1 ); + gtk_list_store_set( GTK_LIST_STORE(store) , &iter , + PLLIST_TEXT_WEIGHT , playlist == active ? + PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL , + -1 ); + } while ( gtk_tree_model_iter_next( store , &iter ) ); } return; @@ -181,17 +285,19 @@ static void playlist_manager_cb_lv_name_edited ( GtkCellRendererText *cell , gchar *path_string , - gchar *new_text , gpointer lv ) + gchar *new_text , gpointer listview ) { /* this is currently used to change playlist names */ - GtkTreeModel *store = gtk_tree_view_get_model( GTK_TREE_VIEW(lv) ); + GtkTreeModel *store = gtk_tree_view_get_model( GTK_TREE_VIEW(listview) ); GtkTreeIter iter; if ( gtk_tree_model_get_iter_from_string( store , &iter , path_string ) == TRUE ) { Playlist *playlist = NULL; - gtk_tree_model_get( GTK_TREE_MODEL(store), &iter, PLLIST_COL_PLPOINTER , &playlist , -1 ); + gtk_tree_model_get( GTK_TREE_MODEL(store), &iter, PLLIST_PLPOINTER , &playlist , -1 ); + DISABLE_MANAGER_UPDATE(); playlist_set_current_name( playlist , new_text ); + ENABLE_MANAGER_UPDATE(); gtk_list_store_set( GTK_LIST_STORE(store), &iter, PLLIST_COL_NAME , new_text , -1 ); } /* set the renderer uneditable again */ @@ -241,6 +347,8 @@ GtkWidget *playman_bbar_hbbox; GtkWidget *playman_bbar_bt_new, *playman_bbar_bt_del, *playman_bbar_bt_close; GdkGeometry playman_win_hints; + GtkTreeIter active_iter; + GtkTreePath *active_path; if ( playman_win != NULL ) { @@ -271,27 +379,37 @@ G_TYPE_STRING -> playlist name G_TYPE_UINT -> number of entries in playlist G_TYPE_POINTER -> playlist pointer (Playlist*) + PANGO_TYPE_WEIGHT -> font weight ---------------------------------------------- */ - pl_store = gtk_list_store_new( PLLIST_NUMCOLS , G_TYPE_STRING , G_TYPE_UINT , G_TYPE_POINTER ); - playlist_manager_populate( pl_store ); + pl_store = gtk_list_store_new( PLLIST_NUMCOLS , + G_TYPE_STRING , G_TYPE_UINT , G_TYPE_POINTER , PANGO_TYPE_WEIGHT ); + active_iter = playlist_manager_populate( pl_store ); playman_pl_lv_frame = gtk_frame_new( NULL ); playman_pl_lv = gtk_tree_view_new_with_model( GTK_TREE_MODEL(pl_store) ); - g_object_unref( pl_store ); + g_object_set_data( G_OBJECT(playman_win) , "lv" , playman_pl_lv ); g_object_set_data( G_OBJECT(playman_pl_lv) , "opt1" , GINT_TO_POINTER(0) ); playman_pl_lv_textrndr_entriesnum = gtk_cell_renderer_text_new(); /* uneditable */ playman_pl_lv_textrndr_name = gtk_cell_renderer_text_new(); /* can become editable */ + g_object_set( G_OBJECT(playman_pl_lv_textrndr_entriesnum) , "weight-set" , TRUE , NULL ); + g_object_set( G_OBJECT(playman_pl_lv_textrndr_name) , "weight-set" , TRUE , NULL ); g_signal_connect( G_OBJECT(playman_pl_lv_textrndr_name) , "edited" , G_CALLBACK(playlist_manager_cb_lv_name_edited) , playman_pl_lv ); g_object_set_data( G_OBJECT(playman_pl_lv) , "rn" , playman_pl_lv_textrndr_name ); playman_pl_lv_col_name = gtk_tree_view_column_new_with_attributes( - _("Playlist") , playman_pl_lv_textrndr_name , "text" , PLLIST_COL_NAME , NULL ); + _("Playlist") , playman_pl_lv_textrndr_name , + "text" , PLLIST_COL_NAME , + "weight", PLLIST_TEXT_WEIGHT , + NULL ); gtk_tree_view_column_set_expand( GTK_TREE_VIEW_COLUMN(playman_pl_lv_col_name) , TRUE ); gtk_tree_view_append_column( GTK_TREE_VIEW(playman_pl_lv), playman_pl_lv_col_name ); playman_pl_lv_col_entriesnum = gtk_tree_view_column_new_with_attributes( - _("Entries") , playman_pl_lv_textrndr_entriesnum , "text" , PLLIST_COL_ENTRIESNUM , NULL ); + _("Entries") , playman_pl_lv_textrndr_entriesnum , + "text" , PLLIST_COL_ENTRIESNUM , + "weight", PLLIST_TEXT_WEIGHT , + NULL ); gtk_tree_view_column_set_expand( GTK_TREE_VIEW_COLUMN(playman_pl_lv_col_entriesnum) , FALSE ); gtk_tree_view_append_column( GTK_TREE_VIEW(playman_pl_lv), playman_pl_lv_col_entriesnum ); playman_pl_lv_sw = gtk_scrolled_window_new( NULL , NULL ); @@ -337,6 +455,17 @@ g_signal_connect_swapped( G_OBJECT(playman_bbar_bt_close) , "clicked" , G_CALLBACK(gtk_widget_destroy) , playman_win ); + /* have active playlist selected and scrolled to */ + active_path = gtk_tree_model_get_path( GTK_TREE_MODEL(pl_store) , + &active_iter ); + gtk_tree_view_set_cursor( GTK_TREE_VIEW(playman_pl_lv) , + active_path , NULL , FALSE ); + gtk_tree_view_scroll_to_cell( GTK_TREE_VIEW(playman_pl_lv) , + active_path , NULL , TRUE , 0.5 , 0.0 ); + gtk_tree_path_free( active_path ); + + g_object_unref( pl_store ); + gtk_widget_show_all( playman_win ); } @@ -356,8 +485,6 @@ if ( GPOINTER_TO_INT(g_object_get_data(G_OBJECT(lv),"opt1")) == 0 ) { GtkListStore *store = (GtkListStore*)gtk_tree_view_get_model( GTK_TREE_VIEW(lv) ); - /* TODO: this re-populates everything... there's definitely room for optimization */ - gtk_list_store_clear( store ); playlist_manager_populate( store ); } return;
--- a/src/audacious/ui_preferences.c Mon Sep 24 15:19:30 2007 +0300 +++ b/src/audacious/ui_preferences.c Sun Sep 30 19:00:59 2007 +0300 @@ -585,7 +585,6 @@ cfg.mainwin_font = g_strdup(gtk_font_button_get_font_name(button)); ui_skinned_textbox_set_xfont(mainwin_info, cfg.mainwin_use_xfont, cfg.mainwin_font); - ui_skinned_textbox_set_xfont(mainwin_othertext, cfg.mainwin_use_xfont, cfg.mainwin_font); } static void @@ -603,7 +602,6 @@ gboolean useit = gtk_toggle_button_get_active(button); cfg.mainwin_use_xfont = useit != FALSE ? FALSE : TRUE; ui_skinned_textbox_set_xfont(mainwin_info, cfg.mainwin_use_xfont, cfg.mainwin_font); - ui_skinned_textbox_set_xfont(mainwin_othertext, cfg.mainwin_use_xfont, cfg.mainwin_font); playlistwin_set_sinfo_font(cfg.playlist_font); if (cfg.playlist_shaded) {
--- a/src/audacious/util.c Mon Sep 24 15:19:30 2007 +0300 +++ b/src/audacious/util.c Sun Sep 30 19:00:59 2007 +0300 @@ -308,7 +308,7 @@ return NULL; } #else - tmpdir = g_strdup_printf("%s/audacious.%ld", g_get_tmp_dir(), rand()); + tmpdir = g_strdup_printf("%s/audacious.%ld", g_get_tmp_dir(), (long) rand()); make_directory(tmpdir, mode755); #endif
--- a/src/libguess/cjk_impl.c Mon Sep 24 15:19:30 2007 +0300 +++ b/src/libguess/cjk_impl.c Sun Sep 30 19:00:59 2007 +0300 @@ -38,7 +38,6 @@ */ #include "libguess.h" -#define NULL ((void *)0) /* take precedence if scores are same. you can customize the order as: */ /* ORDER_** &highest, &second, ... &lowest */