summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar waker <wakeroid@gmail.com>2011-06-21 22:14:26 +0200
committerGravatar waker <wakeroid@gmail.com>2011-06-21 22:14:26 +0200
commit075630822d06d0899a1f4b98ef0d7e6008924cbf (patch)
treeba511f7c1cd9c2e7f27ad125d0c3c713a66f7b46
parent50da0b3061e54f743e6199808182d262247d3af6 (diff)
parent9a2c56ec13bc7ccac17819b8b54bd6c32951dac0 (diff)
Merge branch 'medialib' into devel
-rw-r--r--conf.c3
-rw-r--r--configure.ac22
-rw-r--r--deadbeef.desktop.in1
-rw-r--r--deadbeef.h13
-rw-r--r--examples/dsp_template.c1
-rw-r--r--junklib.c1
-rw-r--r--main.c8
-rw-r--r--metacache.c12
-rw-r--r--metacache.h6
-rw-r--r--playlist.c36
-rw-r--r--playlist.h10
-rw-r--r--plugins.c34
-rw-r--r--plugins/aac/aac.c2
-rw-r--r--plugins/ao/Makefile4
-rw-r--r--plugins/ao/main.c2
-rw-r--r--plugins/ao/plugin.c8
-rw-r--r--plugins/artwork/albumartorg.c3
-rw-r--r--plugins/artwork/artwork.c8
-rw-r--r--plugins/artwork/lastfm.c3
-rw-r--r--plugins/converter/Makefile.am17
-rw-r--r--plugins/converter/converter.c2
-rw-r--r--plugins/converter/convgui.c2
-rw-r--r--plugins/dumb/Makefile6
-rw-r--r--plugins/dumb/cdumb.c4
-rw-r--r--plugins/ffap/Makefile.am21
-rw-r--r--plugins/ffap/asm.S84
-rw-r--r--plugins/ffap/dsputil_yasm.asm423
-rw-r--r--plugins/ffap/ffap.c143
-rw-r--r--plugins/ffap/int_neon.S118
-rw-r--r--plugins/ffap/x86inc.asm625
-rw-r--r--plugins/gtkui/Makefile.am3
-rw-r--r--plugins/gtkui/callbacks.c53
-rw-r--r--plugins/gtkui/callbacks.h4
-rw-r--r--plugins/gtkui/ddblistview.c41
-rw-r--r--plugins/gtkui/ddbtabstrip.c37
-rw-r--r--plugins/gtkui/deadbeef.glade83
-rw-r--r--plugins/gtkui/fileman.c16
-rw-r--r--plugins/gtkui/gtkui.c179
-rw-r--r--plugins/gtkui/gtkui.h7
-rw-r--r--plugins/gtkui/gtkui_api.h27
-rw-r--r--plugins/gtkui/interface.c130
-rw-r--r--plugins/gtkui/mainplaylist.c5
-rw-r--r--plugins/gtkui/mainplaylist.h5
-rw-r--r--plugins/gtkui/prefwin.c30
-rw-r--r--plugins/gtkui/widgets.c975
-rw-r--r--plugins/gtkui/widgets.h81
-rw-r--r--plugins/hotkeys/hotkeys.c2
-rw-r--r--plugins/mms/libmms/bswap.h11
-rw-r--r--plugins/mono2stereo/Makefile4
-rw-r--r--plugins/mono2stereo/mono2stereo.c3
-rw-r--r--plugins/musepack/musepack.c3
-rw-r--r--plugins/shellexec/shellexec.c4
-rw-r--r--plugins/shn/Makefile7
-rw-r--r--plugins/shn/shn.c4
-rw-r--r--plugins/shn/shn.h2
-rw-r--r--plugins/sid/csid.cpp45
-rw-r--r--plugins/sndfile/sndfile.c7
-rw-r--r--plugins/vfs_curl/vfs_curl.c6
-rw-r--r--plugins/vorbis/vorbis.c6
-rw-r--r--plugins/wildmidi/src/wildmidi_lib.c5
-rw-r--r--po/nl.po430
-rw-r--r--po/pt.po133
-rw-r--r--po/pt_BR.po929
-rw-r--r--po/ru.po2
-rw-r--r--po/te.po1166
-rwxr-xr-xscripts/portable_package_static.sh1
-rwxr-xr-xscripts/portable_postbuild.sh4
-rwxr-xr-xscripts/quickinstall.sh1
-rw-r--r--streamer.c1
-rw-r--r--streamer.h6
-rw-r--r--utf8.c6
-rw-r--r--vfs_stdio.c1
-rwxr-xr-xyasmwrapper.sh10
73 files changed, 4820 insertions, 1277 deletions
diff --git a/conf.c b/conf.c
index 887ad053..f875d349 100644
--- a/conf.c
+++ b/conf.c
@@ -52,7 +52,10 @@ conf_free (void) {
next = it->next;
conf_item_free (it);
}
+ conf_items = NULL;
+ changed = 0;
mutex_free (mutex);
+ mutex = 0;
}
int
diff --git a/configure.ac b/configure.ac
index 2f15a13b..493926ec 100644
--- a/configure.ac
+++ b/configure.ac
@@ -35,6 +35,7 @@ case "$host" in
i386-*-* | i486-*-* | i586-*-* | i686-*-* | i86pc-*-*)
AC_DEFINE(ARCH_X86_32, 1, [architecture is x86])
LIB="../deadbeef-deps/lib-x86-32"
+ YASM_FLAGS="-f elf -D ARCH_X86_32 -m x86"
;;
x86_64-apple-*)
AC_DEFINE(ARCH_X86_64_OSX, 1, [architecture is x86_64 for OSX])
@@ -43,6 +44,7 @@ case "$host" in
x86_64-*-* | amd64-*-*)
AC_DEFINE(ARCH_X86_64, 1, [architecture is x86_64])
LIB="../deadbeef-deps/lib-x86-64"
+ YASM_FLAGS="-f elf -D ARCH_X86_64 -m amd64"
;;
powerpc-*-* )
AC_DEFINE(ARCH_PPC_32, 1, [architecture is ppc32])
@@ -57,6 +59,7 @@ case "$host" in
;;
esac
AC_SUBST(LIB)
+AC_SUBST(YASM_FLAGS)
test "x$prefix" = xNONE && prefix=$ac_default_prefix
@@ -105,15 +108,24 @@ AC_ARG_ENABLE(m3u, [AS_HELP_STRING([--enable-m3u ], [build m3u plugin
AC_ARG_ENABLE(vfs-zip, [AS_HELP_STRING([--enable-vfs-zip ], [build vfs_zip plugin (default: auto)])], [enable_vfs_zip=$enableval], [enable_vfs_zip=yes])
AC_ARG_ENABLE(converter, [AS_HELP_STRING([--enable-converter ], [build converter plugin (default: auto)])], [enable_converter=$enableval], [enable_converter=yes])
AC_ARG_ENABLE(artwork-imlib2, [AS_HELP_STRING([--enable-artwork-imlib2 ], [use imlib2 in artwork plugin (default: auto)])], [enable_artwork_imlib2=$enableval], [enable_artwork_imlib2=yes])
+AC_ARG_ENABLE(medialib, [AS_HELP_STRING([--enable-medialib ], [build medialibrary plugin (default: auto)])], [enable_medialib=$enableval], [enable_medialib=yes])
if test "x$enable_staticlink" != "xno" ; then
AC_DEFINE_UNQUOTED([STATICLINK], [1], [Define if building static version])
STATICLINK=yes
fi
+dnl check for yasm
+AC_CHECK_PROG(HAVE_YASM, yasm, yes, no)
+
dnl check for libdl
AC_CHECK_LIB([dl], [main], [HAVE_DL=yes;DL_LIBS="-ldl";AC_SUBST(DL_LIBS)])
+dnl check libsocket (OpenIndiana)
+AC_CHECK_LIB([socket], [main], [HAVE_SOCKET=yes;DL_LIBS="-lsocket";AC_SUBST(DL_LIBS)])
+dnl check for seperate alloca.h (OpenIndiana)
+AC_CHECK_HEADER([alloca.h],[],[alloca.h not found.])
+
if test "x$enable_portable" != "xno" && test "x$enable_staticlink" != "xno" ; then
AC_DEFINE_UNQUOTED([PORTABLE], [1], [Define if building portable version])
PORTABLE=yes
@@ -538,7 +550,11 @@ if test "x$enable_converter" != "xno" ; then
fi
fi
-PLUGINS_DIRS="plugins/lastfm plugins/mpgmad plugins/vorbis plugins/flac plugins/wavpack plugins/sndfile plugins/vfs_curl plugins/cdda plugins/gtkui plugins/alsa plugins/ffmpeg plugins/hotkeys plugins/oss plugins/artwork plugins/adplug plugins/ffap plugins/sid plugins/nullout plugins/supereq plugins/vtx plugins/gme plugins/pulse plugins/notify plugins/musepack plugins/wildmidi plugins/tta plugins/dca plugins/aac plugins/mms plugins/shellexec plugins/dsp_libsrc plugins/m3u plugins/vfs_zip plugins/converter"
+if test "x$enable_medialib" != "xno" ; then
+ HAVE_MEDIALIB=yes
+fi
+
+PLUGINS_DIRS="plugins/lastfm plugins/mpgmad plugins/vorbis plugins/flac plugins/wavpack plugins/sndfile plugins/vfs_curl plugins/cdda plugins/gtkui plugins/alsa plugins/ffmpeg plugins/hotkeys plugins/oss plugins/artwork plugins/adplug plugins/ffap plugins/sid plugins/nullout plugins/supereq plugins/vtx plugins/gme plugins/pulse plugins/notify plugins/musepack plugins/wildmidi plugins/tta plugins/dca plugins/aac plugins/mms plugins/shellexec plugins/dsp_libsrc plugins/m3u plugins/vfs_zip plugins/converter plugins/medialib"
AM_CONDITIONAL(HAVE_VORBIS, test "x$HAVE_VORBISPLUGIN" = "xyes")
AM_CONDITIONAL(HAVE_FLAC, test "x$HAVE_FLACPLUGIN" = "xyes")
@@ -580,6 +596,8 @@ AM_CONDITIONAL(HAVE_CONVERTER, test "x$HAVE_CONVERTER" = "xyes")
AM_CONDITIONAL(HAVE_IMLIB2, test "x$HAVE_IMLIB2" = "xyes")
AM_CONDITIONAL(HAVE_JPEG, test "x$HAVE_JPEG" = "xyes")
AM_CONDITIONAL(HAVE_PNG, test "x$HAVE_PNG" = "xyes")
+AM_CONDITIONAL(HAVE_YASM, test "x$HAVE_YASM" = "xyes")
+AM_CONDITIONAL(HAVE_MEDIALIB, test "x$HAVE_MEDIALIB" = "xyes")
AC_SUBST(PLUGINS_DIRS)
@@ -641,6 +659,7 @@ PRINT_PLUGIN_INFO([dsp_src],[High quality samplerate conversion using libsampler
PRINT_PLUGIN_INFO([m3u],[M3U and PLS playlist support],[test "x$HAVE_M3U" = "xyes"])
PRINT_PLUGIN_INFO([vfs_zip],[zip archive support],[test "x$HAVE_VFS_ZIP" = "xyes"])
PRINT_PLUGIN_INFO([converter],[plugin for converting files to any formats],[test "x$HAVE_CONVERTER" = "xyes"])
+PRINT_PLUGIN_INFO([medialib],[media library support plugin],[test "x$HAVE_MEDIALIB" = "xyes"])
echo
@@ -682,6 +701,7 @@ plugins/dsp_libsrc/Makefile
plugins/m3u/Makefile
plugins/vfs_zip/Makefile
plugins/converter/Makefile
+plugins/medialib/Makefile
intl/Makefile
po/Makefile.in
deadbeef.desktop
diff --git a/deadbeef.desktop.in b/deadbeef.desktop.in
index 396e8ed1..3149fbd8 100644
--- a/deadbeef.desktop.in
+++ b/deadbeef.desktop.in
@@ -1,5 +1,4 @@
[Desktop Entry]
-Encoding=UTF-8
Name=DeaDBeeF
GenericName=Audio Player
GenericName[pt_BR]=Reprodutor de áudio
diff --git a/deadbeef.h b/deadbeef.h
index 10f50422..ffc40608 100644
--- a/deadbeef.h
+++ b/deadbeef.h
@@ -76,7 +76,7 @@ extern "C" {
// 0.1 -- deadbeef-0.2.0
#define DB_API_VERSION_MAJOR 1
-#define DB_API_VERSION_MINOR 1
+#define DB_API_VERSION_MINOR 2
#define DDB_PLUGIN_SET_API_VERSION\
.plugin.api_vmajor = DB_API_VERSION_MAJOR,\
@@ -725,6 +725,17 @@ typedef struct {
int (*dsp_preset_load) (const char *fname, struct ddb_dsp_context_s **head);
int (*dsp_preset_save) (const char *fname, struct ddb_dsp_context_s *head);
void (*dsp_preset_free) (struct ddb_dsp_context_s *head);
+
+ // new 1.2 APIs
+ ddb_playlist_t *(*plt_alloc) (const char *title);
+ void (*plt_free) (ddb_playlist_t *plt);
+ //int (*plt_insert) (ddb_playlist_t *plt, int before);
+ void (*plt_set_fast_mode) (ddb_playlist_t *plt, int fast);
+ int (*plt_is_fast_mode) (ddb_playlist_t *plt);
+ const char * (*metacache_add_string) (const char *str);
+ void (*metacache_remove_string) (const char *str);
+ void (*metacache_ref) (const char *str);
+ void (*metacache_unref) (const char *str);
} DB_functions_t;
enum {
diff --git a/examples/dsp_template.c b/examples/dsp_template.c
index d78d7531..dd65cc3a 100644
--- a/examples/dsp_template.c
+++ b/examples/dsp_template.c
@@ -116,6 +116,7 @@ static DB_dsp_t plugin = {
.plugin.name = "example",
.plugin.descr = "example DSP Plugin",
.plugin.copyright = "copyright message - author(s), license, etc",
+ .plugin.website = "http://example.com",
.num_params = example_num_params,
.get_param_name = example_get_param_name,
.set_param = example_set_param,
diff --git a/junklib.c b/junklib.c
index 086cc44e..2ec2feb8 100644
--- a/junklib.c
+++ b/junklib.c
@@ -2999,6 +2999,7 @@ junk_id3v2_read_full (playItem_t *it, DB_id3v2_tag_t *tag_store, DB_FILE *fp) {
uint8_t *tag = malloc (size);
if (!tag) {
fprintf (stderr, "junklib: out of memory while reading id3v2, tried to alloc %d bytes\n", size);
+ goto error;
}
if (deadbeef->fread (tag, 1, size, fp) != size) {
goto error; // bad size
diff --git a/main.c b/main.c
index 2a4d220e..db8205fa 100644
--- a/main.c
+++ b/main.c
@@ -15,6 +15,9 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
#include <stdio.h>
#include <stdint.h>
#include <string.h>
@@ -26,7 +29,7 @@
#include <sys/prctl.h>
#endif
#ifndef __linux__
-#define _POSIX_C_SOURCE
+#define _POSIX_C_SOURCE 1
#endif
#include <limits.h>
#include <errno.h>
@@ -41,9 +44,6 @@
#ifdef __linux__
#include <execinfo.h>
#endif
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
#include <unistd.h>
#include "gettext.h"
#include "playlist.h"
diff --git a/metacache.c b/metacache.c
index 84acaa91..13616516 100644
--- a/metacache.c
+++ b/metacache.c
@@ -114,3 +114,15 @@ metacache_remove_string (const char *str) {
chain = chain->next;
}
}
+
+void
+metacache_ref (const char *str) {
+ uint32_t *refc = (uint32_t)(str-5);
+ *refc++;
+}
+
+void
+metacache_unref (const char *str) {
+ uint32_t *refc = (uint32_t *)(str-5);
+ *refc--;
+}
diff --git a/metacache.h b/metacache.h
index b5187c0f..50c5cb7f 100644
--- a/metacache.h
+++ b/metacache.h
@@ -25,4 +25,10 @@ metacache_add_string (const char *str);
void
metacache_remove_string (const char *str);
+void
+metacache_ref (const char *str);
+
+void
+metacache_unref (const char *str);
+
#endif
diff --git a/playlist.c b/playlist.c
index 6b148872..da4ea15f 100644
--- a/playlist.c
+++ b/playlist.c
@@ -18,6 +18,9 @@
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
+#ifdef HAVE_ALLOCA_H
+# include <alloca.h>
+#endif
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
@@ -31,7 +34,7 @@
#include <time.h>
#include <sys/time.h>
#ifndef __linux__
-#define _POSIX_C_SOURCE
+#define _POSIX_C_SOURCE 1
#endif
#include <limits.h>
#include <errno.h>
@@ -109,7 +112,7 @@ static playlist_t *addfiles_playlist; // current playlist for adding files/folde
void
pl_set_order (int order) {
- if (pl_order != order && (pl_order == PLAYBACK_ORDER_SHUFFLE_TRACKS || pl_order == PLAYBACK_ORDER_SHUFFLE_ALBUMS)) {
+ if (pl_order != order || pl_order == PLAYBACK_ORDER_SHUFFLE_TRACKS || pl_order == PLAYBACK_ORDER_SHUFFLE_ALBUMS) {
pl_order = order;
for (playlist_t *plt = playlists_head; plt; plt = plt->next) {
plt_reshuffle (plt, NULL, NULL);
@@ -162,6 +165,7 @@ pl_free (void) {
mutex_plt = 0;
}
#endif
+ playlist = NULL;
}
#if DEBUG_LOCKING
@@ -323,6 +327,15 @@ plt_get_sel_count (int plt) {
return 0;
}
+playlist_t *
+plt_alloc (const char *title) {
+ playlist_t *plt = malloc (sizeof (playlist_t));
+ memset (plt, 0, sizeof (playlist_t));
+ plt->refc = 1;
+ plt->title = strdup (title);
+ return plt;
+}
+
int
plt_add (int before, const char *title) {
assert (before >= 0);
@@ -331,10 +344,7 @@ plt_add (int before, const char *title) {
fprintf (stderr, "can't create more than 100 playlists. sorry.\n");
return -1;
}
- playlist_t *plt = malloc (sizeof (playlist_t));
- memset (plt, 0, sizeof (playlist_t));
- plt->refc = 1;
- plt->title = strdup (title);
+ playlist_t *plt = plt_alloc (title);
plt_modified (plt);
LOCK;
@@ -394,7 +404,7 @@ plt_add (int before, const char *title) {
conf_save ();
messagepump_push (DB_EV_PLAYLISTSWITCHED, 0, 0, 0);
}
- return playlists_count-1;
+ return before;
}
// NOTE: caller must ensure that configuration is saved after that call
@@ -976,7 +986,7 @@ plt_process_cue_track (playlist_t *playlist, playItem_t *after, const char *fnam
pl_set_item_replaygain (it, DDB_REPLAYGAIN_TRACKPEAK, atof (replaygain_track_peak));
}
it->_flags |= DDB_IS_SUBTRACK | DDB_TAG_CUESHEET;
- after = pl_insert_item (after, it);
+ after = plt_insert_item (playlist, after, it);
pl_item_unref (it);
*prev = it;
return it;
@@ -3893,3 +3903,13 @@ plt_init_shuffle_albums (playlist_t *plt, int r) {
}
pl_unlock ();
}
+
+void
+plt_set_fast_mode (playlist_t *plt, int fast) {
+ plt->fast_mode = (unsigned)fast;
+}
+
+int
+plt_is_fast_mode (playlist_t *plt) {
+ return plt->fast_mode;
+}
diff --git a/playlist.h b/playlist.h
index 23f74459..2f9a9d6a 100644
--- a/playlist.h
+++ b/playlist.h
@@ -56,6 +56,7 @@ typedef struct playlist_s {
int current_row[PL_MAX_ITERATORS]; // current row (cursor)
struct DB_metaInfo_s *meta; // linked list storing metainfo
int refc;
+ unsigned fast_mode : 1;
} playlist_t;
// global playlist control functions
@@ -92,6 +93,9 @@ plt_ref (playlist_t *plt);
void
plt_unref (playlist_t *plt);
+playlist_t *
+plt_alloc (const char *title);
+
void
plt_free (playlist_t *plt);
@@ -437,4 +441,10 @@ pl_get_playlist (playItem_t *it);
void
plt_init_shuffle_albums (playlist_t *plt, int r);
+void
+plt_set_fast_mode (playlist_t *plt, int fast);
+
+int
+plt_is_fast_mode (playlist_t *plt);
+
#endif // __PLAYLIST_H
diff --git a/plugins.c b/plugins.c
index e4198b90..23a9a1b1 100644
--- a/plugins.c
+++ b/plugins.c
@@ -24,7 +24,7 @@
//#include <alloca.h>
#include <string.h>
#ifndef __linux__
-#define _POSIX_C_SOURCE
+#define _POSIX_C_SOURCE 1
#endif
#include <limits.h>
#ifdef HAVE_CONFIG_H
@@ -45,6 +45,7 @@
#include "premix.h"
#include "dsppreset.h"
#include "pltmeta.h"
+#include "metacache.h"
#define trace(...) { fprintf(stderr, __VA_ARGS__); }
//#define trace(fmt,...)
@@ -316,7 +317,17 @@ static DB_functions_t deadbeef_api = {
// dsp preset management
.dsp_preset_load = dsp_preset_load,
.dsp_preset_save = dsp_preset_save,
- .dsp_preset_free = dsp_preset_free
+ .dsp_preset_free = dsp_preset_free,
+ // new 1.2 APIs
+ .plt_alloc = (ddb_playlist_t *(*)(const char *title))plt_alloc,
+ .plt_free = (void (*)(ddb_playlist_t *plt))plt_free,
+ //.plt_insert = plt_insert,
+ .plt_set_fast_mode = (void (*)(ddb_playlist_t *plt, int fast))plt_set_fast_mode,
+ .plt_is_fast_mode = (int (*)(ddb_playlist_t *plt))plt_is_fast_mode,
+ .metacache_add_string = metacache_add_string,
+ .metacache_remove_string = metacache_remove_string,
+ .metacache_ref = metacache_ref,
+ .metacache_unref = metacache_unref,
};
DB_functions_t *deadbeef = &deadbeef_api;
@@ -556,9 +567,9 @@ load_plugin (const char *plugdir, char *d_name, int l) {
trace ("loading plugin %s/%s\n", plugdir, d_name);
void *handle = dlopen (fullname, RTLD_NOW);
if (!handle) {
- //trace ("dlopen error: %s\n", dlerror ());
+ trace ("dlopen error: %s\n", dlerror ());
#ifdef ANDROID
- break;
+ return -1;
#else
strcpy (fullname + strlen(fullname) - 3, ".fallback.so");
trace ("trying %s...\n", fullname);
@@ -740,9 +751,9 @@ plug_load_all (void) {
trace ("\033[0;31mDISABLE_VERSIONCHECK=1! do not distribute!\033[0;m\n");
#endif
-#ifndef ANDROID
const char *dirname = deadbeef->get_plugin_dir ();
+#ifndef ANDROID
char *xdg_local_home = getenv ("XDG_LOCAL_HOME");
char xdg_plugin_dir[1024];
@@ -783,7 +794,7 @@ plug_load_all (void) {
#ifdef ANDROID
char plugin_path[1000];
- strncpy (plugin_path, conf_get_str ("android.plugin_path", ""), sizeof (plugin_path)-1);
+ strncpy (plugin_path, conf_get_str_fast ("android.plugin_path", ""), sizeof (plugin_path)-1);
plugin_path[sizeof(plugin_path)-1] = 0;
char *p = plugin_path;
while (*p) {
@@ -996,6 +1007,17 @@ plug_unload_all (void) {
g_gui_names[i] = NULL;
}
plugins_tail = NULL;
+
+ memset (g_plugins, 0, sizeof (g_plugins));
+ memset (g_gui_names, 0, sizeof (g_gui_names));
+ g_num_gui_names = 0;
+ memset (g_decoder_plugins, 0, sizeof (g_decoder_plugins));
+ memset (g_vfs_plugins, 0, sizeof (g_vfs_plugins));
+ memset (g_dsp_plugins, 0, sizeof (g_dsp_plugins));
+ memset (g_output_plugins, 0, sizeof (g_output_plugins));
+ output_plugin = NULL;
+ memset (g_playlist_plugins, 0, sizeof (g_playlist_plugins));
+
trace ("all plugins had been unloaded\n");
}
diff --git a/plugins/aac/aac.c b/plugins/aac/aac.c
index c8a6abc4..6f3e4273 100644
--- a/plugins/aac/aac.c
+++ b/plugins/aac/aac.c
@@ -1256,7 +1256,7 @@ aac_insert (ddb_playlist_t *plt, DB_playItem_t *after, const char *fname) {
MP4Close (mp4);
#endif
}
- else if (ftype == "aac") {
+ else if (ftype && !strcmp (ftype, "RAW AAC")) {
int apeerr = deadbeef->junk_apev2_read (it, fp);
int v2err = deadbeef->junk_id3v2_read (it, fp);
int v1err = deadbeef->junk_id3v1_read (it, fp);
diff --git a/plugins/ao/Makefile b/plugins/ao/Makefile
index df3b9fd3..d188294d 100644
--- a/plugins/ao/Makefile
+++ b/plugins/ao/Makefile
@@ -1,6 +1,6 @@
-OUT=ao.so
+OUT=ddb_aopsf.so
-CC=gcc
+CC?=gcc
ZLIB_LIBS?=-lz
diff --git a/plugins/ao/main.c b/plugins/ao/main.c
index a4da36d0..18067410 100644
--- a/plugins/ao/main.c
+++ b/plugins/ao/main.c
@@ -27,7 +27,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include "../../deadbeef.h"
+#include <deadbeef/deadbeef.h>
#include "ao.h"
#include "eng_protos.h"
diff --git a/plugins/ao/plugin.c b/plugins/ao/plugin.c
index ebef512e..65b3e1c8 100644
--- a/plugins/ao/plugin.c
+++ b/plugins/ao/plugin.c
@@ -18,7 +18,7 @@
*/
#include <stdlib.h>
#include <string.h>
-#include "../../deadbeef.h"
+#include <deadbeef/deadbeef.h>
#include "ao.h"
#include "eng_protos.h"
@@ -350,8 +350,8 @@ static DB_decoder_t plugin = {
.plugin.version_minor = 0,
.plugin.type = DB_PLUGIN_DECODER,
.plugin.id = "psf",
- .plugin.name = "Audio Overload plugin",
- .plugin.descr = "psf, psf2, spu, ssf, minidsf player based on Audio Overload library",
+ .plugin.name = "PSF player using Audio Overload SDK",
+ .plugin.descr = "plays psf, psf2, spu, ssf, dsf, qsf file formats",
.plugin.copyright =
"Copyright (C) 2009-2011 Alexey Yakovenko <waker@users.sourceforge.net>\n"
"\n"
@@ -387,7 +387,7 @@ static DB_decoder_t plugin = {
};
DB_plugin_t *
-ao_load (DB_functions_t *api) {
+ddb_aopsf_load (DB_functions_t *api) {
deadbeef = api;
return DB_PLUGIN (&plugin);
}
diff --git a/plugins/artwork/albumartorg.c b/plugins/artwork/albumartorg.c
index ada7179f..51ca54cb 100644
--- a/plugins/artwork/albumartorg.c
+++ b/plugins/artwork/albumartorg.c
@@ -16,6 +16,9 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
diff --git a/plugins/artwork/artwork.c b/plugins/artwork/artwork.c
index c2a8b766..7f56b870 100644
--- a/plugins/artwork/artwork.c
+++ b/plugins/artwork/artwork.c
@@ -1,3 +1,6 @@
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -721,6 +724,11 @@ static const char *filter_custom_mask = NULL;
static int
filter_custom (const struct dirent *f)
{
+// FNM_CASEFOLD is not defined on solaris. On other platforms it is.
+// It should be safe to define it as FNM_INGORECASE if it isn't defined.
+#ifndef FNM_CASEFOLD
+#define FNM_CASEFOLD FNM_IGNORECASE
+#endif
if (!fnmatch (filter_custom_mask, f->d_name, FNM_CASEFOLD)) {
return 1;
}
diff --git a/plugins/artwork/lastfm.c b/plugins/artwork/lastfm.c
index 2e78fd87..91972c8a 100644
--- a/plugins/artwork/lastfm.c
+++ b/plugins/artwork/lastfm.c
@@ -1,3 +1,6 @@
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
diff --git a/plugins/converter/Makefile.am b/plugins/converter/Makefile.am
index 5bab060c..70ef9013 100644
--- a/plugins/converter/Makefile.am
+++ b/plugins/converter/Makefile.am
@@ -1,8 +1,5 @@
if HAVE_CONVERTER
-if STATICLINK
-pkglib_LTLIBRARIES = converter.la converter_gtkui.la converter_gtkui.fallback.la
-else
pkglib_LTLIBRARIES = converter.la converter_gtkui.la
convdatadir = $(libdir)/deadbeef/convpresets
@@ -19,25 +16,21 @@ convdata_DATA = \
EXTRA_DIST = $(convdata_DATA)
-endif
-
AM_CFLAGS = $(CFLAGS) -std=c99 -fPIC
converter_la_SOURCES = converter.c converter.h
converter_la_LDFLAGS = -module
converter_gtkui_la_SOURCES = convgui.c interface.c support.c callbacks.h converter.h interface.h support.h
converter_gtkui_la_LDFLAGS = -module
-converter_gtkui_la_LIBADD = $(LDADD) $(GTKUI_DEPS_LIBS)
-converter_gtkui_la_CFLAGS = -std=c99 $(GTKUI_DEPS_CFLAGS)
-# fallback lib
if STATICLINK
GTK_ROOT=@top_srcdir@/$(LIB)/gtk-2.12.12/usr
-converter_gtkui_fallback_la_SOURCES = convgui.c interface.c support.c callbacks.h converter.h interface.h support.h
-converter_gtkui_fallback_la_LDFLAGS = -module
-converter_gtkui_fallback_la_LIBADD = $(LDADD) -L$(GTK_ROOT)/lib $(GTK_ROOT)/lib/libgtk-x11-2.0.la $(GTK_ROOT)/lib/libgdk-x11-2.0.la $(GTK_ROOT)/lib/libpangoft2-1.0.la $(GTK_ROOT)/lib/libpangocairo-1.0.la $(GTK_ROOT)/lib/libgdk_pixbuf-2.0.la -lm $(GTK_ROOT)/lib/libcairo.la $(GTK_ROOT)/lib/libpango-1.0.la $(GTK_ROOT)/lib/libgobject-2.0.la $(GTK_ROOT)/lib/libgmodule-2.0.la $(GTK_ROOT)/lib/libgthread-2.0.la -lrt $(GTK_ROOT)/lib/libglib-2.0.la
+converter_gtkui_la_LIBADD = $(LDADD) -L$(GTK_ROOT)/lib $(GTK_ROOT)/lib/libgtk-x11-2.0.la $(GTK_ROOT)/lib/libgdk-x11-2.0.la $(GTK_ROOT)/lib/libpangoft2-1.0.la $(GTK_ROOT)/lib/libpangocairo-1.0.la $(GTK_ROOT)/lib/libgdk_pixbuf-2.0.la -lm $(GTK_ROOT)/lib/libcairo.la $(GTK_ROOT)/lib/libpango-1.0.la $(GTK_ROOT)/lib/libgobject-2.0.la $(GTK_ROOT)/lib/libgmodule-2.0.la $(GTK_ROOT)/lib/libgthread-2.0.la -lrt $(GTK_ROOT)/lib/libglib-2.0.la
-converter_gtkui_fallback_la_CFLAGS = -std=c99 -I $(GTK_ROOT)/include -I $(GTK_ROOT)/lib/gtk-2.0/include -I $(GTK_ROOT)/include/glib-2.0 -I $(GTK_ROOT)/include/gtk-2.0 -I $(GTK_ROOT)/include/cairo -I $(GTK_ROOT)/lib/glib-2.0/include/ -I $(GTK_ROOT)/include/pango-1.0 -I $(GTK_ROOT)/include/atk-1.0 -DULTRA_COMPATIBLE=1
+converter_gtkui_la_CFLAGS = -std=c99 -I $(GTK_ROOT)/include -I $(GTK_ROOT)/lib/gtk-2.0/include -I $(GTK_ROOT)/include/glib-2.0 -I $(GTK_ROOT)/include/gtk-2.0 -I $(GTK_ROOT)/include/cairo -I $(GTK_ROOT)/lib/glib-2.0/include/ -I $(GTK_ROOT)/include/pango-1.0 -I $(GTK_ROOT)/include/atk-1.0 -DULTRA_COMPATIBLE=1
+else
+converter_gtkui_la_LIBADD = $(LDADD) $(GTKUI_DEPS_LIBS)
+converter_gtkui_la_CFLAGS = -std=c99 $(GTKUI_DEPS_CFLAGS)
endif
diff --git a/plugins/converter/converter.c b/plugins/converter/converter.c
index a00de67a..04a97777 100644
--- a/plugins/converter/converter.c
+++ b/plugins/converter/converter.c
@@ -750,7 +750,7 @@ convert (DB_playItem_t *it, const char *outfolder, const char *outfile, int outp
int len = sizeof (enc);
while (e && *e) {
if (len <= 0) {
- fprintf (stderr, "converter: failed to assemble encoder command line - buffer is not big enough, try to shorten your parameters. max allowed length is %lu characters\n", sizeof (enc));
+ fprintf (stderr, "converter: failed to assemble encoder command line - buffer is not big enough, try to shorten your parameters. max allowed length is %u characters\n", (unsigned)sizeof (enc));
goto error;
}
if (e[0] == '%' && e[1]) {
diff --git a/plugins/converter/convgui.c b/plugins/converter/convgui.c
index 07db172a..9a20d274 100644
--- a/plugins/converter/convgui.c
+++ b/plugins/converter/convgui.c
@@ -108,7 +108,7 @@ overwrite_prompt_cb (void *ctx) {
GtkWidget *dlg = gtk_message_dialog_new (GTK_WINDOW (mainwin), GTK_DIALOG_MODAL, GTK_MESSAGE_WARNING, GTK_BUTTONS_YES_NO, _("The file already exists. Overwrite?"));
gtk_window_set_transient_for (GTK_WINDOW (dlg), GTK_WINDOW (mainwin));
gtk_window_set_title (GTK_WINDOW (dlg), _("Converter warning"));
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dlg), ctl->fname);
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dlg), "%s", ctl->fname);
int response = gtk_dialog_run (GTK_DIALOG (dlg));
gtk_widget_destroy (dlg);
diff --git a/plugins/dumb/Makefile b/plugins/dumb/Makefile
index e9b05233..e993012f 100644
--- a/plugins/dumb/Makefile
+++ b/plugins/dumb/Makefile
@@ -1,4 +1,6 @@
-CC=gcc
+OUT=ddb_dumb.so
+
+CC?=gcc
dumbpath=dumb-kode54
@@ -81,8 +83,6 @@ cdumb.c
OBJECTS=$(SOURCES:.c=.o)
-OUT=dumb.so
-
all: $(SOURCES) $(OUT)
$(OUT): $(OBJECTS)
diff --git a/plugins/dumb/cdumb.c b/plugins/dumb/cdumb.c
index 405878ad..f947d94a 100644
--- a/plugins/dumb/cdumb.c
+++ b/plugins/dumb/cdumb.c
@@ -23,7 +23,7 @@
#include <string.h>
#include "dumb.h"
#include "internal/it.h"
-#include "../../deadbeef.h"
+#include <deadbeef/deadbeef.h>
//#define trace(...) { fprintf(stderr, __VA_ARGS__); }
#define trace(fmt,...)
@@ -921,7 +921,7 @@ static DB_decoder_t plugin = {
};
DB_plugin_t *
-dumb_load (DB_functions_t *api) {
+ddb_dumb_load (DB_functions_t *api) {
deadbeef = api;
return DB_PLUGIN (&plugin);
}
diff --git a/plugins/ffap/Makefile.am b/plugins/ffap/Makefile.am
index a3671fbe..736392c3 100644
--- a/plugins/ffap/Makefile.am
+++ b/plugins/ffap/Makefile.am
@@ -1,8 +1,25 @@
if HAVE_FFAP
ffapdir = $(libdir)/$(PACKAGE)
pkglib_LTLIBRARIES = ffap.la
-ffap_la_SOURCES = ffap.c
+
+topsrcdir = @top_srcdir@
+EXTRA_PROGRAMS = foo
+YASM=$(topsrcdir)/yasmwrapper.sh
+SUFFIXES = .asm
+
+if HAVE_YASM
+INTEL_SRC=dsputil_yasm.asm
+ffap_la_DEPENDENCIES=dsputil_yasm.lo
+endif
+
+ffap_la_SOURCES = ffap.c $(INTEL_SRC)
+
+if HAVE_YASM
+.asm.lo:
+ $(LIBTOOL) --tag=CC --mode=compile $(YASM) $(YASM_FLAGS) -o $@ $<
+endif
+
ffap_la_LDFLAGS = -module
-AM_CFLAGS = $(CFLAGS) -std=c99
+AM_CFLAGS = $(CFLAGS) -fPIC -std=c99
endif
diff --git a/plugins/ffap/asm.S b/plugins/ffap/asm.S
new file mode 100644
index 00000000..e0507834
--- /dev/null
+++ b/plugins/ffap/asm.S
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2008 Mans Rullgard <mans@mansr.com>
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "config.h"
+
+#ifdef __ELF__
+# define ELF
+#else
+# define ELF @
+#endif
+
+.macro require8 val=1
+ELF .eabi_attribute 24, \val
+.endm
+
+.macro preserve8 val=1
+ELF .eabi_attribute 25, \val
+.endm
+
+.macro function name, export=0
+ .macro endfunc
+ELF .size \name, . - \name
+ .endfunc
+ .purgem endfunc
+ .endm
+ .text
+ .if \export
+ .global EXTERN_ASM\name
+EXTERN_ASM\name:
+ .endif
+ELF .type \name, %function
+ .func \name
+\name:
+.endm
+
+.macro mov32 rd, val
+#if HAVE_ARMV6T2
+ movw \rd, #(\val) & 0xffff
+ .if (\val) >> 16
+ movt \rd, #(\val) >> 16
+ .endif
+#else
+ ldr \rd, =\val
+#endif
+.endm
+
+.macro movrel rd, val
+#if HAVE_ARMV6T2 && !CONFIG_PIC && !defined(__APPLE__)
+ movw \rd, #:lower16:\val
+ movt \rd, #:upper16:\val
+#else
+ ldr \rd, =\val
+#endif
+.endm
+
+#if HAVE_VFP_ARGS
+ .eabi_attribute 28, 1
+# define VFP
+# define NOVFP @
+#else
+# define VFP @
+# define NOVFP
+#endif
+
+#define GLUE(a, b) a ## b
+#define JOIN(a, b) GLUE(a, b)
+#define X(s) JOIN(EXTERN_ASM, s)
diff --git a/plugins/ffap/dsputil_yasm.asm b/plugins/ffap/dsputil_yasm.asm
new file mode 100644
index 00000000..e2478a48
--- /dev/null
+++ b/plugins/ffap/dsputil_yasm.asm
@@ -0,0 +1,423 @@
+;******************************************************************************
+;* MMX optimized DSP utils
+;* Copyright (c) 2008 Loren Merritt
+;*
+;* This file is part of FFmpeg.
+;*
+;* FFmpeg is free software; you can redistribute it and/or
+;* modify it under the terms of the GNU Lesser General Public
+;* License as published by the Free Software Foundation; either
+;* version 2.1 of the License, or (at your option) any later version.
+;*
+;* FFmpeg is distributed in the hope that it will be useful,
+;* but WITHOUT ANY WARRANTY; without even the implied warranty of
+;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+;* Lesser General Public License for more details.
+;*
+;* You should have received a copy of the GNU Lesser General Public
+;* License along with FFmpeg; if not, write to the Free Software
+;* 51, Inc., Foundation Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+;******************************************************************************
+
+%include "x86inc.asm"
+
+SECTION_RODATA
+pb_f: times 16 db 15
+pb_zzzzzzzz77777777: times 8 db -1
+pb_7: times 8 db 7
+pb_zzzz3333zzzzbbbb: db -1,-1,-1,-1,3,3,3,3,-1,-1,-1,-1,11,11,11,11
+pb_zz11zz55zz99zzdd: db -1,-1,1,1,-1,-1,5,5,-1,-1,9,9,-1,-1,13,13
+
+section .text align=16
+
+%macro PSWAPD_SSE 2
+ pshufw %1, %2, 0x4e
+%endmacro
+%macro PSWAPD_3DN1 2
+ movq %1, %2
+ psrlq %1, 32
+ punpckldq %1, %2
+%endmacro
+
+%macro FLOAT_TO_INT16_INTERLEAVE6 1
+; void ff_float_to_int16_interleave6_sse(int16_t *dst, const float **src, int len)
+cglobal float_to_int16_interleave6_%1, 2,7,0, dst, src, src1, src2, src3, src4, src5
+%ifdef ARCH_X86_64
+ %define lend r10d
+ mov lend, r2d
+%else
+ %define lend dword r2m
+%endif
+ mov src1q, [srcq+1*gprsize]
+ mov src2q, [srcq+2*gprsize]
+ mov src3q, [srcq+3*gprsize]
+ mov src4q, [srcq+4*gprsize]
+ mov src5q, [srcq+5*gprsize]
+ mov srcq, [srcq]
+ sub src1q, srcq
+ sub src2q, srcq
+ sub src3q, srcq
+ sub src4q, srcq
+ sub src5q, srcq
+.loop:
+ cvtps2pi mm0, [srcq]
+ cvtps2pi mm1, [srcq+src1q]
+ cvtps2pi mm2, [srcq+src2q]
+ cvtps2pi mm3, [srcq+src3q]
+ cvtps2pi mm4, [srcq+src4q]
+ cvtps2pi mm5, [srcq+src5q]
+ packssdw mm0, mm3
+ packssdw mm1, mm4
+ packssdw mm2, mm5
+ pswapd mm3, mm0
+ punpcklwd mm0, mm1
+ punpckhwd mm1, mm2
+ punpcklwd mm2, mm3
+ pswapd mm3, mm0
+ punpckldq mm0, mm2
+ punpckhdq mm2, mm1
+ punpckldq mm1, mm3
+ movq [dstq ], mm0
+ movq [dstq+16], mm2
+ movq [dstq+ 8], mm1
+ add srcq, 8
+ add dstq, 24
+ sub lend, 2
+ jg .loop
+ emms
+ RET
+%endmacro ; FLOAT_TO_INT16_INTERLEAVE6
+
+%define pswapd PSWAPD_SSE
+FLOAT_TO_INT16_INTERLEAVE6 sse
+%define cvtps2pi pf2id
+%define pswapd PSWAPD_3DN1
+FLOAT_TO_INT16_INTERLEAVE6 3dnow
+%undef pswapd
+FLOAT_TO_INT16_INTERLEAVE6 3dn2
+%undef cvtps2pi
+
+
+
+%macro SCALARPRODUCT 1
+; int scalarproduct_int16(int16_t *v1, int16_t *v2, int order, int shift)
+cglobal scalarproduct_int16_%1, 3,3,4, v1, v2, order, shift
+ shl orderq, 1
+ add v1q, orderq
+ add v2q, orderq
+ neg orderq
+ movd m3, shiftm
+ pxor m2, m2
+.loop:
+ movu m0, [v1q + orderq]
+ movu m1, [v1q + orderq + mmsize]
+ pmaddwd m0, [v2q + orderq]
+ pmaddwd m1, [v2q + orderq + mmsize]
+ paddd m2, m0
+ paddd m2, m1
+ add orderq, mmsize*2
+ jl .loop
+%if mmsize == 16
+ movhlps m0, m2
+ paddd m2, m0
+ psrad m2, m3
+ pshuflw m0, m2, 0x4e
+%else
+ psrad m2, m3
+ pshufw m0, m2, 0x4e
+%endif
+ paddd m2, m0
+ movd eax, m2
+ RET
+
+; int scalarproduct_and_madd_int16(int16_t *v1, int16_t *v2, int16_t *v3, int order, int mul)
+cglobal scalarproduct_and_madd_int16_%1, 4,4,8, v1, v2, v3, order, mul
+ shl orderq, 1
+ movd m7, mulm
+%if mmsize == 16
+ pshuflw m7, m7, 0
+ punpcklqdq m7, m7
+%else
+ pshufw m7, m7, 0
+%endif
+ pxor m6, m6
+ add v1q, orderq
+ add v2q, orderq
+ add v3q, orderq
+ neg orderq
+.loop:
+ movu m0, [v2q + orderq]
+ movu m1, [v2q + orderq + mmsize]
+ mova m4, [v1q + orderq]
+ mova m5, [v1q + orderq + mmsize]
+ movu m2, [v3q + orderq]
+ movu m3, [v3q + orderq + mmsize]
+ pmaddwd m0, m4
+ pmaddwd m1, m5
+ pmullw m2, m7
+ pmullw m3, m7
+ paddd m6, m0
+ paddd m6, m1
+ paddw m2, m4
+ paddw m3, m5
+ mova [v1q + orderq], m2
+ mova [v1q + orderq + mmsize], m3
+ add orderq, mmsize*2
+ jl .loop
+%if mmsize == 16
+ movhlps m0, m6
+ paddd m6, m0
+ pshuflw m0, m6, 0x4e
+%else
+ pshufw m0, m6, 0x4e
+%endif
+ paddd m6, m0
+ movd eax, m6
+ RET
+%endmacro
+
+INIT_MMX
+SCALARPRODUCT mmx2
+INIT_XMM
+SCALARPRODUCT sse2
+
+%macro SCALARPRODUCT_LOOP 1
+align 16
+.loop%1:
+ sub orderq, mmsize*2
+%if %1
+ mova m1, m4
+ mova m4, [v2q + orderq]
+ mova m0, [v2q + orderq + mmsize]
+ palignr m1, m0, %1
+ palignr m0, m4, %1
+ mova m3, m5
+ mova m5, [v3q + orderq]
+ mova m2, [v3q + orderq + mmsize]
+ palignr m3, m2, %1
+ palignr m2, m5, %1
+%else
+ mova m0, [v2q + orderq]
+ mova m1, [v2q + orderq + mmsize]
+ mova m2, [v3q + orderq]
+ mova m3, [v3q + orderq + mmsize]
+%endif
+ %define t0 [v1q + orderq]
+ %define t1 [v1q + orderq + mmsize]
+%ifdef ARCH_X86_64
+ mova m8, t0
+ mova m9, t1
+ %define t0 m8
+ %define t1 m9
+%endif
+ pmaddwd m0, t0
+ pmaddwd m1, t1
+ pmullw m2, m7
+ pmullw m3, m7
+ paddw m2, t0
+ paddw m3, t1
+ paddd m6, m0
+ paddd m6, m1
+ mova [v1q + orderq], m2
+ mova [v1q + orderq + mmsize], m3
+ jg .loop%1
+%if %1
+ jmp .end
+%endif
+%endmacro
+
+; int scalarproduct_and_madd_int16(int16_t *v1, int16_t *v2, int16_t *v3, int order, int mul)
+cglobal scalarproduct_and_madd_int16_ssse3, 4,5,10, v1, v2, v3, order, mul
+ shl orderq, 1
+ movd m7, mulm
+ pshuflw m7, m7, 0
+ punpcklqdq m7, m7
+ pxor m6, m6
+ mov r4d, v2d
+ and r4d, 15
+ and v2q, ~15
+ and v3q, ~15
+ mova m4, [v2q + orderq]
+ mova m5, [v3q + orderq]
+ ; linear is faster than branch tree or jump table, because the branches taken are cyclic (i.e. predictable)
+ cmp r4d, 0
+ je .loop0
+ cmp r4d, 2
+ je .loop2
+ cmp r4d, 4
+ je .loop4
+ cmp r4d, 6
+ je .loop6
+ cmp r4d, 8
+ je .loop8
+ cmp r4d, 10
+ je .loop10
+ cmp r4d, 12
+ je .loop12
+SCALARPRODUCT_LOOP 14
+SCALARPRODUCT_LOOP 12
+SCALARPRODUCT_LOOP 10
+SCALARPRODUCT_LOOP 8
+SCALARPRODUCT_LOOP 6
+SCALARPRODUCT_LOOP 4
+SCALARPRODUCT_LOOP 2
+SCALARPRODUCT_LOOP 0
+.end:
+ movhlps m0, m6
+ paddd m6, m0
+ pshuflw m0, m6, 0x4e
+ paddd m6, m0
+ movd eax, m6
+ RET
+
+
+
+; void ff_add_hfyu_median_prediction_mmx2(uint8_t *dst, const uint8_t *top, const uint8_t *diff, int w, int *left, int *left_top)
+cglobal add_hfyu_median_prediction_mmx2, 6,6,0, dst, top, diff, w, left, left_top
+ movq mm0, [topq]
+ movq mm2, mm0
+ movd mm4, [left_topq]
+ psllq mm2, 8
+ movq mm1, mm0
+ por mm4, mm2
+ movd mm3, [leftq]
+ psubb mm0, mm4 ; t-tl
+ add dstq, wq
+ add topq, wq
+ add diffq, wq
+ neg wq
+ jmp .skip
+.loop:
+ movq mm4, [topq+wq]
+ movq mm0, mm4
+ psllq mm4, 8
+ por mm4, mm1
+ movq mm1, mm0 ; t
+ psubb mm0, mm4 ; t-tl
+.skip:
+ movq mm2, [diffq+wq]
+%assign i 0
+%rep 8
+ movq mm4, mm0
+ paddb mm4, mm3 ; t-tl+l
+ movq mm5, mm3
+ pmaxub mm3, mm1
+ pminub mm5, mm1
+ pminub mm3, mm4
+ pmaxub mm3, mm5 ; median
+ paddb mm3, mm2 ; +residual
+%if i==0
+ movq mm7, mm3
+ psllq mm7, 56
+%else
+ movq mm6, mm3
+ psrlq mm7, 8
+ psllq mm6, 56
+ por mm7, mm6
+%endif
+%if i<7
+ psrlq mm0, 8
+ psrlq mm1, 8
+ psrlq mm2, 8
+%endif
+%assign i i+1
+%endrep
+ movq [dstq+wq], mm7
+ add wq, 8
+ jl .loop
+ movzx r2d, byte [dstq-1]
+ mov [leftq], r2d
+ movzx r2d, byte [topq-1]
+ mov [left_topq], r2d
+ RET
+
+
+%macro ADD_HFYU_LEFT_LOOP 1 ; %1 = is_aligned
+ add srcq, wq
+ add dstq, wq
+ neg wq
+%%.loop:
+ mova m1, [srcq+wq]
+ mova m2, m1
+ psllw m1, 8
+ paddb m1, m2
+ mova m2, m1
+ pshufb m1, m3
+ paddb m1, m2
+ pshufb m0, m5
+ mova m2, m1
+ pshufb m1, m4
+ paddb m1, m2
+%if mmsize == 16
+ mova m2, m1
+ pshufb m1, m6
+ paddb m1, m2
+%endif
+ paddb m0, m1
+%if %1
+ mova [dstq+wq], m0
+%else
+ movq [dstq+wq], m0
+ movhps [dstq+wq+8], m0
+%endif
+ add wq, mmsize
+ jl %%.loop
+ mov eax, mmsize-1
+ sub eax, wd
+ movd m1, eax
+ pshufb m0, m1
+ movd eax, m0
+ RET
+%endmacro
+
+; int ff_add_hfyu_left_prediction(uint8_t *dst, const uint8_t *src, int w, int left)
+INIT_MMX
+cglobal add_hfyu_left_prediction_ssse3, 3,3,7, dst, src, w, left
+.skip_prologue:
+ mova m5, [pb_7 GLOBAL]
+ mova m4, [pb_zzzz3333zzzzbbbb GLOBAL]
+ mova m3, [pb_zz11zz55zz99zzdd GLOBAL]
+ movd m0, leftm
+ psllq m0, 56
+ ADD_HFYU_LEFT_LOOP 1
+
+INIT_XMM
+cglobal add_hfyu_left_prediction_sse4, 3,3,7, dst, src, w, left
+ mova m5, [pb_f GLOBAL]
+ mova m6, [pb_zzzzzzzz77777777 GLOBAL]
+ mova m4, [pb_zzzz3333zzzzbbbb GLOBAL]
+ mova m3, [pb_zz11zz55zz99zzdd GLOBAL]
+ movd m0, leftm
+ pslldq m0, 15
+ test srcq, 15
+ jnz add_hfyu_left_prediction_ssse3.skip_prologue
+ test dstq, 15
+ jnz .unaligned
+ ADD_HFYU_LEFT_LOOP 1
+.unaligned:
+ ADD_HFYU_LEFT_LOOP 0
+
+
+; float ff_scalarproduct_float_sse(const float *v1, const float *v2, int len)
+cglobal scalarproduct_float_sse, 3,3,2, v1, v2, offset
+ neg offsetq
+ shl offsetq, 2
+ sub v1q, offsetq
+ sub v2q, offsetq
+ xorps xmm0, xmm0
+ .loop:
+ movaps xmm1, [v1q+offsetq]
+ mulps xmm1, [v2q+offsetq]
+ addps xmm0, xmm1
+ add offsetq, 16
+ js .loop
+ movhlps xmm1, xmm0
+ addps xmm0, xmm1
+ movss xmm1, xmm0
+ shufps xmm0, xmm0, 1
+ addss xmm0, xmm1
+%ifndef ARCH_X86_64
+ movd r0m, xmm0
+ fld dword r0m
+%endif
+ RET
diff --git a/plugins/ffap/ffap.c b/plugins/ffap/ffap.c
index 0b1e61d9..ccfa2b2d 100644
--- a/plugins/ffap/ffap.c
+++ b/plugins/ffap/ffap.c
@@ -41,7 +41,7 @@
#ifdef TARGET_ANDROID
int posix_memalign (void **memptr, size_t alignment, size_t size) {
- *memptr = malloc (size);
+ *memptr = memalign (alignment, size);
return *memptr ? 0 : -1;
}
#endif
@@ -1275,111 +1275,20 @@ typedef int x86_reg;
typedef struct { uint64_t a, b; } xmm_reg;
#define DECLARE_ALIGNED(n,t,v) t v __attribute__ ((aligned (n)))
#define DECLARE_ALIGNED_16(t, v) DECLARE_ALIGNED(16, t, v)
-static int32_t scalarproduct_int16_sse2 (int16_t * v1, int16_t * v2, int order, int shift)
-{
- int res = 0;
- DECLARE_ALIGNED_16(xmm_reg, sh);
- x86_reg o = -(order << 1);
-
- v1 += order;
- v2 += order;
- sh.a = shift;
- __asm__ volatile(
- "pxor %%xmm7, %%xmm7 \n\t"
- "1: \n\t"
- "movdqu (%0,%3), %%xmm0 \n\t"
- "movdqu 16(%0,%3), %%xmm1 \n\t"
- "pmaddwd (%1,%3), %%xmm0 \n\t"
- "pmaddwd 16(%1,%3), %%xmm1 \n\t"
- "paddd %%xmm0, %%xmm7 \n\t"
- "paddd %%xmm1, %%xmm7 \n\t"
- "add $32, %3 \n\t"
- "js 1b \n\t"
- "movhlps %%xmm7, %%xmm2 \n\t"
- "paddd %%xmm2, %%xmm7 \n\t"
- "psrad %4, %%xmm7 \n\t"
- "pshuflw $0x4E, %%xmm7,%%xmm2 \n\t"
- "paddd %%xmm2, %%xmm7 \n\t"
- "movd %%xmm7, %2 \n\t"
- : "+r"(v1), "+r"(v2), "=r"(res), "+r"(o)
- : "m"(sh)
- );
- return res;
-}
-static void add_int16_sse2(int16_t * v1, int16_t * v2, int order)
-{
- x86_reg o = -(order << 1);
- v1 += order;
- v2 += order;
- __asm__ volatile(
- "1: \n\t"
- "movdqu (%1,%2), %%xmm0 \n\t"
- "movdqu 16(%1,%2), %%xmm1 \n\t"
- "paddw (%0,%2), %%xmm0 \n\t"
- "paddw 16(%0,%2), %%xmm1 \n\t"
- "movdqa %%xmm0, (%0,%2) \n\t"
- "movdqa %%xmm1, 16(%0,%2) \n\t"
- "add $32, %2 \n\t"
- "js 1b \n\t"
- : "+r"(v1), "+r"(v2), "+r"(o)
- );
-}
-
-static void sub_int16_sse2(int16_t * v1, int16_t * v2, int order)
-{
- x86_reg o = -(order << 1);
- v1 += order;
- v2 += order;
- __asm__ volatile(
- "1: \n\t"
- "movdqa (%0,%2), %%xmm0 \n\t"
- "movdqa 16(%0,%2), %%xmm2 \n\t"
- "movdqu (%1,%2), %%xmm1 \n\t"
- "movdqu 16(%1,%2), %%xmm3 \n\t"
- "psubw %%xmm1, %%xmm0 \n\t"
- "psubw %%xmm3, %%xmm2 \n\t"
- "movdqa %%xmm0, (%0,%2) \n\t"
- "movdqa %%xmm2, 16(%0,%2) \n\t"
- "add $32, %2 \n\t"
- "js 1b \n\t"
- : "+r"(v1), "+r"(v2), "+r"(o)
- );
-}
#endif
-static int32_t
-scalarproduct_int16_c(int16_t * v1, int16_t * v2, int order, int shift)
+static int32_t scalarproduct_and_madd_int16_c(int16_t *v1, const int16_t *v2, const int16_t *v3, int order, int mul)
{
int res = 0;
-
- while (order--)
- res += (*v1++ * *v2++) >> shift;
-
- return res;
-}
-
-static void
-add_int16_c (int16_t *v1/*align 16*/, int16_t *v2, int len) {
- while (len--) {
- *v1++ += *v2++;
- }
-}
-
-static void
-sub_int16_c (int16_t *v1/*align 16*/, int16_t *v2, int len) {
- while (len--) {
- *v1++ -= *v2++;
+ while (order--) {
+ res += *v1 * *v2++;
+ *v1++ += mul * *v3++;
}
+ return res;
}
static int32_t
-(*scalarproduct_int16)(int16_t * v1, int16_t * v2, int order, int shift);
-
-static void
-(*add_int16) (int16_t *v1/*align 16*/, int16_t *v2, int len);
-
-static void
-(*sub_int16) (int16_t *v1/*align 16*/, int16_t *v2, int len);
+(*scalarproduct_and_madd_int16)(int16_t *v1, const int16_t *v2, const int16_t *v3, int order, int mul);
static inline int16_t clip_int16(int a)
{
@@ -1412,15 +1321,8 @@ static inline void do_apply_filter(APEContext * ctx, int version, APEFilter *f,
int absres;
while (count--) {
- /* round fixedpoint scalar product */
- res = (scalarproduct_int16(f->delay - order, f->coeffs, order, 0) + (1 << (fracbits - 1))) >> fracbits;
-
-
- if (*data < 0)
- add_int16(f->coeffs, f->adaptcoeffs - order, order);
- else if (*data > 0)
- sub_int16(f->coeffs, f->adaptcoeffs - order, order);
-
+ res = scalarproduct_and_madd_int16(f->coeffs, f->delay - order, f->adaptcoeffs - order, order, APESIGN(*data));
+ res = (res + (1 << (fracbits - 1))) >> fracbits;
res += *data;
*data++ = res;
@@ -2002,6 +1904,8 @@ static DB_decoder_t plugin = {
#if HAVE_SSE2 && !ARCH_UNKNOWN
+int32_t ff_scalarproduct_and_madd_int16_sse2(int16_t *v1, const int16_t *v2, const int16_t *v3, int order, int mul);
+
#define FF_MM_MMX 0x0001 ///< standard MMX
#define FF_MM_3DNOW 0x0004 ///< AMD 3DNOW
#define FF_MM_MMX2 0x0002 ///< SSE integer functions or AMD MMX ext
@@ -2103,29 +2007,32 @@ int mm_support(void)
}
#endif
+#if ARCH_ARM
+int32_t EXTERN_ASMff_scalarproduct_int16_neon(int16_t *v1, int16_t *v2, int len,
+ int shift);
+int32_t EXTERN_ASMff_scalarproduct_and_madd_int16_neon(int16_t *v1, const int16_t *v2, const int16_t *v3, int order, int mul);
+
+#endif
+
DB_plugin_t *
ffap_load (DB_functions_t *api) {
// detect sse2
-#if HAVE_SSE2 && !ARCH_UNKNOWN
+#if ARCH_ARM
+ scalarproduct_and_madd_int16 = EXTERN_ASMff_scalarproduct_and_madd_int16_neon;
+#elif HAVE_SSE2 && !ARCH_UNKNOWN
trace ("ffap: was compiled with sse2 support\n");
int mm_flags = mm_support ();
if (mm_flags & FF_MM_SSE2) {
trace ("ffap: sse2 support detected\n");
- scalarproduct_int16 = scalarproduct_int16_sse2;
- add_int16 = add_int16_sse2;
- sub_int16 = sub_int16_sse2;
+ scalarproduct_and_madd_int16 = ff_scalarproduct_and_madd_int16_sse2;
}
else {
trace ("ffap: sse2 is not supported by CPU\n");
- scalarproduct_int16 = scalarproduct_int16_c;
- add_int16 = add_int16_c;
- sub_int16 = sub_int16_c;
+ scalarproduct_and_madd_int16 = scalarproduct_and_madd_int16_c;
}
#else
- trace ("ffap: sse2 support was not compiled in\n");
- scalarproduct_int16 = scalarproduct_int16_c;
- add_int16 = add_int16_c;
- sub_int16 = sub_int16_c;
+// trace ("ffap: sse2 support was not compiled in\n");
+ scalarproduct_and_madd_int16 = scalarproduct_and_madd_int16_c;
#endif
deadbeef = api;
return DB_PLUGIN (&plugin);
diff --git a/plugins/ffap/int_neon.S b/plugins/ffap/int_neon.S
new file mode 100644
index 00000000..e8023e06
--- /dev/null
+++ b/plugins/ffap/int_neon.S
@@ -0,0 +1,118 @@
+/*
+ * ARM NEON optimised integer operations
+ * Copyright (c) 2009 Kostya Shishkov
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "asm.S"
+
+ preserve8
+ .fpu neon
+ .text
+
+function ff_scalarproduct_int16_neon, export=1
+ vmov.i16 q0, #0
+ vmov.i16 q1, #0
+ vmov.i16 q2, #0
+ vmov.i16 q3, #0
+ negs r3, r3
+ beq 2f
+
+ vdup.s32 q12, r3
+1: vld1.16 {d16-d17}, [r0]!
+ vld1.16 {d20-d21}, [r1,:128]!
+ vmull.s16 q12, d16, d20
+ vld1.16 {d18-d19}, [r0]!
+ vmull.s16 q13, d17, d21
+ vld1.16 {d22-d23}, [r1,:128]!
+ vmull.s16 q14, d18, d22
+ vmull.s16 q15, d19, d23
+ vshl.s32 q8, q12, q12
+ vshl.s32 q9, q13, q12
+ vadd.s32 q0, q0, q8
+ vshl.s32 q10, q14, q12
+ vadd.s32 q1, q1, q9
+ vshl.s32 q11, q15, q12
+ vadd.s32 q2, q2, q10
+ vadd.s32 q3, q3, q11
+ subs r2, r2, #16
+ bne 1b
+ b 3f
+
+2: vld1.16 {d16-d17}, [r0]!
+ vld1.16 {d20-d21}, [r1,:128]!
+ vmlal.s16 q0, d16, d20
+ vld1.16 {d18-d19}, [r0]!
+ vmlal.s16 q1, d17, d21
+ vld1.16 {d22-d23}, [r1,:128]!
+ vmlal.s16 q2, d18, d22
+ vmlal.s16 q3, d19, d23
+ subs r2, r2, #16
+ bne 2b
+
+3: vpadd.s32 d16, d0, d1
+ vpadd.s32 d17, d2, d3
+ vpadd.s32 d10, d4, d5
+ vpadd.s32 d11, d6, d7
+ vpadd.s32 d0, d16, d17
+ vpadd.s32 d1, d10, d11
+ vpadd.s32 d2, d0, d1
+ vpaddl.s32 d3, d2
+ vmov.32 r0, d3[0]
+ bx lr
+endfunc
+
+@ scalarproduct_and_madd_int16(/*aligned*/v0,v1,v2,order,mul)
+function ff_scalarproduct_and_madd_int16_neon, export=1
+ vld1.16 {d28[],d29[]}, [sp]
+ vmov.i16 q0, #0
+ vmov.i16 q1, #0
+ vmov.i16 q2, #0
+ vmov.i16 q3, #0
+ mov r12, r0
+
+1: vld1.16 {d16-d17}, [r0,:128]!
+ vld1.16 {d18-d19}, [r1]!
+ vld1.16 {d20-d21}, [r2]!
+ vld1.16 {d22-d23}, [r0,:128]!
+ vld1.16 {d24-d25}, [r1]!
+ vld1.16 {d26-d27}, [r2]!
+ vmul.s16 q10, q10, q14
+ vmul.s16 q13, q13, q14
+ vmlal.s16 q0, d16, d18
+ vmlal.s16 q1, d17, d19
+ vadd.s16 q10, q8, q10
+ vadd.s16 q13, q11, q13
+ vmlal.s16 q2, d22, d24
+ vmlal.s16 q3, d23, d25
+ vst1.16 {q10}, [r12,:128]!
+ subs r3, r3, #16
+ vst1.16 {q13}, [r12,:128]!
+ bne 1b
+
+ vpadd.s32 d16, d0, d1
+ vpadd.s32 d17, d2, d3
+ vpadd.s32 d10, d4, d5
+ vpadd.s32 d11, d6, d7
+ vpadd.s32 d0, d16, d17
+ vpadd.s32 d1, d10, d11
+ vpadd.s32 d2, d0, d1
+ vpaddl.s32 d3, d2
+ vmov.32 r0, d3[0]
+ bx lr
+endfunc
diff --git a/plugins/ffap/x86inc.asm b/plugins/ffap/x86inc.asm
new file mode 100644
index 00000000..c29ef3ee
--- /dev/null
+++ b/plugins/ffap/x86inc.asm
@@ -0,0 +1,625 @@
+;*****************************************************************************
+;* x86inc.asm
+;*****************************************************************************
+;* Copyright (C) 2005-2008 Loren Merritt <lorenm@u.washington.edu>
+;*
+;* This file is part of FFmpeg.
+;*
+;* FFmpeg is free software; you can redistribute it and/or
+;* modify it under the terms of the GNU Lesser General Public
+;* License as published by the Free Software Foundation; either
+;* version 2.1 of the License, or (at your option) any later version.
+;*
+;* FFmpeg is distributed in the hope that it will be useful,
+;* but WITHOUT ANY WARRANTY; without even the implied warranty of
+;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+;* Lesser General Public License for more details.
+;*
+;* You should have received a copy of the GNU Lesser General Public
+;* License along with FFmpeg; if not, write to the Free Software
+;* 51, Inc., Foundation Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+;*****************************************************************************
+
+%ifdef ARCH_X86_64
+ %ifidn __OUTPUT_FORMAT__,win32
+ %define WIN64
+ %else
+ %define UNIX64
+ %endif
+%endif
+
+; FIXME: All of the 64bit asm functions that take a stride as an argument
+; via register, assume that the high dword of that register is filled with 0.
+; This is true in practice (since we never do any 64bit arithmetic on strides,
+; and x264's strides are all positive), but is not guaranteed by the ABI.
+
+; Name of the .rodata section.
+; Kludge: Something on OS X fails to align .rodata even given an align attribute,
+; so use a different read-only section.
+%macro SECTION_RODATA 0-1 16
+ %ifidn __OUTPUT_FORMAT__,macho64
+ SECTION .text align=%1
+ %elifidn __OUTPUT_FORMAT__,macho
+ SECTION .text align=%1
+ fakegot:
+ %else
+ SECTION .rodata align=%1
+ %endif
+%endmacro
+
+; PIC support macros.
+; x86_64 can't fit 64bit address literals in most instruction types,
+; so shared objects (under the assumption that they might be anywhere
+; in memory) must use an address mode that does fit.
+; So all accesses to global variables must use this macro, e.g.
+; mov eax, [foo GLOBAL]
+; instead of
+; mov eax, [foo]
+;
+; x86_32 doesn't require PIC.
+; Some distros prefer shared objects to be PIC, but nothing breaks if
+; the code contains a few textrels, so we'll skip that complexity.
+
+%ifdef WIN64
+ %define PIC
+%elifndef ARCH_X86_64
+ %undef PIC
+%endif
+%ifdef PIC
+ %define GLOBAL wrt rip
+%else
+ %define GLOBAL
+%endif
+
+; Macros to eliminate most code duplication between x86_32 and x86_64:
+; Currently this works only for leaf functions which load all their arguments
+; into registers at the start, and make no other use of the stack. Luckily that
+; covers most of x264's asm.
+
+; PROLOGUE:
+; %1 = number of arguments. loads them from stack if needed.
+; %2 = number of registers used. pushes callee-saved regs if needed.
+; %3 = number of xmm registers used. pushes callee-saved xmm regs if needed.
+; %4 = list of names to define to registers
+; PROLOGUE can also be invoked by adding the same options to cglobal
+
+; e.g.
+; cglobal foo, 2,3,0, dst, src, tmp
+; declares a function (foo), taking two args (dst and src) and one local variable (tmp)
+
+; TODO Some functions can use some args directly from the stack. If they're the
+; last args then you can just not declare them, but if they're in the middle
+; we need more flexible macro.
+
+; RET:
+; Pops anything that was pushed by PROLOGUE
+
+; REP_RET:
+; Same, but if it doesn't pop anything it becomes a 2-byte ret, for athlons
+; which are slow when a normal ret follows a branch.
+
+; registers:
+; rN and rNq are the native-size register holding function argument N
+; rNd, rNw, rNb are dword, word, and byte size
+; rNm is the original location of arg N (a register or on the stack), dword
+; rNmp is native size
+
+%macro DECLARE_REG 6
+ %define r%1q %2
+ %define r%1d %3
+ %define r%1w %4
+ %define r%1b %5
+ %define r%1m %6
+ %ifid %6 ; i.e. it's a register
+ %define r%1mp %2
+ %elifdef ARCH_X86_64 ; memory
+ %define r%1mp qword %6
+ %else
+ %define r%1mp dword %6
+ %endif
+ %define r%1 %2
+%endmacro
+
+%macro DECLARE_REG_SIZE 2
+ %define r%1q r%1
+ %define e%1q r%1
+ %define r%1d e%1
+ %define e%1d e%1
+ %define r%1w %1
+ %define e%1w %1
+ %define r%1b %2
+ %define e%1b %2
+%ifndef ARCH_X86_64
+ %define r%1 e%1
+%endif
+%endmacro
+
+DECLARE_REG_SIZE ax, al
+DECLARE_REG_SIZE bx, bl
+DECLARE_REG_SIZE cx, cl
+DECLARE_REG_SIZE dx, dl
+DECLARE_REG_SIZE si, sil
+DECLARE_REG_SIZE di, dil
+DECLARE_REG_SIZE bp, bpl
+
+; t# defines for when per-arch register allocation is more complex than just function arguments
+
+%macro DECLARE_REG_TMP 1-*
+ %assign %%i 0
+ %rep %0
+ CAT_XDEFINE t, %%i, r%1
+ %assign %%i %%i+1
+ %rotate 1
+ %endrep
+%endmacro
+
+%macro DECLARE_REG_TMP_SIZE 0-*
+ %rep %0
+ %define t%1q t%1 %+ q
+ %define t%1d t%1 %+ d
+ %define t%1w t%1 %+ w
+ %define t%1b t%1 %+ b
+ %rotate 1
+ %endrep
+%endmacro
+
+DECLARE_REG_TMP_SIZE 0,1,2,3,4,5,6,7
+
+%ifdef ARCH_X86_64
+ %define gprsize 8
+%else
+ %define gprsize 4
+%endif
+
+%macro PUSH 1
+ push %1
+ %assign stack_offset stack_offset+gprsize
+%endmacro
+
+%macro POP 1
+ pop %1
+ %assign stack_offset stack_offset-gprsize
+%endmacro
+
+%macro SUB 2
+ sub %1, %2
+ %ifidn %1, rsp
+ %assign stack_offset stack_offset+(%2)
+ %endif
+%endmacro
+
+%macro ADD 2
+ add %1, %2
+ %ifidn %1, rsp
+ %assign stack_offset stack_offset-(%2)
+ %endif
+%endmacro
+
+%macro movifnidn 2
+ %ifnidn %1, %2
+ mov %1, %2
+ %endif
+%endmacro
+
+%macro movsxdifnidn 2
+ %ifnidn %1, %2
+ movsxd %1, %2
+ %endif
+%endmacro
+
+%macro ASSERT 1
+ %if (%1) == 0
+ %error assert failed
+ %endif
+%endmacro
+
+%macro DEFINE_ARGS 0-*
+ %ifdef n_arg_names
+ %assign %%i 0
+ %rep n_arg_names
+ CAT_UNDEF arg_name %+ %%i, q
+ CAT_UNDEF arg_name %+ %%i, d
+ CAT_UNDEF arg_name %+ %%i, w
+ CAT_UNDEF arg_name %+ %%i, b
+ CAT_UNDEF arg_name %+ %%i, m
+ CAT_UNDEF arg_name, %%i
+ %assign %%i %%i+1
+ %endrep
+ %endif
+
+ %assign %%i 0
+ %rep %0
+ %xdefine %1q r %+ %%i %+ q
+ %xdefine %1d r %+ %%i %+ d
+ %xdefine %1w r %+ %%i %+ w
+ %xdefine %1b r %+ %%i %+ b
+ %xdefine %1m r %+ %%i %+ m
+ CAT_XDEFINE arg_name, %%i, %1
+ %assign %%i %%i+1
+ %rotate 1
+ %endrep
+ %assign n_arg_names %%i
+%endmacro
+
+%ifdef WIN64 ; Windows x64 ;=================================================
+
+DECLARE_REG 0, rcx, ecx, cx, cl, ecx
+DECLARE_REG 1, rdx, edx, dx, dl, edx
+DECLARE_REG 2, r8, r8d, r8w, r8b, r8d
+DECLARE_REG 3, r9, r9d, r9w, r9b, r9d
+DECLARE_REG 4, rdi, edi, di, dil, [rsp + stack_offset + 40]
+DECLARE_REG 5, rsi, esi, si, sil, [rsp + stack_offset + 48]
+DECLARE_REG 6, rax, eax, ax, al, [rsp + stack_offset + 56]
+%define r7m [rsp + stack_offset + 64]
+%define r8m [rsp + stack_offset + 72]
+
+%macro LOAD_IF_USED 2 ; reg_id, number_of_args
+ %if %1 < %2
+ mov r%1, [rsp + stack_offset + 8 + %1*8]
+ %endif
+%endmacro
+
+%macro PROLOGUE 2-4+ ; #args, #regs, #xmm_regs, arg_names...
+ ASSERT %2 >= %1
+ %assign regs_used %2
+ ASSERT regs_used <= 7
+ %if %0 > 2
+ %assign xmm_regs_used %3
+ %else
+ %assign xmm_regs_used 0
+ %endif
+ ASSERT xmm_regs_used <= 16
+ %if regs_used > 4
+ push r4
+ push r5
+ %assign stack_offset stack_offset+16
+ %endif
+ %if xmm_regs_used > 6
+ sub rsp, (xmm_regs_used-6)*16+16
+ %assign stack_offset stack_offset+(xmm_regs_used-6)*16+16
+ %assign %%i xmm_regs_used
+ %rep (xmm_regs_used-6)
+ %assign %%i %%i-1
+ movdqa [rsp + (%%i-6)*16+8], xmm %+ %%i
+ %endrep
+ %endif
+ LOAD_IF_USED 4, %1
+ LOAD_IF_USED 5, %1
+ LOAD_IF_USED 6, %1
+ DEFINE_ARGS %4
+%endmacro
+
+%macro RESTORE_XMM_INTERNAL 1
+ %if xmm_regs_used > 6
+ %assign %%i xmm_regs_used
+ %rep (xmm_regs_used-6)
+ %assign %%i %%i-1
+ movdqa xmm %+ %%i, [%1 + (%%i-6)*16+8]
+ %endrep
+ add %1, (xmm_regs_used-6)*16+16
+ %endif
+%endmacro
+
+%macro RESTORE_XMM 1
+ RESTORE_XMM_INTERNAL %1
+ %assign stack_offset stack_offset-(xmm_regs_used-6)*16+16
+ %assign xmm_regs_used 0
+%endmacro
+
+%macro RET 0
+ RESTORE_XMM_INTERNAL rsp
+ %if regs_used > 4
+ pop r5
+ pop r4
+ %endif
+ ret
+%endmacro
+
+%macro REP_RET 0
+ %if regs_used > 4 || xmm_regs_used > 6
+ RET
+ %else
+ rep ret
+ %endif
+%endmacro
+
+%elifdef ARCH_X86_64 ; *nix x64 ;=============================================
+
+DECLARE_REG 0, rdi, edi, di, dil, edi
+DECLARE_REG 1, rsi, esi, si, sil, esi
+DECLARE_REG 2, rdx, edx, dx, dl, edx
+DECLARE_REG 3, rcx, ecx, cx, cl, ecx
+DECLARE_REG 4, r8, r8d, r8w, r8b, r8d
+DECLARE_REG 5, r9, r9d, r9w, r9b, r9d
+DECLARE_REG 6, rax, eax, ax, al, [rsp + stack_offset + 8]
+%define r7m [rsp + stack_offset + 16]
+%define r8m [rsp + stack_offset + 24]
+
+%macro LOAD_IF_USED 2 ; reg_id, number_of_args
+ %if %1 < %2
+ mov r%1, [rsp - 40 + %1*8]
+ %endif
+%endmacro
+
+%macro PROLOGUE 2-4+ ; #args, #regs, #xmm_regs, arg_names...
+ ASSERT %2 >= %1
+ ASSERT %2 <= 7
+ LOAD_IF_USED 6, %1
+ DEFINE_ARGS %4
+%endmacro
+
+%macro RET 0
+ ret
+%endmacro
+
+%macro REP_RET 0
+ rep ret
+%endmacro
+
+%else ; X86_32 ;==============================================================
+
+DECLARE_REG 0, eax, eax, ax, al, [esp + stack_offset + 4]
+DECLARE_REG 1, ecx, ecx, cx, cl, [esp + stack_offset + 8]
+DECLARE_REG 2, edx, edx, dx, dl, [esp + stack_offset + 12]
+DECLARE_REG 3, ebx, ebx, bx, bl, [esp + stack_offset + 16]
+DECLARE_REG 4, esi, esi, si, null, [esp + stack_offset + 20]
+DECLARE_REG 5, edi, edi, di, null, [esp + stack_offset + 24]
+DECLARE_REG 6, ebp, ebp, bp, null, [esp + stack_offset + 28]
+%define r7m [esp + stack_offset + 32]
+%define r8m [esp + stack_offset + 36]
+%define rsp esp
+
+%macro PUSH_IF_USED 1 ; reg_id
+ %if %1 < regs_used
+ push r%1
+ %assign stack_offset stack_offset+4
+ %endif
+%endmacro
+
+%macro POP_IF_USED 1 ; reg_id
+ %if %1 < regs_used
+ pop r%1
+ %endif
+%endmacro
+
+%macro LOAD_IF_USED 2 ; reg_id, number_of_args
+ %if %1 < %2
+ mov r%1, [esp + stack_offset + 4 + %1*4]
+ %endif
+%endmacro
+
+%macro PROLOGUE 2-4+ ; #args, #regs, arg_names...
+ ASSERT %2 >= %1
+ %assign regs_used %2
+ ASSERT regs_used <= 7
+ PUSH_IF_USED 3
+ PUSH_IF_USED 4
+ PUSH_IF_USED 5
+ PUSH_IF_USED 6
+ LOAD_IF_USED 0, %1
+ LOAD_IF_USED 1, %1
+ LOAD_IF_USED 2, %1
+ LOAD_IF_USED 3, %1
+ LOAD_IF_USED 4, %1
+ LOAD_IF_USED 5, %1
+ LOAD_IF_USED 6, %1
+ DEFINE_ARGS %4
+%endmacro
+
+%macro RET 0
+ POP_IF_USED 6
+ POP_IF_USED 5
+ POP_IF_USED 4
+ POP_IF_USED 3
+ ret
+%endmacro
+
+%macro REP_RET 0
+ %if regs_used > 3
+ RET
+ %else
+ rep ret
+ %endif
+%endmacro
+
+%endif ;======================================================================
+
+
+
+;=============================================================================
+; arch-independent part
+;=============================================================================
+
+%assign function_align 16
+
+; Symbol prefix for C linkage
+%macro cglobal 1-2+
+ %xdefine %1 ff_%1
+ %ifdef PREFIX
+ %xdefine %1 _ %+ %1
+ %endif
+ %xdefine %1.skip_prologue %1 %+ .skip_prologue
+ %ifidn __OUTPUT_FORMAT__,elf
+ global %1:function hidden
+ %else
+ global %1
+ %endif
+ align function_align
+ %1:
+ RESET_MM_PERMUTATION ; not really needed, but makes disassembly somewhat nicer
+ %assign stack_offset 0
+ %if %0 > 1
+ PROLOGUE %2
+ %endif
+%endmacro
+
+%macro cextern 1
+ %ifdef PREFIX
+ %xdefine %1 _%1
+ %endif
+ extern %1
+%endmacro
+
+; This is needed for ELF, otherwise the GNU linker assumes the stack is
+; executable by default.
+%ifidn __OUTPUT_FORMAT__,elf
+SECTION .note.GNU-stack noalloc noexec nowrite progbits
+%endif
+
+%assign FENC_STRIDE 16
+%assign FDEC_STRIDE 32
+
+; merge mmx and sse*
+
+%macro CAT_XDEFINE 3
+ %xdefine %1%2 %3
+%endmacro
+
+%macro CAT_UNDEF 2
+ %undef %1%2
+%endmacro
+
+%macro INIT_MMX 0
+ %define RESET_MM_PERMUTATION INIT_MMX
+ %define mmsize 8
+ %define num_mmregs 8
+ %define mova movq
+ %define movu movq
+ %define movh movd
+ %define movnt movntq
+ %assign %%i 0
+ %rep 8
+ CAT_XDEFINE m, %%i, mm %+ %%i
+ CAT_XDEFINE nmm, %%i, %%i
+ %assign %%i %%i+1
+ %endrep
+ %rep 8
+ CAT_UNDEF m, %%i
+ CAT_UNDEF nmm, %%i
+ %assign %%i %%i+1
+ %endrep
+%endmacro
+
+%macro INIT_XMM 0
+ %define RESET_MM_PERMUTATION INIT_XMM
+ %define mmsize 16
+ %define num_mmregs 8
+ %ifdef ARCH_X86_64
+ %define num_mmregs 16
+ %endif
+ %define mova movdqa
+ %define movu movdqu
+ %define movh movq
+ %define movnt movntdq
+ %assign %%i 0
+ %rep num_mmregs
+ CAT_XDEFINE m, %%i, xmm %+ %%i
+ CAT_XDEFINE nxmm, %%i, %%i
+ %assign %%i %%i+1
+ %endrep
+%endmacro
+
+INIT_MMX
+
+; I often want to use macros that permute their arguments. e.g. there's no
+; efficient way to implement butterfly or transpose or dct without swapping some
+; arguments.
+;
+; I would like to not have to manually keep track of the permutations:
+; If I insert a permutation in the middle of a function, it should automatically
+; change everything that follows. For more complex macros I may also have multiple
+; implementations, e.g. the SSE2 and SSSE3 versions may have different permutations.
+;
+; Hence these macros. Insert a PERMUTE or some SWAPs at the end of a macro that
+; permutes its arguments. It's equivalent to exchanging the contents of the
+; registers, except that this way you exchange the register names instead, so it
+; doesn't cost any cycles.
+
+%macro PERMUTE 2-* ; takes a list of pairs to swap
+%rep %0/2
+ %xdefine tmp%2 m%2
+ %xdefine ntmp%2 nm%2
+ %rotate 2
+%endrep
+%rep %0/2
+ %xdefine m%1 tmp%2
+ %xdefine nm%1 ntmp%2
+ %undef tmp%2
+ %undef ntmp%2
+ %rotate 2
+%endrep
+%endmacro
+
+%macro SWAP 2-* ; swaps a single chain (sometimes more concise than pairs)
+%rep %0-1
+%ifdef m%1
+ %xdefine tmp m%1
+ %xdefine m%1 m%2
+ %xdefine m%2 tmp
+ CAT_XDEFINE n, m%1, %1
+ CAT_XDEFINE n, m%2, %2
+%else
+ ; If we were called as "SWAP m0,m1" rather than "SWAP 0,1" infer the original numbers here.
+ ; Be careful using this mode in nested macros though, as in some cases there may be
+ ; other copies of m# that have already been dereferenced and don't get updated correctly.
+ %xdefine %%n1 n %+ %1
+ %xdefine %%n2 n %+ %2
+ %xdefine tmp m %+ %%n1
+ CAT_XDEFINE m, %%n1, m %+ %%n2
+ CAT_XDEFINE m, %%n2, tmp
+ CAT_XDEFINE n, m %+ %%n1, %%n1
+ CAT_XDEFINE n, m %+ %%n2, %%n2
+%endif
+ %undef tmp
+ %rotate 1
+%endrep
+%endmacro
+
+%macro SAVE_MM_PERMUTATION 1
+ %assign %%i 0
+ %rep num_mmregs
+ CAT_XDEFINE %1_m, %%i, m %+ %%i
+ %assign %%i %%i+1
+ %endrep
+%endmacro
+
+%macro LOAD_MM_PERMUTATION 1
+ %assign %%i 0
+ %rep num_mmregs
+ CAT_XDEFINE m, %%i, %1_m %+ %%i
+ CAT_XDEFINE n, m %+ %%i, %%i
+ %assign %%i %%i+1
+ %endrep
+%endmacro
+
+%macro call 1
+ call %1
+ %ifdef %1_m0
+ LOAD_MM_PERMUTATION %1
+ %endif
+%endmacro
+
+;Substitutions that reduce instruction size but are functionally equivalent
+%macro add 2
+ %ifnum %2
+ %if %2==128
+ sub %1, -128
+ %else
+ add %1, %2
+ %endif
+ %else
+ add %1, %2
+ %endif
+%endmacro
+
+%macro sub 2
+ %ifnum %2
+ %if %2==128
+ add %1, -128
+ %else
+ sub %1, %2
+ %endif
+ %else
+ sub %1, %2
+ %endif
+%endmacro
diff --git a/plugins/gtkui/Makefile.am b/plugins/gtkui/Makefile.am
index 329f14b2..7c82d4e5 100644
--- a/plugins/gtkui/Makefile.am
+++ b/plugins/gtkui/Makefile.am
@@ -36,7 +36,8 @@ GTKUI_SOURCES = gtkui.c gtkui.h\
dspconfig.c dspconfig.h\
tagwritersettings.c tagwritersettings.h\
wingeom.c wingeom.h\
- pluginconf.h
+ pluginconf.h\
+ widgets.c widgets.h
sdkdir = $(pkgincludedir)
sdk_HEADERS = gtkui_api.h
diff --git a/plugins/gtkui/callbacks.c b/plugins/gtkui/callbacks.c
index 4fdc73c3..268028e2 100644
--- a/plugins/gtkui/callbacks.c
+++ b/plugins/gtkui/callbacks.c
@@ -282,9 +282,8 @@ on_select_all1_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
deadbeef->pl_select_all ();
- DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist"));
- ddb_listview_refresh (pl, DDB_REFRESH_LIST);
- pl = DDB_LISTVIEW (lookup_widget (searchwin, "searchlist"));
+ deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0);
+ DdbListview *pl = DDB_LISTVIEW (lookup_widget (searchwin, "searchlist"));
if (pl) {
ddb_listview_refresh (pl, DDB_REFRESH_LIST);
}
@@ -358,9 +357,6 @@ on_mainwin_key_press_event (GtkWidget *widget,
deadbeef->conf_set_int ("playlist.current", pl);
}
}
- else {
- ddb_listview_handle_keypress (DDB_LISTVIEW (lookup_widget (mainwin, "playlist")), event->keyval, event->state);
- }
return FALSE;
}
@@ -837,6 +833,8 @@ void
on_toggle_column_headers_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
+ // FIXME!
+ return;
GtkWidget *playlist = lookup_widget (mainwin, "playlist");
if (playlist) {
if (!gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (menuitem))) {
@@ -902,6 +900,8 @@ void
on_toggle_tabs (GtkMenuItem *menuitem,
gpointer user_data)
{
+ // FIXME!
+ return;
GtkWidget *ts = lookup_widget (mainwin, "tabstrip");
if (!gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (menuitem))) {
deadbeef->conf_set_int ("gtkui.tabs.visible", 0);
@@ -945,9 +945,8 @@ on_deselect_all1_activate (GtkMenuItem *menuitem,
it = next;
}
deadbeef->pl_unlock ();
- DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist"));
- ddb_listview_refresh (pl, DDB_REFRESH_LIST);
- pl = DDB_LISTVIEW (lookup_widget (searchwin, "searchlist"));
+ deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0);
+ DdbListview *pl = DDB_LISTVIEW (lookup_widget (searchwin, "searchlist"));
if (pl) {
ddb_listview_refresh (pl, DDB_REFRESH_LIST);
}
@@ -972,8 +971,7 @@ on_invert_selection1_activate (GtkMenuItem *menuitem,
it = next;
}
deadbeef->pl_unlock ();
- DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist"));
- ddb_listview_refresh (pl, DDB_REFRESH_LIST);
+ deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0);
}
@@ -1132,9 +1130,7 @@ on_sort_by_title_activate (GtkMenuItem *menuitem,
deadbeef->plt_sort (plt, PL_MAIN, -1, "%t", 1);
deadbeef->plt_unref (plt);
- DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist"));
- ddb_listview_clear_sort (pl);
- ddb_listview_refresh (pl, DDB_REFRESH_LIST | DDB_LIST_CHANGED);
+ deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0);
}
@@ -1146,9 +1142,7 @@ on_sort_by_track_nr_activate (GtkMenuItem *menuitem,
deadbeef->plt_sort (plt, PL_MAIN, -1, "%n", 1);
deadbeef->plt_unref (plt);
- DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist"));
- ddb_listview_clear_sort (pl);
- ddb_listview_refresh (pl, DDB_REFRESH_LIST | DDB_LIST_CHANGED);
+ deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0);
}
@@ -1160,9 +1154,7 @@ on_sort_by_album_activate (GtkMenuItem *menuitem,
deadbeef->plt_sort (plt, PL_MAIN, -1, "%b", 1);
deadbeef->plt_unref (plt);
- DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist"));
- ddb_listview_clear_sort (pl);
- ddb_listview_refresh (pl, DDB_REFRESH_LIST | DDB_LIST_CHANGED);
+ deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0);
}
@@ -1174,9 +1166,7 @@ on_sort_by_artist_activate (GtkMenuItem *menuitem,
deadbeef->plt_sort (plt, PL_MAIN, -1, "%a", 1);
deadbeef->plt_unref (plt);
- DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist"));
- ddb_listview_clear_sort (pl);
- ddb_listview_refresh (pl, DDB_REFRESH_LIST | DDB_LIST_CHANGED);
+ deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0);
}
@@ -1188,9 +1178,7 @@ on_sort_by_date_activate (GtkMenuItem *menuitem,
deadbeef->plt_sort (plt, PL_MAIN, -1, "%y", 1);
deadbeef->plt_unref (plt);
- DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist"));
- ddb_listview_clear_sort (pl);
- ddb_listview_refresh (pl, DDB_REFRESH_LIST | DDB_LIST_CHANGED);
+ deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0);
}
@@ -1224,11 +1212,18 @@ on_sort_by_custom_activate (GtkMenuItem *menuitem,
deadbeef->plt_sort (plt, PL_MAIN, -1, fmt, order == 0 ? 1 : 0);
deadbeef->plt_unref (plt);
- DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist"));
- ddb_listview_clear_sort (pl);
- ddb_listview_refresh (pl, DDB_REFRESH_LIST | DDB_LIST_CHANGED);
+ deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0);
}
gtk_widget_destroy (dlg);
dlg = NULL;
}
+
+void
+on_design_mode1_activate (GtkMenuItem *menuitem,
+ gpointer user_data)
+{
+ gboolean act = gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (menuitem));
+ w_set_design_mode (act ? 1 : 0);
+}
+
diff --git a/plugins/gtkui/callbacks.h b/plugins/gtkui/callbacks.h
index fd92b376..1c407678 100644
--- a/plugins/gtkui/callbacks.h
+++ b/plugins/gtkui/callbacks.h
@@ -1155,3 +1155,7 @@ on_sort_by_custom_activate (GtkMenuItem *menuitem,
void
on_convert8to16_toggled (GtkToggleButton *togglebutton,
gpointer user_data);
+
+void
+on_design_mode1_activate (GtkMenuItem *menuitem,
+ gpointer user_data);
diff --git a/plugins/gtkui/ddblistview.c b/plugins/gtkui/ddblistview.c
index b6140456..33d16bff 100644
--- a/plugins/gtkui/ddblistview.c
+++ b/plugins/gtkui/ddblistview.c
@@ -265,6 +265,14 @@ ddb_listview_motion_notify_event (GtkWidget *widget,
GdkEventMotion *event,
gpointer user_data);
+gboolean
+ddb_listview_list_key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data);
+
+gboolean
+ddb_listview_list_focus_in_event (GtkWidget *widget, GdkEvent *event, gpointer user_data);
+
+gboolean
+ddb_listview_list_focus_out_event (GtkWidget *widget, GdkEvent *event, gpointer user_data);
static void
ddb_listview_class_init(DdbListviewClass *class)
@@ -351,7 +359,9 @@ ddb_listview_init(DdbListview *listview)
listview->list = gtk_drawing_area_new ();
gtk_widget_show (listview->list);
gtk_box_pack_start (GTK_BOX (vbox), listview->list, TRUE, TRUE, 0);
- gtk_widget_set_events (listview->list, GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK);
+ GTK_WIDGET_SET_FLAGS (listview->list, GTK_CAN_FOCUS);
+ GTK_WIDGET_SET_FLAGS (listview->list, GTK_CAN_DEFAULT);
+ gtk_widget_set_events (listview->list, GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_FOCUS_CHANGE_MASK);
listview->hscrollbar = gtk_hscrollbar_new (GTK_ADJUSTMENT (gtk_adjustment_new (0, 0, 0, 0, 0, 0)));
gtk_widget_show (listview->hscrollbar);
@@ -396,7 +406,7 @@ ddb_listview_init(DdbListview *listview)
g_signal_connect ((gpointer) listview->list, "realize",
G_CALLBACK (ddb_listview_list_realize),
NULL);
- g_signal_connect ((gpointer) listview->list, "button_press_event",
+ g_signal_connect_after ((gpointer) listview->list, "button_press_event",
G_CALLBACK (ddb_listview_list_button_press_event),
NULL);
g_signal_connect ((gpointer) listview->list, "scroll_event",
@@ -435,6 +445,10 @@ ddb_listview_init(DdbListview *listview)
g_signal_connect ((gpointer) listview->hscrollbar, "value_changed",
G_CALLBACK (ddb_listview_hscroll_value_changed),
NULL);
+
+ g_signal_connect ((gpointer)listview->list, "key_press_event", G_CALLBACK (ddb_listview_list_key_press_event), NULL);
+ g_signal_connect ((gpointer)listview->list, "focus_in_event", G_CALLBACK (ddb_listview_list_focus_in_event), NULL);
+ g_signal_connect ((gpointer)listview->list, "focus_out_event", G_CALLBACK (ddb_listview_list_focus_out_event), NULL);
}
GtkWidget * ddb_listview_new()
@@ -2563,6 +2577,7 @@ ddb_listview_list_button_press_event (GtkWidget *widget,
GdkEventButton *event,
gpointer user_data)
{
+ gtk_widget_grab_focus (widget);
DdbListview *ps = DDB_LISTVIEW (g_object_get_data (G_OBJECT (widget), "owner"));
if (event->button == 1) {
ddb_listview_list_mouse1_pressed (ps, event->state, event->x, event->y, event->type);
@@ -2604,7 +2619,7 @@ ddb_listview_list_button_press_event (GtkWidget *widget,
UNREF (it);
}
}
- return FALSE;
+ return TRUE;
}
gboolean
@@ -2969,3 +2984,23 @@ ddb_listview_clear_sort (DdbListview *listview) {
}
gtk_widget_queue_draw (listview->header);
}
+
+gboolean
+ddb_listview_list_key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data) {
+ DdbListview *listview = DDB_LISTVIEW (g_object_get_data (G_OBJECT (widget), "owner"));
+ ddb_listview_handle_keypress (listview, event->keyval, event->state);
+ return FALSE;
+
+}
+
+gboolean
+ddb_listview_list_focus_in_event (GtkWidget *widget, GdkEvent *event, gpointer user_data) {
+ GTK_WIDGET_SET_FLAGS (widget, GTK_HAS_FOCUS);
+ return FALSE;
+}
+
+gboolean
+ddb_listview_list_focus_out_event (GtkWidget *widget, GdkEvent *event, gpointer user_data) {
+ GTK_WIDGET_UNSET_FLAGS (widget, GTK_HAS_FOCUS);
+ return FALSE;
+}
diff --git a/plugins/gtkui/ddbtabstrip.c b/plugins/gtkui/ddbtabstrip.c
index f8f3e6c4..e1882d1e 100644
--- a/plugins/gtkui/ddbtabstrip.c
+++ b/plugins/gtkui/ddbtabstrip.c
@@ -25,7 +25,7 @@
#include "gtkui.h"
#include "interface.h"
#include "support.h"
-#include "ddblistview.h"
+#include "mainplaylist.h"
#define GLADE_HOOKUP_OBJECT(component,widget,name) \
g_object_set_data_full (G_OBJECT (component), name, \
@@ -220,7 +220,6 @@ ddb_tabstrip_class_init(DdbTabStripClass *class)
widget_class->realize = ddb_tabstrip_realize;
widget_class->size_allocate = ddb_tabstrip_size_allocate;
widget_class->expose_event = on_tabstrip_expose_event;
- widget_class->button_press_event = on_tabstrip_button_press_event;
widget_class->button_release_event = on_tabstrip_button_release_event;
widget_class->configure_event = on_tabstrip_configure_event;
widget_class->motion_notify_event = on_tabstrip_motion_notify_event;
@@ -253,8 +252,6 @@ on_tabstrip_drag_data_received (GtkWidget *widget,
guint target_type,
guint time)
{
- DdbListview *ps = DDB_LISTVIEW (lookup_widget (mainwin, "playlist"));
-
gchar *ptr=(char*)data->data;
if (target_type == 0) { // uris
// this happens when dropped from file manager
@@ -262,7 +259,7 @@ on_tabstrip_drag_data_received (GtkWidget *widget,
memcpy (mem, ptr, data->length);
mem[data->length] = 0;
// we don't pass control structure, but there's only one drag-drop view currently
- ps->binding->external_drag_n_drop (NULL, mem, data->length);
+ gtkui_receive_fm_drop (NULL, mem, data->length);
}
else if (target_type == 1) {
uint32_t *d= (uint32_t *)ptr;
@@ -271,7 +268,8 @@ on_tabstrip_drag_data_received (GtkWidget *widget,
int length = (data->length/4)-1;
ddb_playlist_t *p = deadbeef->plt_get_for_idx (plt);
if (p) {
- ps->binding->drag_n_drop (NULL, p, d, length, drag_context->action == GDK_ACTION_COPY ? 1 : 0);
+ //ps->binding->drag_n_drop (NULL, p, d, length, drag_context->action == GDK_ACTION_COPY ? 1 : 0);
+ main_drag_n_drop (NULL, p, d, length, drag_context->action == GDK_ACTION_COPY ? 1 : 0);
deadbeef->plt_unref (p);
}
}
@@ -283,16 +281,16 @@ on_tabstrip_drag_leave (GtkWidget *widget,
GdkDragContext *drag_context,
guint time)
{
- DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist"));
- ddb_listview_list_drag_leave (pl->list, drag_context, time, NULL);
+// DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist"));
+// ddb_listview_list_drag_leave (pl->list, drag_context, time, NULL);
}
void
on_tabstrip_drag_end (GtkWidget *widget,
GdkDragContext *drag_context)
{
- DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist"));
- ddb_listview_list_drag_end (pl->list, drag_context, NULL);
+// DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist"));
+// ddb_listview_list_drag_end (pl->list, drag_context, NULL);
}
GtkWidget * ddb_tabstrip_new() {
@@ -309,6 +307,9 @@ ddb_tabstrip_init(DdbTabStrip *tabstrip)
tabstrip->dragpt[1] = 0;
tabstrip->prev_x = 0;
tabstrip->movepos = 0;
+ g_signal_connect_after ((gpointer) tabstrip, "button_press_event",
+ G_CALLBACK (on_tabstrip_button_press_event),
+ NULL);
}
static int tab_clicked = -1;
@@ -713,8 +714,6 @@ on_remove_playlist1_activate (GtkMenuItem *menuitem,
{
if (tab_clicked != -1) {
deadbeef->plt_remove (tab_clicked);
- DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist"));
- ddb_listview_refresh (pl, DDB_LIST_CHANGED | DDB_REFRESH_LIST | DDB_REFRESH_VSCROLL);
search_refresh ();
int playlist = deadbeef->plt_get_curr_idx ();
deadbeef->conf_set_int ("playlist.current", playlist);
@@ -845,7 +844,7 @@ on_tabstrip_button_press_event(GtkWidget *widget,
ts->scroll_direction = -1;
ts->scroll_timer = g_timeout_add (300, tabstrip_scroll_cb, ts);
}
- return FALSE;
+ return TRUE;
}
else if (event->x >= widget->allocation.width - arrow_widget_width) {
if (event->type == GDK_BUTTON_PRESS) {
@@ -853,7 +852,7 @@ on_tabstrip_button_press_event(GtkWidget *widget,
ts->scroll_direction = 1;
ts->scroll_timer = g_timeout_add (300, tabstrip_scroll_cb, ts);
}
- return FALSE;
+ return TRUE;
}
}
if (tab_clicked != -1) {
@@ -866,9 +865,9 @@ on_tabstrip_button_press_event(GtkWidget *widget,
if (playlist != -1) {
gtkui_playlist_set_curr (playlist);
}
- return FALSE;
+ return TRUE;
}
- return FALSE;
+ return TRUE;
}
// adjust scroll if clicked tab spans border
@@ -904,21 +903,19 @@ on_tabstrip_button_press_event(GtkWidget *widget,
if (playlist != -1) {
gtkui_playlist_set_curr (playlist);
}
- return FALSE;
+ return TRUE;
}
else if (deadbeef->conf_get_int ("gtkui.mmb_delete_playlist", 1)) {
if (tab_clicked != -1) {
deadbeef->plt_remove (tab_clicked);
// force invalidation of playlist cache
- DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist"));
- ddb_listview_refresh (pl, DDB_LIST_CHANGED | DDB_REFRESH_LIST | DDB_REFRESH_VSCROLL);
search_refresh ();
int playlist = deadbeef->plt_get_curr_idx ();
deadbeef->conf_set_int ("playlist.current", playlist);
}
}
}
- return FALSE;
+ return TRUE;
}
diff --git a/plugins/gtkui/deadbeef.glade b/plugins/gtkui/deadbeef.glade
index 73759b65..926fa6ab 100644
--- a/plugins/gtkui/deadbeef.glade
+++ b/plugins/gtkui/deadbeef.glade
@@ -62,7 +62,7 @@
<accelerator key="O" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image">
- <widget class="GtkImage" id="image555">
+ <widget class="GtkImage" id="image563">
<property name="visible">True</property>
<property name="stock">gtk-open</property>
<property name="icon_size">1</property>
@@ -89,7 +89,7 @@
<signal name="activate" handler="on_add_files_activate" last_modification_time="Sat, 04 Jul 2009 13:04:01 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image556">
+ <widget class="GtkImage" id="image564">
<property name="visible">True</property>
<property name="stock">gtk-add</property>
<property name="icon_size">1</property>
@@ -110,7 +110,7 @@
<signal name="activate" handler="on_add_folders_activate" last_modification_time="Sun, 06 Sep 2009 17:51:40 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image557">
+ <widget class="GtkImage" id="image565">
<property name="visible">True</property>
<property name="stock">gtk-add</property>
<property name="icon_size">1</property>
@@ -181,7 +181,7 @@
<accelerator key="Q" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image">
- <widget class="GtkImage" id="image558">
+ <widget class="GtkImage" id="image566">
<property name="visible">True</property>
<property name="stock">gtk-quit</property>
<property name="icon_size">1</property>
@@ -215,7 +215,7 @@
<signal name="activate" handler="on_clear1_activate" last_modification_time="Sun, 06 Sep 2009 18:30:03 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image559">
+ <widget class="GtkImage" id="image567">
<property name="visible">True</property>
<property name="stock">gtk-clear</property>
<property name="icon_size">1</property>
@@ -274,7 +274,7 @@
<signal name="activate" handler="on_remove1_activate" last_modification_time="Sun, 06 Sep 2009 18:30:03 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image560">
+ <widget class="GtkImage" id="image568">
<property name="visible">True</property>
<property name="stock">gtk-remove</property>
<property name="icon_size">1</property>
@@ -444,6 +444,16 @@
<signal name="activate" handler="on_toggle_eq" last_modification_time="Sat, 20 Mar 2010 12:28:50 GMT"/>
</widget>
</child>
+
+ <child>
+ <widget class="GtkCheckMenuItem" id="design_mode1">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Design mode</property>
+ <property name="use_underline">True</property>
+ <property name="active">False</property>
+ <signal name="activate" handler="on_design_mode1_activate" last_modification_time="Fri, 17 Jun 2011 19:10:50 GMT"/>
+ </widget>
+ </child>
</widget>
</child>
</widget>
@@ -472,7 +482,7 @@
<property name="visible">True</property>
<property name="label" translatable="yes">Linear</property>
<property name="use_underline">True</property>
- <property name="active">False</property>
+ <property name="active">True</property>
<signal name="activate" handler="on_order_linear_activate" last_modification_time="Sat, 08 Aug 2009 12:26:33 GMT"/>
</widget>
</child>
@@ -482,7 +492,7 @@
<property name="visible">True</property>
<property name="label" translatable="yes">Shuffle tracks</property>
<property name="use_underline">True</property>
- <property name="active">False</property>
+ <property name="active">True</property>
<property name="group">order_linear</property>
<signal name="activate" handler="on_order_shuffle_activate" last_modification_time="Fri, 21 Aug 2009 16:46:02 GMT"/>
</widget>
@@ -493,7 +503,7 @@
<property name="visible">True</property>
<property name="label" translatable="yes">Shuffle albums</property>
<property name="use_underline">True</property>
- <property name="active">False</property>
+ <property name="active">True</property>
<property name="group">order_linear</property>
<signal name="activate" handler="on_order_shuffle_albums_activate" last_modification_time="Sun, 12 Dec 2010 18:14:47 GMT"/>
</widget>
@@ -528,7 +538,7 @@
<property name="visible">True</property>
<property name="label" translatable="yes">Loop All</property>
<property name="use_underline">True</property>
- <property name="active">False</property>
+ <property name="active">True</property>
<signal name="activate" handler="on_loop_all_activate" last_modification_time="Sat, 08 Aug 2009 12:26:33 GMT"/>
</widget>
</child>
@@ -538,7 +548,7 @@
<property name="visible">True</property>
<property name="label" translatable="yes">Loop Single Song</property>
<property name="use_underline">True</property>
- <property name="active">False</property>
+ <property name="active">True</property>
<property name="group">loop_all</property>
<signal name="activate" handler="on_loop_single_activate" last_modification_time="Sat, 08 Aug 2009 12:26:33 GMT"/>
</widget>
@@ -627,7 +637,7 @@
<signal name="activate" handler="on_help1_activate" last_modification_time="Tue, 08 Sep 2009 17:32:06 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image561">
+ <widget class="GtkImage" id="image569">
<property name="visible">True</property>
<property name="stock">gtk-help</property>
<property name="icon_size">1</property>
@@ -687,7 +697,7 @@
<signal name="activate" handler="on_about1_activate" last_modification_time="Sat, 04 Jul 2009 12:57:58 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image562">
+ <widget class="GtkImage" id="image570">
<property name="visible">True</property>
<property name="stock">gtk-about</property>
<property name="icon_size">1</property>
@@ -708,7 +718,7 @@
<signal name="activate" handler="on_translators1_activate" last_modification_time="Sun, 19 Sep 2010 13:38:07 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image563">
+ <widget class="GtkImage" id="image571">
<property name="visible">True</property>
<property name="stock">gtk-about</property>
<property name="icon_size">1</property>
@@ -928,47 +938,6 @@
</child>
<child>
- <widget class="Custom" id="tabstrip">
- <property name="height_request">24</property>
- <property name="visible">True</property>
- <property name="creation_function">create_tabstrip_widget</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Thu, 18 Feb 2010 18:05:36 GMT</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="frame1">
- <property name="border_width">1</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="Custom" id="playlist">
- <property name="visible">True</property>
- <property name="creation_function">create_ddb_listview_widget</property>
- <property name="int1">0</property>
- <property name="int2">0</property>
- <property name="last_modification_time">Sat, 13 Feb 2010 20:26:03 GMT</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
<widget class="GtkVBox" id="plugins_bottom_vbox">
<property name="visible">True</property>
<property name="homogeneous">False</property>
@@ -980,8 +949,8 @@
</widget>
<packing>
<property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
</packing>
</child>
diff --git a/plugins/gtkui/fileman.c b/plugins/gtkui/fileman.c
index 8947c821..4b1b6949 100644
--- a/plugins/gtkui/fileman.c
+++ b/plugins/gtkui/fileman.c
@@ -104,17 +104,15 @@ static void
open_files_worker (void *data) {
GSList *lst = (GSList *)data;
gtkpl_add_files (lst);
- gtkui_playlist_changed ();
- extern GtkWidget *mainwin;
- DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist"));
- ddb_listview_set_cursor (pl, 0);
+ deadbeef->pl_set_cursor (PL_MAIN, 0);
+ deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0);
deadbeef->sendmessage (DB_EV_PLAY_CURRENT, 0, 1, 0);
}
void
gtkui_open_files (struct _GSList *lst) {
deadbeef->pl_clear ();
- playlist_refresh ();
+ deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0);
intptr_t tid = deadbeef->thread_start (open_files_worker, lst);
deadbeef->thread_detach (tid);
@@ -164,13 +162,14 @@ strcopy_special (char *dest, const char *src, int len) {
static gboolean
set_dnd_cursor_idle (gpointer data) {
- DdbListview *listview = DDB_LISTVIEW (lookup_widget (mainwin, "playlist"));
if (!data) {
- ddb_listview_set_cursor (listview, -1);
+ deadbeef->pl_set_cursor (PL_MAIN, -1);
+ deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0);
return FALSE;
}
int cursor = deadbeef->pl_get_idx_of (DB_PLAYITEM (data));
- ddb_listview_set_cursor (listview, cursor);
+ deadbeef->pl_set_cursor (PL_MAIN, cursor);
+ deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0);
return FALSE;
}
@@ -182,7 +181,6 @@ gtkpl_add_fm_dropped_files (DB_playItem_t *drop_before, char *ptr, int length) {
deadbeef->plt_unref (plt);
return;
}
- DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist"));
DdbListviewIter first = NULL;
DdbListviewIter after = NULL;
diff --git a/plugins/gtkui/gtkui.c b/plugins/gtkui/gtkui.c
index 4dd222b1..aa7da8b7 100644
--- a/plugins/gtkui/gtkui.c
+++ b/plugins/gtkui/gtkui.c
@@ -29,7 +29,6 @@
#include "../../gettext.h"
#include "gtkui.h"
#include "ddblistview.h"
-#include "mainplaylist.h"
#include "search.h"
#include "progress.h"
#include "interface.h"
@@ -47,6 +46,7 @@
#include "pluginconf.h"
#include "gtkui_api.h"
#include "wingeom.h"
+#include "widgets.h"
#define trace(...) { fprintf(stderr, __VA_ARGS__); }
//#define trace(fmt,...)
@@ -337,7 +337,7 @@ activate_cb (gpointer nothing) {
}
void
-redraw_queued_tracks (DdbListview *pl, int list) {
+redraw_queued_tracks (DdbListview *pl) {
DB_playItem_t *it;
int idx = 0;
deadbeef->pl_lock ();
@@ -352,14 +352,10 @@ redraw_queued_tracks (DdbListview *pl, int list) {
deadbeef->pl_unlock ();
}
-static gboolean
-redraw_queued_tracks_cb (gpointer nothing) {
- int iconified = gdk_window_get_state(mainwin->window) & GDK_WINDOW_STATE_ICONIFIED;
- if (!gtk_widget_get_visible (mainwin) || iconified) {
- return FALSE;
- }
- redraw_queued_tracks (DDB_LISTVIEW (lookup_widget (mainwin, "playlist")), PL_MAIN);
- redraw_queued_tracks (DDB_LISTVIEW (lookup_widget (searchwin, "searchlist")), PL_SEARCH);
+gboolean
+redraw_queued_tracks_cb (gpointer plt) {
+ DdbListview *list = plt;
+ redraw_queued_tracks (list);
return FALSE;
}
@@ -376,7 +372,12 @@ gtkpl_songchanged_wrapper (DB_playItem_t *from, DB_playItem_t *to) {
}
g_idle_add (update_win_title_idle, ft);
g_idle_add (redraw_seekbar_cb, NULL);
- g_idle_add (redraw_queued_tracks_cb, NULL);
+ if (searchwin && searchwin->window) {
+ int iconified = gdk_window_get_state(searchwin->window) & GDK_WINDOW_STATE_ICONIFIED;
+ if (gtk_widget_get_visible (searchwin) && !iconified) {
+ g_idle_add (redraw_queued_tracks_cb, DDB_LISTVIEW (lookup_widget (searchwin, "searchlist")));
+ }
+ }
}
void
@@ -415,8 +416,8 @@ trackinfochanged_wrapper (DdbListview *playlist, DB_playItem_t *track, int iter)
void
gtkui_trackinfochanged (DB_playItem_t *track) {
- GtkWidget *playlist = lookup_widget (mainwin, "playlist");
- trackinfochanged_wrapper (DDB_LISTVIEW (playlist), track, PL_MAIN);
+// GtkWidget *playlist = lookup_widget (mainwin, "playlist");
+// trackinfochanged_wrapper (DDB_LISTVIEW (playlist), track, PL_MAIN);
if (searchwin && gtk_widget_get_visible (searchwin)) {
GtkWidget *search = lookup_widget (searchwin, "searchlist");
@@ -441,22 +442,10 @@ trackinfochanged_cb (gpointer data) {
return FALSE;
}
-static gboolean
-paused_cb (gpointer nothing) {
- DB_playItem_t *curr = deadbeef->streamer_get_playing_track ();
- if (curr) {
- int idx = deadbeef->pl_get_idx_of (curr);
- GtkWidget *playlist = lookup_widget (mainwin, "playlist");
- ddb_listview_draw_row (DDB_LISTVIEW (playlist), idx, (DdbListviewIter)curr);
- deadbeef->pl_item_unref (curr);
- }
- return FALSE;
-}
-
void
playlist_refresh (void) {
- DdbListview *ps = DDB_LISTVIEW (lookup_widget (mainwin, "playlist"));
- ddb_listview_refresh (ps, DDB_REFRESH_LIST | DDB_REFRESH_VSCROLL);
+// DdbListview *ps = DDB_LISTVIEW (lookup_widget (mainwin, "playlist"));
+// ddb_listview_refresh (ps, DDB_REFRESH_LIST | DDB_REFRESH_VSCROLL);
search_refresh ();
}
@@ -473,26 +462,6 @@ gtkui_playlist_changed (void) {
static gboolean
playlistswitch_cb (gpointer none) {
- GtkWidget *tabstrip = lookup_widget (mainwin, "tabstrip");
- int curr = deadbeef->plt_get_curr_idx ();
- char conf[100];
- snprintf (conf, sizeof (conf), "playlist.scroll.%d", curr);
- int scroll = deadbeef->conf_get_int (conf, 0);
- snprintf (conf, sizeof (conf), "playlist.cursor.%d", curr);
- int cursor = deadbeef->conf_get_int (conf, -1);
- ddb_tabstrip_refresh (DDB_TABSTRIP (tabstrip));
- DdbListview *listview = DDB_LISTVIEW (lookup_widget (mainwin, "playlist"));
- deadbeef->pl_set_cursor (PL_MAIN, cursor);
- if (cursor != -1) {
- DB_playItem_t *it = deadbeef->pl_get_for_idx_and_iter (cursor, PL_MAIN);
- if (it) {
- deadbeef->pl_set_selected (it, 1);
- deadbeef->pl_item_unref (it);
- }
- }
-
- ddb_listview_refresh (listview, DDB_LIST_CHANGED | DDB_REFRESH_LIST | DDB_REFRESH_VSCROLL);
- ddb_listview_set_vscroll (listview, scroll);
search_refresh ();
return FALSE;
}
@@ -825,40 +794,6 @@ on_add_location_activate (GtkMenuItem *menuitem,
gtk_widget_destroy (dlg);
}
-static void
-songchanged (DdbListview *ps, DB_playItem_t *from, DB_playItem_t *to) {
- int to_idx = -1;
- if (!ddb_listview_is_scrolling (ps) && to) {
- int cursor_follows_playback = deadbeef->conf_get_int ("playlist.scroll.cursorfollowplayback", 0);
- int scroll_follows_playback = deadbeef->conf_get_int ("playlist.scroll.followplayback", 0);
- int plt = deadbeef->streamer_get_current_playlist ();
- if (plt != -1) {
- if (cursor_follows_playback && plt != deadbeef->plt_get_curr_idx ()) {
- deadbeef->plt_set_curr_idx (plt);
- }
- to_idx = deadbeef->pl_get_idx_of (to);
- if (to_idx != -1) {
- if (cursor_follows_playback) {
- ddb_listview_set_cursor_noscroll (ps, to_idx);
- }
- if (scroll_follows_playback && plt == deadbeef->plt_get_curr_idx ()) {
- ddb_listview_scroll_to (ps, to_idx);
- }
- }
- }
- }
-
- if (from) {
- int idx = deadbeef->pl_get_idx_of (from);
- if (idx != -1) {
- ddb_listview_draw_row (ps, idx, from);
- }
- }
- if (to && to_idx != -1) {
- ddb_listview_draw_row (ps, to_idx, to);
- }
-}
-
static gboolean
update_win_title_idle (gpointer data) {
struct fromto_t *ft = (struct fromto_t *)data;
@@ -882,8 +817,6 @@ update_win_title_idle (gpointer data) {
gtkui_set_titlebar (NULL);
}
}
- // update playlist view
- songchanged (DDB_LISTVIEW (lookup_widget (mainwin, "playlist")), from, to);
if (from) {
deadbeef->pl_item_unref (from);
}
@@ -941,11 +874,11 @@ volumebar_redraw (void) {
gdk_window_invalidate_rect (volumebar->window, NULL, FALSE);
}
-void
-tabstrip_redraw (void) {
- GtkWidget *ts = lookup_widget (mainwin, "tabstrip");
- ddb_tabstrip_refresh (DDB_TABSTRIP (ts));
-}
+//void
+//tabstrip_redraw (void) {
+// GtkWidget *ts = lookup_widget (mainwin, "tabstrip");
+// ddb_tabstrip_refresh (DDB_TABSTRIP (ts));
+//}
static int gtk_initialized = 0;
static gint refresh_timeout = 0;
@@ -970,8 +903,22 @@ gtkui_setup_gui_refresh (void) {
refresh_timeout = g_timeout_add (tm, gtkui_on_frameupdate, NULL);
}
+static void
+send_messages_to_widgets (ddb_gtkui_widget_t *w, uint32_t id, uintptr_t ctx, uint32_t p1, uint32_t p2) {
+ for (ddb_gtkui_widget_t *c = w->children; c; c = c->next) {
+ send_messages_to_widgets (c, id, ctx, p1, p2);
+ }
+ if (w->message) {
+ w->message (w, id, ctx, p1, p2);
+ }
+}
+
int
gtkui_message (uint32_t id, uintptr_t ctx, uint32_t p1, uint32_t p2) {
+ ddb_gtkui_widget_t *rootwidget = w_get_rootwidget ();
+ if (rootwidget) {
+ send_messages_to_widgets (rootwidget, id, ctx, p1, p2);
+ }
switch (id) {
case DB_EV_ACTIVATED:
g_idle_add (activate_cb, NULL);
@@ -991,9 +938,9 @@ gtkui_message (uint32_t id, uintptr_t ctx, uint32_t p1, uint32_t p2) {
g_idle_add (trackinfochanged_cb, ev->track);
}
break;
- case DB_EV_PAUSED:
- g_idle_add (paused_cb, NULL);
- break;
+// case DB_EV_PAUSED:
+// g_idle_add (paused_cb, NULL);
+// break;
case DB_EV_PLAYLISTCHANGED:
gtkui_playlist_changed ();
break;
@@ -1033,7 +980,42 @@ gtkui_thread (void *ctx) {
gtk_disable_setlocale ();
gtk_init (&argc, (char ***)&argv);
+ // register widget types
+ w_reg_widget ("tabbed_playlist", _("Playlist with tabs"), w_tabbed_playlist_create);
+ w_reg_widget ("box", NULL, w_box_create);
+ w_reg_widget ("vsplitter", _("Splitter (top and bottom)"), w_vsplitter_create);
+ w_reg_widget ("hsplitter", _("Splitter (left and right)"), w_hsplitter_create);
+ w_reg_widget ("placeholder", NULL, w_placeholder_create);
+ w_reg_widget ("tabs", _("Tabs"), w_tabs_create);
+ w_reg_widget ("tabstrip", _("Playlist tabs"), w_tabstrip_create);
+ w_reg_widget ("playlist", _("Playlist"), w_playlist_create);
+
mainwin = create_mainwin ();
+
+ // construct mainwindow widgets
+ {
+
+ w_init ();
+ ddb_gtkui_widget_t *rootwidget = w_get_rootwidget ();
+ gtk_widget_show (rootwidget->widget);
+ gtk_box_pack_start (GTK_BOX(lookup_widget(mainwin, "plugins_bottom_vbox")), rootwidget->widget, TRUE, TRUE, 0);
+
+ // load layout
+ char layout[1024];
+ deadbeef->conf_get_str ("gtkui.layout", "tabbed_playlist { }", layout, sizeof (layout));
+
+ ddb_gtkui_widget_t *w = NULL;
+ w_create_from_string (layout, &w);
+ if (!w) {
+ ddb_gtkui_widget_t *plt = w_create ("tabbed_playlist");
+ w_append (rootwidget, plt);
+ gtk_widget_show (plt->widget);
+ }
+ else {
+ w_append (rootwidget, w);
+ }
+ }
+
gtkpl_init ();
GtkIconTheme *theme = gtk_icon_theme_get_default();
@@ -1074,16 +1056,13 @@ gtkui_thread (void *ctx) {
searchwin = create_searchwin ();
gtk_window_set_transient_for (GTK_WINDOW (searchwin), GTK_WINDOW (mainwin));
- DdbListview *main_playlist = DDB_LISTVIEW (lookup_widget (mainwin, "playlist"));
- main_playlist_init (GTK_WIDGET (main_playlist));
-
+// DdbListview *main_playlist = DDB_LISTVIEW (lookup_widget (mainwin, "playlist"));
+// main_playlist_init (GTK_WIDGET (main_playlist));
if (deadbeef->conf_get_int ("gtkui.headers.visible", 1)) {
gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (header_mi), TRUE);
- ddb_listview_show_header (main_playlist, 1);
}
else {
gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (header_mi), FALSE);
- ddb_listview_show_header (main_playlist, 0);
}
DdbListview *search_playlist = DDB_LISTVIEW (lookup_widget (searchwin, "searchlist"));
@@ -1106,6 +1085,11 @@ gtkui_thread (void *ctx) {
gtk_main ();
+ w_free ();
+// w_unreg_widget ("tabbed_playlist");
+// w_unreg_widget ("box");
+// w_unreg_widget ("vsplitter");
+
if (refresh_timeout) {
g_source_remove (refresh_timeout);
refresh_timeout = 0;
@@ -1311,7 +1295,7 @@ gtkui_stop (void) {
deadbeef->thread_join (gtk_tid);
trace ("gtk thread finished\n");
gtk_tid = 0;
- main_playlist_free ();
+ //main_playlist_free ();
trace ("gtkui_stop completed\n");
return 0;
}
@@ -1371,4 +1355,5 @@ static ddb_gtkui_t plugin = {
.gui.plugin.message = gtkui_message,
.gui.run_dialog = gtkui_run_dialog_root,
.get_mainwin = gtkui_get_mainwin,
+ .api_version = GTKUI_API_VERSION,
};
diff --git a/plugins/gtkui/gtkui.h b/plugins/gtkui/gtkui.h
index e2ed8dbf..f3b075d3 100644
--- a/plugins/gtkui/gtkui.h
+++ b/plugins/gtkui/gtkui.h
@@ -133,8 +133,8 @@ on_seekbar_motion_notify_event (GtkWidget *widget,
void
volumebar_redraw (void);
-void
-tabstrip_redraw (void);
+//void
+//tabstrip_redraw (void);
void
gtkui_playlist_changed (void);
@@ -172,4 +172,7 @@ gtkui_get_curr_playlist_mod (void);
void
gtkui_trackinfochanged (DB_playItem_t *it);
+gboolean
+redraw_queued_tracks_cb (gpointer plt);
+
#endif
diff --git a/plugins/gtkui/gtkui_api.h b/plugins/gtkui/gtkui_api.h
index f20c411e..042c4fa5 100644
--- a/plugins/gtkui/gtkui_api.h
+++ b/plugins/gtkui/gtkui_api.h
@@ -25,9 +25,36 @@
#ifndef __GTKUI_API_H
#define __GTKUI_API_H
+#define GTKUI_API_VERSION 1 // for compile-time checking
+
+typedef struct ddb_gtkui_widget_s {
+ const char *type;
+
+ struct ddb_gtkui_widget_s *parent;
+
+ GtkWidget *widget;
+
+ uint32_t flags;
+
+ void (*destroy) (struct ddb_gtkui_widget_s *w);
+
+ void (*append) (struct ddb_gtkui_widget_s *container, struct ddb_gtkui_widget_s *child);
+ void (*remove) (struct ddb_gtkui_widget_s *container, struct ddb_gtkui_widget_s *child);
+ void (*replace) (struct ddb_gtkui_widget_s *container, struct ddb_gtkui_widget_s *child, struct ddb_gtkui_widget_s *newchild);
+
+ int (*message) (struct ddb_gtkui_widget_s *w, uint32_t id, uintptr_t ctx, uint32_t p1, uint32_t p2);
+
+ struct ddb_gtkui_widget_s *children;
+ struct ddb_gtkui_widget_s *next; // points to next widget in the same container
+} ddb_gtkui_widget_t;
+
typedef struct {
DB_gui_t gui;
+ int api_version;
GtkWidget * (*get_mainwin) (void);
+ void (*reg_widget) (const char *type, ddb_gtkui_widget_t *(*create_func) (void));
+ void (*unreg_widget) (const char *type);
+ ddb_gtkui_widget_t * (*get_root_widget) (void);
} ddb_gtkui_t;
#endif
diff --git a/plugins/gtkui/interface.c b/plugins/gtkui/interface.c
index 67d70dba..d09e9dc7 100644
--- a/plugins/gtkui/interface.c
+++ b/plugins/gtkui/interface.c
@@ -35,12 +35,12 @@ create_mainwin (void)
GtkWidget *File;
GtkWidget *File_menu;
GtkWidget *open;
- GtkWidget *image555;
+ GtkWidget *image563;
GtkWidget *separator2;
GtkWidget *add_files;
- GtkWidget *image556;
+ GtkWidget *image564;
GtkWidget *add_folders;
- GtkWidget *image557;
+ GtkWidget *image565;
GtkWidget *add_location1;
GtkWidget *separatormenuitem1;
GtkWidget *new_playlist1;
@@ -48,18 +48,18 @@ create_mainwin (void)
GtkWidget *playlist_save_as;
GtkWidget *separator8;
GtkWidget *quit;
- GtkWidget *image558;
+ GtkWidget *image566;
GtkWidget *Edit;
GtkWidget *Edit_menu;
GtkWidget *clear1;
- GtkWidget *image559;
+ GtkWidget *image567;
GtkWidget *select_all1;
GtkWidget *deselect_all1;
GtkWidget *invert_selection1;
GtkWidget *Selection;
GtkWidget *Selection_menu;
GtkWidget *remove1;
- GtkWidget *image560;
+ GtkWidget *image568;
GtkWidget *crop1;
GtkWidget *find1;
GtkWidget *sort_by1;
@@ -78,6 +78,7 @@ create_mainwin (void)
GtkWidget *view_headers;
GtkWidget *view_tabs;
GtkWidget *view_eq;
+ GtkWidget *design_mode1;
GtkWidget *Playback;
GtkWidget *Playback_menu;
GtkWidget *Order;
@@ -101,16 +102,16 @@ create_mainwin (void)
GtkWidget *Help;
GtkWidget *Help_menu;
GtkWidget *help1;
- GtkWidget *image561;
+ GtkWidget *image569;
GtkWidget *changelog1;
GtkWidget *separator10;
GtkWidget *gpl1;
GtkWidget *lgpl1;
GtkWidget *separator9;
GtkWidget *about1;
- GtkWidget *image562;
+ GtkWidget *image570;
GtkWidget *translators1;
- GtkWidget *image563;
+ GtkWidget *image571;
GtkWidget *hbox2;
GtkWidget *hbox3;
GtkWidget *stopbtn;
@@ -125,9 +126,6 @@ create_mainwin (void)
GtkWidget *image5;
GtkWidget *seekbar;
GtkWidget *volumebar;
- GtkWidget *tabstrip;
- GtkWidget *frame1;
- GtkWidget *playlist;
GtkWidget *plugins_bottom_vbox;
GtkWidget *statusbar;
GtkAccelGroup *accel_group;
@@ -161,9 +159,9 @@ create_mainwin (void)
GDK_O, (GdkModifierType) GDK_CONTROL_MASK,
GTK_ACCEL_VISIBLE);
- image555 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image555);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (open), image555);
+ image563 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image563);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (open), image563);
separator2 = gtk_separator_menu_item_new ();
gtk_widget_show (separator2);
@@ -174,17 +172,17 @@ create_mainwin (void)
gtk_widget_show (add_files);
gtk_container_add (GTK_CONTAINER (File_menu), add_files);
- image556 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image556);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (add_files), image556);
+ image564 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image564);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (add_files), image564);
add_folders = gtk_image_menu_item_new_with_mnemonic (_("Add folder(s)"));
gtk_widget_show (add_folders);
gtk_container_add (GTK_CONTAINER (File_menu), add_folders);
- image557 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image557);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (add_folders), image557);
+ image565 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image565);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (add_folders), image565);
add_location1 = gtk_menu_item_new_with_mnemonic (_("Add location"));
gtk_widget_show (add_location1);
@@ -222,9 +220,9 @@ create_mainwin (void)
GDK_Q, (GdkModifierType) GDK_CONTROL_MASK,
GTK_ACCEL_VISIBLE);
- image558 = gtk_image_new_from_stock ("gtk-quit", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image558);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (quit), image558);
+ image566 = gtk_image_new_from_stock ("gtk-quit", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image566);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (quit), image566);
Edit = gtk_menu_item_new_with_mnemonic (_("_Edit"));
gtk_widget_show (Edit);
@@ -237,9 +235,9 @@ create_mainwin (void)
gtk_widget_show (clear1);
gtk_container_add (GTK_CONTAINER (Edit_menu), clear1);
- image559 = gtk_image_new_from_stock ("gtk-clear", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image559);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (clear1), image559);
+ image567 = gtk_image_new_from_stock ("gtk-clear", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image567);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (clear1), image567);
select_all1 = gtk_menu_item_new_with_mnemonic (_("Select all"));
gtk_widget_show (select_all1);
@@ -270,9 +268,9 @@ create_mainwin (void)
gtk_widget_show (remove1);
gtk_container_add (GTK_CONTAINER (Selection_menu), remove1);
- image560 = gtk_image_new_from_stock ("gtk-remove", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image560);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (remove1), image560);
+ image568 = gtk_image_new_from_stock ("gtk-remove", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image568);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (remove1), image568);
crop1 = gtk_menu_item_new_with_mnemonic (_("Crop"));
gtk_widget_show (crop1);
@@ -348,6 +346,10 @@ create_mainwin (void)
gtk_widget_show (view_eq);
gtk_container_add (GTK_CONTAINER (View_menu), view_eq);
+ design_mode1 = gtk_check_menu_item_new_with_mnemonic (_("Design mode"));
+ gtk_widget_show (design_mode1);
+ gtk_container_add (GTK_CONTAINER (View_menu), design_mode1);
+
Playback = gtk_menu_item_new_with_mnemonic (_("_Playback"));
gtk_widget_show (Playback);
gtk_container_add (GTK_CONTAINER (menubar1), Playback);
@@ -366,16 +368,19 @@ create_mainwin (void)
order_linear_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (order_linear));
gtk_widget_show (order_linear);
gtk_container_add (GTK_CONTAINER (Order_menu), order_linear);
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (order_linear), TRUE);
order_shuffle = gtk_radio_menu_item_new_with_mnemonic (order_linear_group, _("Shuffle tracks"));
order_linear_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (order_shuffle));
gtk_widget_show (order_shuffle);
gtk_container_add (GTK_CONTAINER (Order_menu), order_shuffle);
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (order_shuffle), TRUE);
order_shuffle_albums = gtk_radio_menu_item_new_with_mnemonic (order_linear_group, _("Shuffle albums"));
order_linear_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (order_shuffle_albums));
gtk_widget_show (order_shuffle_albums);
gtk_container_add (GTK_CONTAINER (Order_menu), order_shuffle_albums);
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (order_shuffle_albums), TRUE);
order_random = gtk_radio_menu_item_new_with_mnemonic (order_linear_group, _("Random"));
order_linear_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (order_random));
@@ -394,11 +399,13 @@ create_mainwin (void)
loop_all_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (loop_all));
gtk_widget_show (loop_all);
gtk_container_add (GTK_CONTAINER (Looping_menu), loop_all);
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (loop_all), TRUE);
loop_single = gtk_radio_menu_item_new_with_mnemonic (loop_all_group, _("Loop Single Song"));
loop_all_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (loop_single));
gtk_widget_show (loop_single);
gtk_container_add (GTK_CONTAINER (Looping_menu), loop_single);
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (loop_single), TRUE);
loop_disable = gtk_radio_menu_item_new_with_mnemonic (loop_all_group, _("Don't Loop"));
loop_all_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (loop_disable));
@@ -445,9 +452,9 @@ create_mainwin (void)
gtk_widget_show (help1);
gtk_container_add (GTK_CONTAINER (Help_menu), help1);
- image561 = gtk_image_new_from_stock ("gtk-help", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image561);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (help1), image561);
+ image569 = gtk_image_new_from_stock ("gtk-help", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image569);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (help1), image569);
changelog1 = gtk_menu_item_new_with_mnemonic (_("_ChangeLog"));
gtk_widget_show (changelog1);
@@ -475,17 +482,17 @@ create_mainwin (void)
gtk_widget_show (about1);
gtk_container_add (GTK_CONTAINER (Help_menu), about1);
- image562 = gtk_image_new_from_stock ("gtk-about", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image562);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (about1), image562);
+ image570 = gtk_image_new_from_stock ("gtk-about", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image570);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (about1), image570);
translators1 = gtk_image_menu_item_new_with_mnemonic (_("_Translators"));
gtk_widget_show (translators1);
gtk_container_add (GTK_CONTAINER (Help_menu), translators1);
- image563 = gtk_image_new_from_stock ("gtk-about", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image563);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (translators1), image563);
+ image571 = gtk_image_new_from_stock ("gtk-about", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image571);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (translators1), image571);
hbox2 = gtk_hbox_new (FALSE, 0);
gtk_widget_show (hbox2);
@@ -580,27 +587,9 @@ create_mainwin (void)
GTK_WIDGET_UNSET_FLAGS (volumebar, GTK_CAN_FOCUS);
GTK_WIDGET_UNSET_FLAGS (volumebar, GTK_CAN_DEFAULT);
- tabstrip = create_tabstrip_widget ("tabstrip", "", "", 0, 0);
- gtk_widget_show (tabstrip);
- gtk_box_pack_start (GTK_BOX (vbox1), tabstrip, FALSE, TRUE, 0);
- gtk_widget_set_size_request (tabstrip, -1, 24);
- GTK_WIDGET_UNSET_FLAGS (tabstrip, GTK_CAN_FOCUS);
- GTK_WIDGET_UNSET_FLAGS (tabstrip, GTK_CAN_DEFAULT);
-
- frame1 = gtk_frame_new (NULL);
- gtk_widget_show (frame1);
- gtk_box_pack_start (GTK_BOX (vbox1), frame1, TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (frame1), 1);
-
- playlist = create_ddb_listview_widget ("playlist", "", "", 0, 0);
- gtk_widget_show (playlist);
- gtk_container_add (GTK_CONTAINER (frame1), playlist);
- GTK_WIDGET_UNSET_FLAGS (playlist, GTK_CAN_FOCUS);
- GTK_WIDGET_UNSET_FLAGS (playlist, GTK_CAN_DEFAULT);
-
plugins_bottom_vbox = gtk_vbox_new (FALSE, 0);
gtk_widget_show (plugins_bottom_vbox);
- gtk_box_pack_start (GTK_BOX (vbox1), plugins_bottom_vbox, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox1), plugins_bottom_vbox, TRUE, TRUE, 0);
statusbar = gtk_statusbar_new ();
gtk_widget_show (statusbar);
@@ -711,6 +700,9 @@ create_mainwin (void)
g_signal_connect ((gpointer) view_eq, "activate",
G_CALLBACK (on_toggle_eq),
NULL);
+ g_signal_connect ((gpointer) design_mode1, "activate",
+ G_CALLBACK (on_design_mode1_activate),
+ NULL);
g_signal_connect ((gpointer) order_linear, "activate",
G_CALLBACK (on_order_linear_activate),
NULL);
@@ -785,12 +777,12 @@ create_mainwin (void)
GLADE_HOOKUP_OBJECT (mainwin, File, "File");
GLADE_HOOKUP_OBJECT (mainwin, File_menu, "File_menu");
GLADE_HOOKUP_OBJECT (mainwin, open, "open");
- GLADE_HOOKUP_OBJECT (mainwin, image555, "image555");
+ GLADE_HOOKUP_OBJECT (mainwin, image563, "image563");
GLADE_HOOKUP_OBJECT (mainwin, separator2, "separator2");
GLADE_HOOKUP_OBJECT (mainwin, add_files, "add_files");
- GLADE_HOOKUP_OBJECT (mainwin, image556, "image556");
+ GLADE_HOOKUP_OBJECT (mainwin, image564, "image564");
GLADE_HOOKUP_OBJECT (mainwin, add_folders, "add_folders");
- GLADE_HOOKUP_OBJECT (mainwin, image557, "image557");
+ GLADE_HOOKUP_OBJECT (mainwin, image565, "image565");
GLADE_HOOKUP_OBJECT (mainwin, add_location1, "add_location1");
GLADE_HOOKUP_OBJECT (mainwin, separatormenuitem1, "separatormenuitem1");
GLADE_HOOKUP_OBJECT (mainwin, new_playlist1, "new_playlist1");
@@ -798,18 +790,18 @@ create_mainwin (void)
GLADE_HOOKUP_OBJECT (mainwin, playlist_save_as, "playlist_save_as");
GLADE_HOOKUP_OBJECT (mainwin, separator8, "separator8");
GLADE_HOOKUP_OBJECT (mainwin, quit, "quit");
- GLADE_HOOKUP_OBJECT (mainwin, image558, "image558");
+ GLADE_HOOKUP_OBJECT (mainwin, image566, "image566");
GLADE_HOOKUP_OBJECT (mainwin, Edit, "Edit");
GLADE_HOOKUP_OBJECT (mainwin, Edit_menu, "Edit_menu");
GLADE_HOOKUP_OBJECT (mainwin, clear1, "clear1");
- GLADE_HOOKUP_OBJECT (mainwin, image559, "image559");
+ GLADE_HOOKUP_OBJECT (mainwin, image567, "image567");
GLADE_HOOKUP_OBJECT (mainwin, select_all1, "select_all1");
GLADE_HOOKUP_OBJECT (mainwin, deselect_all1, "deselect_all1");
GLADE_HOOKUP_OBJECT (mainwin, invert_selection1, "invert_selection1");
GLADE_HOOKUP_OBJECT (mainwin, Selection, "Selection");
GLADE_HOOKUP_OBJECT (mainwin, Selection_menu, "Selection_menu");
GLADE_HOOKUP_OBJECT (mainwin, remove1, "remove1");
- GLADE_HOOKUP_OBJECT (mainwin, image560, "image560");
+ GLADE_HOOKUP_OBJECT (mainwin, image568, "image568");
GLADE_HOOKUP_OBJECT (mainwin, crop1, "crop1");
GLADE_HOOKUP_OBJECT (mainwin, find1, "find1");
GLADE_HOOKUP_OBJECT (mainwin, sort_by1, "sort_by1");
@@ -828,6 +820,7 @@ create_mainwin (void)
GLADE_HOOKUP_OBJECT (mainwin, view_headers, "view_headers");
GLADE_HOOKUP_OBJECT (mainwin, view_tabs, "view_tabs");
GLADE_HOOKUP_OBJECT (mainwin, view_eq, "view_eq");
+ GLADE_HOOKUP_OBJECT (mainwin, design_mode1, "design_mode1");
GLADE_HOOKUP_OBJECT (mainwin, Playback, "Playback");
GLADE_HOOKUP_OBJECT (mainwin, Playback_menu, "Playback_menu");
GLADE_HOOKUP_OBJECT (mainwin, Order, "Order");
@@ -849,16 +842,16 @@ create_mainwin (void)
GLADE_HOOKUP_OBJECT (mainwin, Help, "Help");
GLADE_HOOKUP_OBJECT (mainwin, Help_menu, "Help_menu");
GLADE_HOOKUP_OBJECT (mainwin, help1, "help1");
- GLADE_HOOKUP_OBJECT (mainwin, image561, "image561");
+ GLADE_HOOKUP_OBJECT (mainwin, image569, "image569");
GLADE_HOOKUP_OBJECT (mainwin, changelog1, "changelog1");
GLADE_HOOKUP_OBJECT (mainwin, separator10, "separator10");
GLADE_HOOKUP_OBJECT (mainwin, gpl1, "gpl1");
GLADE_HOOKUP_OBJECT (mainwin, lgpl1, "lgpl1");
GLADE_HOOKUP_OBJECT (mainwin, separator9, "separator9");
GLADE_HOOKUP_OBJECT (mainwin, about1, "about1");
- GLADE_HOOKUP_OBJECT (mainwin, image562, "image562");
+ GLADE_HOOKUP_OBJECT (mainwin, image570, "image570");
GLADE_HOOKUP_OBJECT (mainwin, translators1, "translators1");
- GLADE_HOOKUP_OBJECT (mainwin, image563, "image563");
+ GLADE_HOOKUP_OBJECT (mainwin, image571, "image571");
GLADE_HOOKUP_OBJECT (mainwin, hbox2, "hbox2");
GLADE_HOOKUP_OBJECT (mainwin, hbox3, "hbox3");
GLADE_HOOKUP_OBJECT (mainwin, stopbtn, "stopbtn");
@@ -873,9 +866,6 @@ create_mainwin (void)
GLADE_HOOKUP_OBJECT (mainwin, image5, "image5");
GLADE_HOOKUP_OBJECT (mainwin, seekbar, "seekbar");
GLADE_HOOKUP_OBJECT (mainwin, volumebar, "volumebar");
- GLADE_HOOKUP_OBJECT (mainwin, tabstrip, "tabstrip");
- GLADE_HOOKUP_OBJECT (mainwin, frame1, "frame1");
- GLADE_HOOKUP_OBJECT (mainwin, playlist, "playlist");
GLADE_HOOKUP_OBJECT (mainwin, plugins_bottom_vbox, "plugins_bottom_vbox");
GLADE_HOOKUP_OBJECT (mainwin, statusbar, "statusbar");
diff --git a/plugins/gtkui/mainplaylist.c b/plugins/gtkui/mainplaylist.c
index f04f9cb1..78db579f 100644
--- a/plugins/gtkui/mainplaylist.c
+++ b/plugins/gtkui/mainplaylist.c
@@ -347,9 +347,6 @@ main_playlist_free (void) {
void
main_refresh (void) {
- if (mainwin && gtk_widget_get_visible (mainwin)) {
- DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist"));
- ddb_listview_refresh (pl, DDB_REFRESH_VSCROLL | DDB_REFRESH_LIST);
- }
+ deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0);
}
diff --git a/plugins/gtkui/mainplaylist.h b/plugins/gtkui/mainplaylist.h
index b17ef63d..56a076c1 100644
--- a/plugins/gtkui/mainplaylist.h
+++ b/plugins/gtkui/mainplaylist.h
@@ -19,6 +19,8 @@
#ifndef __MAINPLAYLIST_H
#define __MAINPLAYLIST_H
+#include "ddblistview.h"
+
void
main_playlist_init (GtkWidget *widget);
@@ -31,4 +33,7 @@ main_refresh (void);
int
main_get_idx (DdbListviewIter it);
+void
+main_drag_n_drop (DdbListviewIter before, DdbPlaylistHandle from_playlist, uint32_t *indices, int length, int copy);
+
#endif
diff --git a/plugins/gtkui/prefwin.c b/plugins/gtkui/prefwin.c
index 4f6207f4..d2d09300 100644
--- a/plugins/gtkui/prefwin.c
+++ b/plugins/gtkui/prefwin.c
@@ -860,8 +860,9 @@ on_tabstrip_light_color_set (GtkColorButton *colorbutton,
deadbeef->conf_set_str ("gtkui.color.tabstrip_light", str);
deadbeef->sendmessage (DB_EV_CONFIGCHANGED, 0, 0, 0);
gtkui_init_theme_colors ();
- redraw_headers ();
- tabstrip_redraw ();
+// redraw_headers ();
+// tabstrip_redraw ();
+ gtk_widget_queue_draw (mainwin);
}
@@ -876,8 +877,9 @@ on_tabstrip_mid_color_set (GtkColorButton *colorbutton,
deadbeef->conf_set_str ("gtkui.color.tabstrip_mid", str);
deadbeef->sendmessage (DB_EV_CONFIGCHANGED, 0, 0, 0);
gtkui_init_theme_colors ();
- redraw_headers ();
- tabstrip_redraw ();
+// redraw_headers ();
+// tabstrip_redraw ();
+ gtk_widget_queue_draw (mainwin);
}
@@ -892,8 +894,9 @@ on_tabstrip_dark_color_set (GtkColorButton *colorbutton,
deadbeef->conf_set_str ("gtkui.color.tabstrip_dark", str);
deadbeef->sendmessage (DB_EV_CONFIGCHANGED, 0, 0, 0);
gtkui_init_theme_colors ();
- redraw_headers ();
- tabstrip_redraw ();
+// redraw_headers ();
+// tabstrip_redraw ();
+ gtk_widget_queue_draw (mainwin);
}
void
@@ -907,8 +910,9 @@ on_tabstrip_base_color_set (GtkColorButton *colorbutton,
deadbeef->conf_set_str ("gtkui.color.tabstrip_base", str);
deadbeef->sendmessage (DB_EV_CONFIGCHANGED, 0, 0, 0);
gtkui_init_theme_colors ();
- redraw_headers ();
- tabstrip_redraw ();
+// redraw_headers ();
+// tabstrip_redraw ();
+ gtk_widget_queue_draw (mainwin);
}
void
@@ -922,8 +926,9 @@ on_tabstrip_text_color_set (GtkColorButton *colorbutton,
deadbeef->conf_set_str ("gtkui.color.tabstrip_text", str);
deadbeef->sendmessage (DB_EV_CONFIGCHANGED, 0, 0, 0);
gtkui_init_theme_colors ();
- redraw_headers ();
- tabstrip_redraw ();
+// redraw_headers ();
+// tabstrip_redraw ();
+ gtk_widget_queue_draw (mainwin);
}
void
@@ -1084,8 +1089,9 @@ on_override_tabstrip_colors_toggled (GtkToggleButton *togglebutton,
deadbeef->sendmessage (DB_EV_CONFIGCHANGED, 0, 0, 0);
gtkui_init_theme_colors ();
prefwin_init_theme_colors ();
- redraw_headers ();
- tabstrip_redraw ();
+// redraw_headers ();
+// tabstrip_redraw ();
+ gtk_widget_queue_draw (mainwin);
}
void
diff --git a/plugins/gtkui/widgets.c b/plugins/gtkui/widgets.c
new file mode 100644
index 00000000..549ec9fe
--- /dev/null
+++ b/plugins/gtkui/widgets.c
@@ -0,0 +1,975 @@
+/*
+ DeaDBeeF - ultimate music player for GNU/Linux systems with X11
+ Copyright (C) 2009-2011 Alexey Yakovenko <waker@users.sourceforge.net>
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*/
+
+#include <stdlib.h>
+#include <string.h>
+#include "gtkui.h"
+#include "widgets.h"
+#include "ddbtabstrip.h"
+#include "ddblistview.h"
+#include "mainplaylist.h"
+#include "../../gettext.h"
+#include "parser.h"
+
+typedef struct w_creator_s {
+ const char *type;
+ const char *title; // set to NULL to avoid exposing this widget type to user
+ ddb_gtkui_widget_t *(*create_func) (void);
+ struct w_creator_s *next;
+} w_creator_t;
+
+static w_creator_t *w_creators;
+
+typedef struct {
+ ddb_gtkui_widget_t base;
+} w_splitter_t;
+
+typedef struct {
+ ddb_gtkui_widget_t base;
+} w_box_t;
+
+typedef struct {
+ ddb_gtkui_widget_t base;
+} w_tabstrip_t;
+
+typedef struct {
+ ddb_gtkui_widget_t base;
+ DdbTabStrip *tabstrip;
+ DdbListview *list;
+} w_tabbed_playlist_t;
+
+typedef struct {
+ ddb_gtkui_widget_t base;
+} w_playlist_t;
+
+typedef struct {
+ ddb_gtkui_widget_t base;
+} w_placeholder_t;
+
+typedef struct {
+ ddb_gtkui_widget_t base;
+} w_tabs_t;
+
+static int design_mode;
+static ddb_gtkui_widget_t *rootwidget;
+
+//// common functions
+
+void
+w_init (void) {
+ rootwidget = w_create ("box");
+}
+
+void
+w_free (void) {
+ w_creator_t *next = NULL;
+ for (w_creator_t *cr = w_creators; cr; cr = next) {
+ next = cr->next;
+ free (cr);
+ }
+ w_creators = NULL;
+}
+
+ddb_gtkui_widget_t *
+w_get_rootwidget (void) {
+ return rootwidget;
+}
+
+static void
+set_design_mode (ddb_gtkui_widget_t *w) {
+ for (ddb_gtkui_widget_t *c = w->children; c; c = c->next) {
+ set_design_mode (c);
+ }
+}
+
+void
+w_set_design_mode (int active) {
+ design_mode = active;
+ set_design_mode (rootwidget);
+}
+
+void
+w_append (ddb_gtkui_widget_t *cont, ddb_gtkui_widget_t *child) {
+ child->parent = cont;
+ if (!cont->children) {
+ cont->children = child;
+ }
+ else {
+ for (ddb_gtkui_widget_t *c = cont->children; c; c = c->next) {
+ if (!c->next) {
+ c->next = child;
+ break;
+ }
+ }
+ }
+
+ if (cont->append) {
+ cont->append (cont, child);
+ }
+}
+
+void
+w_remove (ddb_gtkui_widget_t *cont, ddb_gtkui_widget_t *child) {
+ if (cont->remove) {
+ cont->remove (cont, child);
+ }
+ child->widget = NULL;
+ ddb_gtkui_widget_t *prev = NULL;
+ for (ddb_gtkui_widget_t *c = cont->children; c; c = c->next) {
+ if (c == child) {
+ if (prev) {
+ prev->next = c->next;
+ }
+ else {
+ cont->children = c->next;
+ }
+ break;
+ }
+ prev = c;
+ }
+ child->parent = NULL;
+}
+
+void
+w_replace (ddb_gtkui_widget_t *w, ddb_gtkui_widget_t *from, ddb_gtkui_widget_t *to) {
+ if (w->replace) {
+ w->replace (w, from, to);
+ }
+ else {
+ w_remove (w, from);
+ w_destroy (from);
+ w_append (w, to);
+ }
+}
+
+const char *
+w_create_from_string (const char *s, ddb_gtkui_widget_t **parent) {
+ char t[MAX_TOKEN];
+ s = gettoken (s, t);
+ printf ("%s\n", t);
+ if (!s) {
+ return NULL;
+ }
+ ddb_gtkui_widget_t *w = w_create (t);
+ // nuke all default children
+ while (w->children) {
+ w_remove (w, w->children);
+ }
+
+ s = gettoken (s, t);
+ printf ("%s\n", t);
+ if (!s) {
+ w_destroy (w);
+ return NULL;
+ }
+ if (strcmp (t, "{")) {
+ w_destroy (w);
+ return NULL;
+ }
+
+ const char *back = s;
+ s = gettoken (s, t);
+ if (!s) {
+ w_destroy (w);
+ return NULL;
+ }
+ for (;;) {
+ printf ("internal: %s\n", t);
+ if (!strcmp (t, "}")) {
+ break;
+ }
+
+ s = w_create_from_string (back, &w);
+ if (!s) {
+ w_destroy (w);
+ return NULL;
+ }
+
+ back = s;
+ s = gettoken (s, t);
+ if (!s) {
+ w_destroy (w);
+ return NULL;
+ }
+ }
+
+ if (*parent) {
+ w_append (*parent, w);
+ }
+ else {
+ *parent = w;
+ }
+ return s;
+}
+
+static ddb_gtkui_widget_t *current_widget;
+static int hidden = 0;
+
+gboolean
+w_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data) {
+ if (hidden && user_data == current_widget) {
+ GdkColor clr = {
+ .red = 0x2d00,
+ .green = 0x0000,
+ .blue = 0xd600
+ };
+ GdkGC *gc = gdk_gc_new (widget->window);
+ gdk_gc_set_rgb_fg_color (gc, &clr);
+ if (GTK_WIDGET_NO_WINDOW (widget)) {
+ gdk_draw_rectangle (widget->window, gc, TRUE, widget->allocation.x, widget->allocation.y, widget->allocation.width, widget->allocation.height);
+ }
+ else {
+ gdk_draw_rectangle (widget->window, gc, TRUE, 0, 0, widget->allocation.width, widget->allocation.height);
+ }
+ g_object_unref (gc);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static char paste_buffer[1000];
+
+static void
+save_widget_to_string (char *str, ddb_gtkui_widget_t *w) {
+ strcat (str, w->type);
+ strcat (str, "{");
+ for (ddb_gtkui_widget_t *c = w->children; c; c = c->next) {
+ save_widget_to_string (str, c);
+ }
+ strcat (str, "} ");
+}
+
+void
+w_save (void) {
+ char buf[1000] = "";
+ save_widget_to_string (buf, rootwidget->children);
+ deadbeef->conf_set_str ("gtkui.layout", buf);
+ deadbeef->conf_save ();
+}
+
+static void
+on_replace_activate (GtkMenuItem *menuitem, gpointer user_data) {
+ for (w_creator_t *cr = w_creators; cr; cr = cr->next) {
+ if (cr->type == user_data) {
+ w_replace (current_widget->parent, current_widget, w_create (user_data));
+ }
+ }
+ w_save ();
+}
+
+static void
+on_delete_activate (GtkMenuItem *menuitem, gpointer user_data) {
+ ddb_gtkui_widget_t *parent = current_widget->parent;
+ if (!strcmp (current_widget->type, "placeholder")) {
+ return;
+ }
+ if (parent->replace) {
+ parent->replace (parent, current_widget, w_create ("placeholder"));
+ }
+ else {
+ w_remove (parent, current_widget);
+ w_destroy (current_widget);
+ current_widget = w_create ("placeholder");
+ w_append (parent, current_widget);
+ }
+ w_save ();
+}
+
+static void
+on_cut_activate (GtkMenuItem *menuitem, gpointer user_data) {
+ ddb_gtkui_widget_t *parent = current_widget->parent;
+ if (!strcmp (current_widget->type, "placeholder")) {
+ return;
+ }
+ // save hierarchy to string
+ // FIXME: use real clipboard
+ paste_buffer[0] = 0;
+ save_widget_to_string (paste_buffer, current_widget);
+
+ if (parent->replace) {
+ parent->replace (parent, current_widget, w_create ("placeholder"));
+ }
+ else {
+ w_remove (parent, current_widget);
+ w_destroy (current_widget);
+ current_widget = w_create ("placeholder");
+ w_append (parent, current_widget);
+ }
+ printf ("%s\n", paste_buffer);
+ w_save ();
+}
+
+static void
+on_copy_activate (GtkMenuItem *menuitem, gpointer user_data) {
+ ddb_gtkui_widget_t *parent = current_widget->parent;
+ if (!strcmp (current_widget->type, "placeholder")) {
+ return;
+ }
+ // save hierarchy to string
+ // FIXME: use real clipboard
+ paste_buffer[0] = 0;
+ save_widget_to_string (paste_buffer, current_widget);
+ printf ("%s\n", paste_buffer);
+}
+
+static void
+on_paste_activate (GtkMenuItem *menuitem, gpointer user_data) {
+ ddb_gtkui_widget_t *parent = current_widget->parent;
+ if (!paste_buffer[0]) {
+ return;
+ }
+ ddb_gtkui_widget_t *w = NULL;
+ w_create_from_string (paste_buffer, &w);
+ if (parent->replace) {
+ parent->replace (parent, current_widget, w);
+ }
+ else {
+ w_remove (parent, current_widget);
+ w_destroy (current_widget);
+ current_widget = w;
+ w_append (parent, current_widget);
+ }
+ w_save ();
+}
+
+void
+hide_widget (GtkWidget *widget, gpointer data) {
+ gtk_widget_hide (widget);
+}
+
+void
+show_widget (GtkWidget *widget, gpointer data) {
+ gtk_widget_show (widget);
+}
+
+void
+w_menu_deactivate (GtkMenuShell *menushell, gpointer user_data) {
+ hidden = 0;
+ ddb_gtkui_widget_t *w = user_data;
+ if (GTK_IS_CONTAINER (w->widget)) {
+ gtk_container_foreach (GTK_CONTAINER (w->widget), show_widget, NULL);
+ }
+ gtk_widget_queue_draw (w->widget);
+}
+
+gboolean
+w_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data) {
+ if (!design_mode || event->button != 3) {
+ return FALSE;
+ }
+ printf ("button_press on %s (%p)\n", G_OBJECT_TYPE_NAME (widget), widget);
+
+ current_widget = user_data;
+ hidden = 1;
+ if (GTK_IS_CONTAINER (widget)) {
+ gtk_container_foreach (GTK_CONTAINER (widget), hide_widget, NULL);
+ }
+ gtk_widget_queue_draw (((ddb_gtkui_widget_t *)user_data)->widget);
+ GtkWidget *menu;
+ GtkWidget *submenu;
+ GtkWidget *item;
+ menu = gtk_menu_new ();
+ if (strcmp (current_widget->type, "placeholder")) {
+ item = gtk_menu_item_new_with_mnemonic (_("Replace with..."));
+ gtk_widget_show (item);
+ gtk_container_add (GTK_CONTAINER (menu), item);
+ }
+ else {
+ item = gtk_menu_item_new_with_mnemonic (_("Insert..."));
+ gtk_widget_show (item);
+ gtk_container_add (GTK_CONTAINER (menu), item);
+ }
+
+ submenu = gtk_menu_new ();
+ gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), submenu);
+
+ for (w_creator_t *cr = w_creators; cr; cr = cr->next) {
+ if (cr->title) {
+ item = gtk_menu_item_new_with_mnemonic (cr->title);
+ gtk_widget_show (item);
+ gtk_container_add (GTK_CONTAINER (submenu), item);
+ g_signal_connect ((gpointer) item, "activate",
+ G_CALLBACK (on_replace_activate),
+ (void *)cr->type);
+ }
+ }
+
+ if (strcmp (current_widget->type, "placeholder")) {
+ item = gtk_menu_item_new_with_mnemonic (_("Delete"));
+ gtk_widget_show (item);
+ gtk_container_add (GTK_CONTAINER (menu), item);
+ g_signal_connect ((gpointer) item, "activate",
+ G_CALLBACK (on_delete_activate),
+ NULL);
+
+ item = gtk_menu_item_new_with_mnemonic (_("Cut"));
+ gtk_widget_show (item);
+ gtk_container_add (GTK_CONTAINER (menu), item);
+ g_signal_connect ((gpointer) item, "activate",
+ G_CALLBACK (on_cut_activate),
+ NULL);
+
+ item = gtk_menu_item_new_with_mnemonic (_("Copy"));
+ gtk_widget_show (item);
+ gtk_container_add (GTK_CONTAINER (menu), item);
+ g_signal_connect ((gpointer) item, "activate",
+ G_CALLBACK (on_copy_activate),
+ NULL);
+ }
+ item = gtk_menu_item_new_with_mnemonic ("Paste");
+ gtk_widget_show (item);
+ gtk_container_add (GTK_CONTAINER (menu), item);
+ g_signal_connect ((gpointer) item, "activate",
+ G_CALLBACK (on_paste_activate),
+ NULL);
+
+ g_signal_connect ((gpointer) menu, "deactivate", G_CALLBACK (w_menu_deactivate), user_data);
+ gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, widget, 0, gtk_get_current_event_time());
+ return TRUE;
+}
+
+static void
+w_override_signals (GtkWidget *widget, gpointer user_data) {
+ printf ("w_override_signals on %s (%p)\n", G_OBJECT_TYPE_NAME (widget), widget);
+ g_signal_connect ((gpointer) widget, "button_press_event", G_CALLBACK (w_button_press_event), user_data);
+ g_signal_connect ((gpointer) widget, "expose_event", G_CALLBACK (w_expose_event), user_data);
+ if (GTK_IS_CONTAINER (widget)) {
+ gtk_container_forall (GTK_CONTAINER (widget), w_override_signals, user_data);
+ }
+}
+
+void
+w_reg_widget (const char *type, const char *title, ddb_gtkui_widget_t *(*create_func) (void)) {
+ w_creator_t *c;
+ for (c = w_creators; c; c = c->next) {
+ if (!strcmp (c->type, type)) {
+ fprintf (stderr, "gtkui w_reg_widget: widget type %s already registered\n");
+ return;
+ }
+ }
+ c = malloc (sizeof (w_creator_t));
+ memset (c, 0, sizeof (w_creator_t));
+ c->type = type;
+ c->title = title;
+ c->create_func = create_func;
+ c->next = w_creators;
+ w_creators = c;
+}
+
+void
+w_unreg_widget (const char *type) {
+ w_creator_t *c, *prev = NULL;
+ for (c = w_creators; c; c = c->next) {
+ if (!strcmp (c->type, type)) {
+ if (prev) {
+ prev->next = c->next;
+ }
+ else {
+ w_creators = c->next;
+ }
+ free (c);
+ return;
+ }
+ prev = c;
+ }
+ fprintf (stderr, "gtkui w_unreg_widget: widget type %s is not registered\n");
+}
+
+ddb_gtkui_widget_t *
+w_create (const char *type) {
+ for (w_creator_t *c = w_creators; c; c = c->next) {
+ if (!strcmp (c->type, type)) {
+ ddb_gtkui_widget_t *w = c->create_func ();
+ w->type = c->type;
+
+ return w;
+ }
+ }
+ return NULL;
+}
+
+void
+w_destroy (ddb_gtkui_widget_t *w) {
+ if (w->destroy) {
+ w->destroy (w);
+ }
+ if (w->widget) {
+ gtk_widget_destroy (w->widget);
+ }
+ free (w);
+}
+
+///// gtk_container convenience functions
+void
+w_container_add (ddb_gtkui_widget_t *cont, ddb_gtkui_widget_t *child) {
+ printf ("append %s to %s\n", child->type, cont->type);
+ GtkWidget *container = NULL;
+ container = cont->widget;
+ gtk_container_add (GTK_CONTAINER (container), child->widget);
+ gtk_widget_show (child->widget);
+}
+
+void
+w_container_remove (ddb_gtkui_widget_t *cont, ddb_gtkui_widget_t *child) {
+ printf ("remove %s from %s\n", child->type, cont->type);
+ GtkWidget *container = NULL;
+ container = cont->widget;
+ gtk_container_remove (GTK_CONTAINER (container), child->widget);
+
+}
+
+////// placeholder widget
+
+gboolean
+w_placeholder_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data) {
+ cairo_t *cr = gdk_cairo_create (widget->window);
+ cairo_set_source_rgb (cr, 255, 0, 0);
+ cairo_surface_t *checker;
+ cairo_t *cr2;
+
+ checker = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 12, 12);
+ cr2 = cairo_create (checker);
+
+ cairo_set_source_rgb (cr2, 0.5, 0.5 ,0.5);
+ cairo_paint (cr2);
+ cairo_set_source_rgb (cr2, 0, 0, 0);
+ cairo_move_to (cr2, 0, 0);
+ cairo_line_to (cr2, 12, 12);
+ cairo_move_to (cr2, 1, 12);
+ cairo_line_to (cr2, 12, 1);
+ cairo_set_line_width (cr2, 1);
+ cairo_set_antialias (cr2, CAIRO_ANTIALIAS_NONE);
+ cairo_stroke (cr2);
+ cairo_fill (cr2);
+ cairo_destroy (cr2);
+
+ cairo_set_source_surface (cr, checker, 0, 0);
+ cairo_pattern_t *pt = cairo_get_source(cr);
+ cairo_pattern_set_extend (pt, CAIRO_EXTEND_REPEAT);
+ cairo_rectangle (cr, 0, 0, widget->allocation.width, widget->allocation.height);
+ cairo_paint (cr);
+ cairo_surface_destroy (checker);
+ cairo_destroy (cr);
+ return FALSE;
+}
+
+ddb_gtkui_widget_t *
+w_placeholder_create (void) {
+ w_placeholder_t *w = malloc (sizeof (w_placeholder_t));
+ memset (w, 0, sizeof (w_placeholder_t));
+ w->base.widget = gtk_drawing_area_new ();
+ gtk_widget_set_events (w->base.widget, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK);
+ g_signal_connect ((gpointer) w->base.widget, "expose_event", G_CALLBACK (w_expose_event), w);
+ g_signal_connect_after ((gpointer) w->base.widget, "expose_event", G_CALLBACK (w_placeholder_expose_event), w);
+ g_signal_connect ((gpointer) w->base.widget, "button_press_event", G_CALLBACK (w_button_press_event), w);
+ return (ddb_gtkui_widget_t*)w;
+}
+
+////// vsplitter widget
+void
+w_splitter_replace (ddb_gtkui_widget_t *cont, ddb_gtkui_widget_t *child, ddb_gtkui_widget_t *newchild) {
+ printf ("w_splitter_replace %p\n", child);
+ int ntab = 0;
+ ddb_gtkui_widget_t *prev = NULL;
+ for (ddb_gtkui_widget_t *c = cont->children; c; c = c->next, ntab++) {
+ if (c == child) {
+ printf ("removing child %d\n", ntab);
+ newchild->next = c->next;
+ if (prev) {
+ prev->next = newchild;
+ }
+ else {
+ cont->children = newchild;
+ }
+ newchild->parent = cont;
+ gtk_container_remove (GTK_CONTAINER(cont->widget), c->widget);
+ c->widget = NULL;
+ w_destroy (c);
+ gtk_widget_show (newchild->widget);
+ if (ntab == 0) {
+ gtk_paned_add1 (GTK_PANED (cont->widget), newchild->widget);
+ }
+ else {
+ gtk_paned_add2 (GTK_PANED (cont->widget), newchild->widget);
+ }
+ break;
+ }
+ prev = c;
+ }
+}
+
+ddb_gtkui_widget_t *
+w_vsplitter_create (void) {
+ w_splitter_t *w = malloc (sizeof (w_splitter_t));
+ memset (w, 0, sizeof (w_splitter_t));
+ w->base.widget = gtk_vpaned_new ();
+ w->base.append = w_container_add;
+ w->base.remove = w_container_remove;
+ w->base.replace = w_splitter_replace;
+
+ ddb_gtkui_widget_t *ph1, *ph2;
+ ph1 = w_create ("placeholder");
+ ph2 = w_create ("placeholder");
+ g_signal_connect ((gpointer) w->base.widget, "expose_event", G_CALLBACK (w_expose_event), w);
+ g_signal_connect ((gpointer) w->base.widget, "button_press_event", G_CALLBACK (w_button_press_event), w);
+
+ w_append ((ddb_gtkui_widget_t*)w, ph1);
+ w_append ((ddb_gtkui_widget_t*)w, ph2);
+
+ return (ddb_gtkui_widget_t*)w;
+}
+
+////// hsplitter widget
+
+ddb_gtkui_widget_t *
+w_hsplitter_create (void) {
+ w_splitter_t *w = malloc (sizeof (w_splitter_t));
+ memset (w, 0, sizeof (w_splitter_t));
+ w->base.widget = gtk_hpaned_new ();
+ w->base.append = w_container_add;
+ w->base.remove = w_container_remove;
+ w->base.replace = w_splitter_replace;
+
+ ddb_gtkui_widget_t *ph1, *ph2;
+ ph1 = w_create ("placeholder");
+ ph2 = w_create ("placeholder");
+ g_signal_connect ((gpointer) w->base.widget, "expose_event", G_CALLBACK (w_expose_event), w);
+ g_signal_connect ((gpointer) w->base.widget, "button_press_event", G_CALLBACK (w_button_press_event), w);
+
+ w_append ((ddb_gtkui_widget_t*)w, ph1);
+ w_append ((ddb_gtkui_widget_t*)w, ph2);
+
+ return (ddb_gtkui_widget_t*)w;
+}
+
+///// tabs widget
+
+void
+w_tabs_add (ddb_gtkui_widget_t *cont, ddb_gtkui_widget_t *child) {
+ GtkWidget *label = gtk_label_new (child->type);
+ gtk_widget_show (label);
+ gtk_widget_show (child->widget);
+ gtk_notebook_append_page (GTK_NOTEBOOK (cont->widget), child->widget, label);
+}
+
+void
+w_tabs_replace (ddb_gtkui_widget_t *cont, ddb_gtkui_widget_t *child, ddb_gtkui_widget_t *newchild) {
+ printf ("w_tabs_replace %p\n", child);
+ int ntab = 0;
+ ddb_gtkui_widget_t *prev = NULL;
+ for (ddb_gtkui_widget_t *c = cont->children; c; c = c->next, ntab++) {
+ if (c == child) {
+ printf ("removing tab %d\n", ntab);
+ newchild->next = c->next;
+ if (prev) {
+ prev->next = newchild;
+ }
+ else {
+ cont->children = newchild;
+ }
+ newchild->parent = cont;
+ w_destroy (c);
+ GtkWidget *label = gtk_label_new (newchild->type);
+ gtk_widget_show (label);
+ gtk_widget_show (newchild->widget);
+ int pos = gtk_notebook_insert_page (GTK_NOTEBOOK (cont->widget), newchild->widget, label, ntab);
+ gtk_notebook_set_page (GTK_NOTEBOOK (cont->widget), pos);
+ break;
+ }
+ }
+}
+
+ddb_gtkui_widget_t *
+w_tabs_create (void) {
+ w_tabs_t *w = malloc (sizeof (w_tabs_t));
+ memset (w, 0, sizeof (w_tabs_t));
+ w->base.widget = gtk_notebook_new ();
+ w->base.append = w_tabs_add;
+ w->base.remove = w_container_remove;
+ w->base.replace = w_tabs_replace;
+
+ ddb_gtkui_widget_t *ph1, *ph2, *ph3;
+ ph1 = w_create ("placeholder");
+ ph2 = w_create ("placeholder");
+ ph3 = w_create ("placeholder");
+
+ g_signal_connect ((gpointer) w->base.widget, "expose_event", G_CALLBACK (w_expose_event), w);
+ g_signal_connect ((gpointer) w->base.widget, "button_press_event", G_CALLBACK (w_button_press_event), w);
+
+ w_append ((ddb_gtkui_widget_t*)w, ph1);
+ w_append ((ddb_gtkui_widget_t*)w, ph2);
+ w_append ((ddb_gtkui_widget_t*)w, ph3);
+
+ return (ddb_gtkui_widget_t*)w;
+}
+
+//// box widget
+//// this widget should not be exposed to user, it is used as a top level
+//// container (rootwidget)
+
+ddb_gtkui_widget_t *
+w_box_create (void) {
+ w_box_t *w = malloc (sizeof (w_box_t));
+ memset (w, 0, sizeof (w_box_t));
+ w->base.widget = gtk_vbox_new (FALSE, 0);
+ w->base.append = w_container_add;
+ w->base.remove = w_container_remove;
+
+ return (ddb_gtkui_widget_t*)w;
+}
+
+//// tabstrip widget
+
+ddb_gtkui_widget_t *
+w_tabstrip_create (void) {
+ w_tabstrip_t *w = malloc (sizeof (w_tabstrip_t));
+ memset (w, 0, sizeof (w_tabstrip_t));
+ w->base.widget = ddb_tabstrip_new ();
+ w_override_signals (w->base.widget, w);
+ return (ddb_gtkui_widget_t*)w;
+}
+
+//// tabbed playlist widget
+
+typedef struct {
+ ddb_gtkui_widget_t *w;
+ DB_playItem_t *trk;
+} w_trackdata_t;
+
+static gboolean
+trackinfochanged_cb (gpointer p) {
+ w_trackdata_t *d = p;
+ w_tabbed_playlist_t *tp = (w_tabbed_playlist_t *)d->w;
+ ddb_playlist_t *plt = deadbeef->plt_get_curr ();
+ if (plt) {
+ int idx = deadbeef->plt_get_item_idx (plt, (DB_playItem_t *)d->trk, PL_MAIN);
+ if (idx != -1) {
+ ddb_listview_draw_row (tp->list, idx, (DdbListviewIter)d->trk);
+ }
+ deadbeef->plt_unref (plt);
+ }
+ deadbeef->pl_item_unref (d->trk);
+ free (d);
+ return FALSE;
+}
+
+static gboolean
+paused_cb (gpointer p) {
+ w_tabbed_playlist_t *tp = (w_tabbed_playlist_t *)p;
+ DB_playItem_t *curr = deadbeef->streamer_get_playing_track ();
+ if (curr) {
+ int idx = deadbeef->pl_get_idx_of (curr);
+ ddb_listview_draw_row (tp->list, idx, (DdbListviewIter)curr);
+ deadbeef->pl_item_unref (curr);
+ }
+ return FALSE;
+}
+
+static gboolean
+refresh_cb (gpointer p) {
+ w_tabbed_playlist_t *tp = (w_tabbed_playlist_t *)p;
+ ddb_listview_clear_sort (tp->list);
+ ddb_listview_refresh (tp->list, DDB_REFRESH_LIST | DDB_REFRESH_VSCROLL);
+ return FALSE;
+}
+
+
+static gboolean
+playlistswitch_cb (gpointer p) {
+ w_tabbed_playlist_t *tp = (w_tabbed_playlist_t *)p;
+ int curr = deadbeef->plt_get_curr_idx ();
+ char conf[100];
+ snprintf (conf, sizeof (conf), "playlist.scroll.%d", curr);
+ int scroll = deadbeef->conf_get_int (conf, 0);
+ snprintf (conf, sizeof (conf), "playlist.cursor.%d", curr);
+ int cursor = deadbeef->conf_get_int (conf, -1);
+ ddb_tabstrip_refresh (tp->tabstrip);
+ deadbeef->pl_set_cursor (PL_MAIN, cursor);
+ if (cursor != -1) {
+ DB_playItem_t *it = deadbeef->pl_get_for_idx_and_iter (cursor, PL_MAIN);
+ if (it) {
+ deadbeef->pl_set_selected (it, 1);
+ deadbeef->pl_item_unref (it);
+ }
+ }
+
+ ddb_listview_refresh (tp->list, DDB_LIST_CHANGED | DDB_REFRESH_LIST | DDB_REFRESH_VSCROLL);
+ ddb_listview_set_vscroll (tp->list, scroll);
+ return FALSE;
+}
+
+struct fromto_t {
+ ddb_gtkui_widget_t *w;
+ DB_playItem_t *from;
+ DB_playItem_t *to;
+};
+
+static gboolean
+songchanged_cb (gpointer p) {
+ struct fromto_t *ft = p;
+ DB_playItem_t *from = ft->from;
+ DB_playItem_t *to = ft->to;
+ w_tabbed_playlist_t *tp = (w_tabbed_playlist_t *)ft->w;
+ int to_idx = -1;
+ if (!ddb_listview_is_scrolling (tp->list) && to) {
+ int cursor_follows_playback = deadbeef->conf_get_int ("playlist.scroll.cursorfollowplayback", 0);
+ int scroll_follows_playback = deadbeef->conf_get_int ("playlist.scroll.followplayback", 0);
+ int plt = deadbeef->streamer_get_current_playlist ();
+ if (plt != -1) {
+ if (cursor_follows_playback && plt != deadbeef->plt_get_curr_idx ()) {
+ deadbeef->plt_set_curr_idx (plt);
+ }
+ to_idx = deadbeef->pl_get_idx_of (to);
+ if (to_idx != -1) {
+ if (cursor_follows_playback) {
+ ddb_listview_set_cursor_noscroll (tp->list, to_idx);
+ }
+ if (scroll_follows_playback && plt == deadbeef->plt_get_curr_idx ()) {
+ ddb_listview_scroll_to (tp->list, to_idx);
+ }
+ }
+ }
+ }
+
+ if (from) {
+ int idx = deadbeef->pl_get_idx_of (from);
+ if (idx != -1) {
+ ddb_listview_draw_row (tp->list, idx, from);
+ }
+ }
+ if (to && to_idx != -1) {
+ ddb_listview_draw_row (tp->list, to_idx, to);
+ }
+ if (ft->from) {
+ deadbeef->pl_item_unref (ft->from);
+ }
+ if (ft->to) {
+ deadbeef->pl_item_unref (ft->to);
+ }
+ free (ft);
+ return FALSE;
+}
+
+static int
+w_tabbed_playlist_message (ddb_gtkui_widget_t *w, uint32_t id, uintptr_t ctx, uint32_t p1, uint32_t p2) {
+ w_tabbed_playlist_t *tp = (w_tabbed_playlist_t *)w;
+ switch (id) {
+ case DB_EV_SONGCHANGED:
+ g_idle_add (redraw_queued_tracks_cb, tp->list);
+ ddb_event_trackchange_t *ev = (ddb_event_trackchange_t *)ctx;
+ struct fromto_t *ft = malloc (sizeof (struct fromto_t));
+ ft->from = ev->from;
+ ft->to = ev->to;
+ if (ft->from) {
+ deadbeef->pl_item_ref (ft->from);
+ }
+ if (ft->to) {
+ deadbeef->pl_item_ref (ft->to);
+ }
+ ft->w = w;
+ g_idle_add (songchanged_cb, ft);
+ break;
+ case DB_EV_TRACKINFOCHANGED:
+ {
+ ddb_event_track_t *ev = (ddb_event_track_t *)ctx;
+ if (ev->track) {
+ deadbeef->pl_item_ref (ev->track);
+ }
+ w_trackdata_t *d = malloc (sizeof (w_trackdata_t));
+ memset (d, 0, sizeof (w_trackdata_t));
+ d->w = w;
+ d->trk = ev->track;
+ g_idle_add (trackinfochanged_cb, d);
+ }
+ break;
+ case DB_EV_PAUSED:
+ g_idle_add (paused_cb, w);
+ break;
+ case DB_EV_PLAYLISTCHANGED:
+ g_idle_add (refresh_cb, w);
+ break;
+ case DB_EV_PLAYLISTSWITCHED:
+ g_idle_add (playlistswitch_cb, w);
+ break;
+ }
+ return 0;
+}
+
+ddb_gtkui_widget_t *
+w_tabbed_playlist_create (void) {
+ w_tabbed_playlist_t *w = malloc (sizeof (w_tabbed_playlist_t));
+ memset (w, 0, sizeof (w_tabbed_playlist_t));
+
+ GtkWidget *vbox = gtk_vbox_new (FALSE, 0);
+ w->base.widget = vbox;
+ gtk_widget_show (vbox);
+
+ GtkWidget *tabstrip = ddb_tabstrip_new ();
+ w->tabstrip = (DdbTabStrip *)tabstrip;
+ gtk_widget_show (tabstrip);
+ GtkWidget *list = ddb_listview_new ();
+ w->list = (DdbListview *)list;
+ gtk_widget_show (list);
+ GtkWidget *frame = gtk_frame_new (NULL);
+ gtk_widget_show (frame);
+
+ gtk_box_pack_start (GTK_BOX (vbox), tabstrip, FALSE, TRUE, 0);
+ gtk_widget_set_size_request (tabstrip, -1, 24);
+ GTK_WIDGET_UNSET_FLAGS (tabstrip, GTK_CAN_FOCUS);
+ GTK_WIDGET_UNSET_FLAGS (tabstrip, GTK_CAN_DEFAULT);
+
+ gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0);
+ gtk_container_set_border_width (GTK_CONTAINER (frame), 1);
+
+ gtk_container_add (GTK_CONTAINER (frame), list);
+ main_playlist_init (list);
+ if (deadbeef->conf_get_int ("gtkui.headers.visible", 1)) {
+ ddb_listview_show_header (w->list, 1);
+ }
+ else {
+ ddb_listview_show_header (w->list, 0);
+ }
+
+ gtk_container_forall (GTK_CONTAINER (w->base.widget), w_override_signals, w);
+
+ w->base.message = w_tabbed_playlist_message;
+ return (ddb_gtkui_widget_t*)w;
+}
+
+///// playlist widget
+
+ddb_gtkui_widget_t *
+w_playlist_create (void) {
+ w_playlist_t *w = malloc (sizeof (w_playlist_t));
+ memset (w, 0, sizeof (w_playlist_t));
+ w->base.widget = ddb_listview_new ();
+ main_playlist_init (w->base.widget);
+ if (deadbeef->conf_get_int ("gtkui.headers.visible", 1)) {
+ ddb_listview_show_header (DDB_LISTVIEW (w->base.widget), 1);
+ }
+ else {
+ ddb_listview_show_header (DDB_LISTVIEW (w->base.widget), 0);
+ }
+
+ w_override_signals (w->base.widget, w);
+
+ w->base.message = w_tabbed_playlist_message;
+ return (ddb_gtkui_widget_t*)w;
+}
diff --git a/plugins/gtkui/widgets.h b/plugins/gtkui/widgets.h
new file mode 100644
index 00000000..0d7eb21a
--- /dev/null
+++ b/plugins/gtkui/widgets.h
@@ -0,0 +1,81 @@
+/*
+ DeaDBeeF - ultimate music player for GNU/Linux systems with X11
+ Copyright (C) 2009-2011 Alexey Yakovenko <waker@users.sourceforge.net>
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*/
+#ifndef __WIDGETS_H
+#define __WIDGETS_H
+
+#include "gtkui_api.h"
+
+void
+w_init (void);
+
+void
+w_free (void);
+
+ddb_gtkui_widget_t *
+w_get_rootwidget (void);
+
+void
+w_set_design_mode (int active);
+
+void
+w_reg_widget (const char *type, const char *title, ddb_gtkui_widget_t *(*create_func) (void));
+
+void
+w_unreg_widget (const char *type);
+
+ddb_gtkui_widget_t *
+w_create (const char *type);
+
+void
+w_destroy (ddb_gtkui_widget_t *w);
+
+void
+w_append (ddb_gtkui_widget_t *cont, ddb_gtkui_widget_t *child);
+
+void
+w_remove (ddb_gtkui_widget_t *cont, ddb_gtkui_widget_t *child);
+
+ddb_gtkui_widget_t *
+w_hsplitter_create (void);
+
+ddb_gtkui_widget_t *
+w_vsplitter_create (void);
+
+ddb_gtkui_widget_t *
+w_box_create (void);
+
+ddb_gtkui_widget_t *
+w_tabstrip_create (void);
+
+ddb_gtkui_widget_t *
+w_tabbed_playlist_create (void);
+
+ddb_gtkui_widget_t *
+w_playlist_create (void);
+
+ddb_gtkui_widget_t *
+w_placeholder_create (void);
+
+ddb_gtkui_widget_t *
+w_tabs_create (void);
+
+const char *
+w_create_from_string (const char *s, ddb_gtkui_widget_t **parent);
+
+#endif
diff --git a/plugins/hotkeys/hotkeys.c b/plugins/hotkeys/hotkeys.c
index ded777de..e1357df8 100644
--- a/plugins/hotkeys/hotkeys.c
+++ b/plugins/hotkeys/hotkeys.c
@@ -621,7 +621,7 @@ static DB_hotkeys_plugin_t plugin = {
.misc.plugin.type = DB_PLUGIN_MISC,
.misc.plugin.id = "hotkeys",
.misc.plugin.name = "Global hotkeys support",
- .misc.plugin.descr = "Allows to control player with global hotkeys",
+ .misc.plugin.descr = "Allows one to control player with global hotkeys",
.misc.plugin.copyright =
"Copyright (C) 2009-2011 Alexey Yakovenko <waker@users.sourceforge.net>\n"
"Copyright (C) 2009-2011 Viktor Semykin <thesame.ml@gmail.com>\n"
diff --git a/plugins/mms/libmms/bswap.h b/plugins/mms/libmms/bswap.h
index 6a6e1d10..7fe6db62 100644
--- a/plugins/mms/libmms/bswap.h
+++ b/plugins/mms/libmms/bswap.h
@@ -271,6 +271,17 @@
#define GINT16_TO_LE(val) (val)
#endif
+/* If this is not defined, we are on Solaris */
+#ifndef u_int16_t
+#define u_int16_t uint16_t
+#endif
+#ifndef u_int32_t
+#define u_int32_t uint32_t
+#endif
+#ifndef u_int64_t
+#define u_int64_t uint64_t
+#endif
+
#define LE_16(val) (GINT16_FROM_LE (*((u_int16_t*)(val))))
#define BE_16(val) (GINT16_FROM_BE (*((u_int16_t*)(val))))
#define LE_32(val) (GINT32_FROM_LE (*((u_int32_t*)(val))))
diff --git a/plugins/mono2stereo/Makefile b/plugins/mono2stereo/Makefile
index 067f074d..0dceaa3a 100644
--- a/plugins/mono2stereo/Makefile
+++ b/plugins/mono2stereo/Makefile
@@ -1,4 +1,4 @@
-CC=gcc
+CC?=gcc
CFLAGS+=-Wall -fPIC -D_GNU_SOURCE -std=c99
@@ -8,7 +8,7 @@ SOURCES=mono2stereo.c
OBJECTS=$(SOURCES:.c=.o)
-OUT=mono2stereo.so
+OUT?=ddb_mono2stereo.so
all: $(SOURCES) $(OUT)
diff --git a/plugins/mono2stereo/mono2stereo.c b/plugins/mono2stereo/mono2stereo.c
index f10a9375..23d0b0d5 100644
--- a/plugins/mono2stereo/mono2stereo.c
+++ b/plugins/mono2stereo/mono2stereo.c
@@ -160,6 +160,7 @@ static DB_dsp_t plugin = {
"along with this program; if not, write to the Free Software\n"
"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n"
,
+ .plugin.website = "http://deadbeef.sf.net",
.num_params = m2s_num_params,
.get_param_name = m2s_get_param_name,
.set_param = m2s_set_param,
@@ -169,7 +170,7 @@ static DB_dsp_t plugin = {
};
DB_plugin_t *
-mono2stereo_load (DB_functions_t *f) {
+ddb_mono2stereo_load (DB_functions_t *f) {
deadbeef = f;
return &plugin.plugin;
}
diff --git a/plugins/musepack/musepack.c b/plugins/musepack/musepack.c
index e00f3d18..8144ac52 100644
--- a/plugins/musepack/musepack.c
+++ b/plugins/musepack/musepack.c
@@ -120,7 +120,8 @@ musepack_init (DB_fileinfo_t *_info, DB_playItem_t *it) {
_info->fmt.bps = 32;
_info->fmt.channels = info->si.channels;
_info->fmt.samplerate = info->si.sample_freq;
- for (int i = 0; i < _info->fmt.channels; i++) {
+ int i;
+ for (i = 0; i < _info->fmt.channels; i++) {
_info->fmt.channelmask |= 1 << i;
}
_info->readpos = 0;
diff --git a/plugins/shellexec/shellexec.c b/plugins/shellexec/shellexec.c
index 8ecf223e..76d31e34 100644
--- a/plugins/shellexec/shellexec.c
+++ b/plugins/shellexec/shellexec.c
@@ -37,7 +37,9 @@
remote - command allowed only for non-local files
disabled - ignore command
*/
-
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
diff --git a/plugins/shn/Makefile b/plugins/shn/Makefile
index 7ce0e430..d76c8427 100644
--- a/plugins/shn/Makefile
+++ b/plugins/shn/Makefile
@@ -1,8 +1,9 @@
-OUT=shn.so
+OUT=ddb_shn.so
-CC=gcc
+CC?=gcc
-CFLAGS+=-Wall -fPIC -std=c99 -D_GNU_SOURCE -DHAVE_CONFIG_H -I. -I../..
+CFLAGS?=-I../..
+CFLAGS+=-Wall -fPIC -std=c99 -D_GNU_SOURCE -DHAVE_CONFIG_H -I.
LDFLAGS+=-module -shared -lm
diff --git a/plugins/shn/shn.c b/plugins/shn/shn.c
index 881cf3b7..504f283c 100644
--- a/plugins/shn/shn.c
+++ b/plugins/shn/shn.c
@@ -23,7 +23,7 @@
#include <stdlib.h>
#include <math.h>
#include "shorten.h"
-#include "../../deadbeef.h"
+#include <deadbeef/deadbeef.h>
#include "bitshift.h"
//#define trace(...) { fprintf(stderr, __VA_ARGS__); }
@@ -1836,7 +1836,7 @@ static DB_decoder_t plugin = {
};
DB_plugin_t *
-shn_load (DB_functions_t *api) {
+ddb_shn_load (DB_functions_t *api) {
deadbeef = api;
return DB_PLUGIN (&plugin);
}
diff --git a/plugins/shn/shn.h b/plugins/shn/shn.h
index 518334bc..e7d3bba8 100644
--- a/plugins/shn/shn.h
+++ b/plugins/shn/shn.h
@@ -28,7 +28,7 @@
#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
-#include "../../deadbeef.h"
+#include <deadbeef/deadbeef.h>
extern DB_functions_t *deadbeef;
diff --git a/plugins/sid/csid.cpp b/plugins/sid/csid.cpp
index b82491e7..24e812ff 100644
--- a/plugins/sid/csid.cpp
+++ b/plugins/sid/csid.cpp
@@ -22,10 +22,6 @@
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
-#if HAVE_ICONV
-#define LIBICONV_PLUG
-#include <iconv.h>
-#endif
#include "sidplay/sidplay2.h"
#include "sidplay/builders/resid.h"
//#include "md5.h"
@@ -414,33 +410,17 @@ csid_seek (DB_fileinfo_t *_info, float time) {
}
static const char *
-convstr (const char* str) {
-#ifdef HAVE_ICONV
- int sz = strlen (str);
- static char out[2048]; // FIXME: this is not thread-safe
- const char *enc = "iso8859-1";
- iconv_t cd = iconv_open ("utf-8", enc);
- if (cd == (iconv_t)-1) {
- trace ("can't convert from %s to utf8\n", enc);
- return NULL;
+convstr (const char* str, int sz, char *out, int out_sz) {
+ const char *cs = deadbeef->junk_detect_charset (str);
+ if (!cs) {
+ return str;
}
else {
- size_t inbytesleft = sz;
- size_t outbytesleft = 2047;
-#ifdef __linux__
- char *pin = (char*)str;
-#else
- const char *pin = str;
-#endif
- char *pout = out;
- memset (out, 0, sizeof (out));
- size_t res = iconv (cd, &pin, &inbytesleft, &pout, &outbytesleft);
- iconv_close (cd);
+ if (deadbeef->junk_iconv (str, sz, out, out_sz, cs, "utf-8") >= 0) {
+ return out;
+ }
}
- return out;
-#else
- return str;
-#endif
+ return NULL;
}
extern "C" DB_playItem_t *
@@ -522,6 +502,7 @@ csid_insert (ddb_playlist_t *plt, DB_playItem_t *after, const char *fname) {
int i = sidinfo.numberOfInfoStrings;
int title_added = 0;
trace ("set %d metainfo...\n", s);
+ char temp[2048];
if (i >= 1 && sidinfo.infoString[0] && sidinfo.infoString[0][0]) {
const char *meta;
if (sidinfo.songs > 1) {
@@ -531,19 +512,19 @@ csid_insert (ddb_playlist_t *plt, DB_playItem_t *after, const char *fname) {
meta = "title";
title_added = 1;
}
- deadbeef->pl_add_meta (it, meta, convstr (sidinfo.infoString[0]));
+ deadbeef->pl_add_meta (it, meta, convstr (sidinfo.infoString[0], strlen (sidinfo.infoString[0]), temp, sizeof (temp)));
}
if (i >= 2 && sidinfo.infoString[1] && sidinfo.infoString[1][0]) {
- deadbeef->pl_add_meta (it, "artist", convstr (sidinfo.infoString[1]));
+ deadbeef->pl_add_meta (it, "artist", convstr (sidinfo.infoString[1], strlen (sidinfo.infoString[1]), temp, sizeof (temp)));
}
if (i >= 3 && sidinfo.infoString[2] && sidinfo.infoString[2][0]) {
- deadbeef->pl_add_meta (it, "copyright", convstr (sidinfo.infoString[2]));
+ deadbeef->pl_add_meta (it, "copyright", convstr (sidinfo.infoString[2], strlen (sidinfo.infoString[2]), temp, sizeof (temp)));
}
for (int j = 3; j < i; j++)
{
if (sidinfo.infoString[j] && sidinfo.infoString[j][0]) {
- deadbeef->pl_add_meta (it, "info", convstr (sidinfo.infoString[j]));
+ deadbeef->pl_add_meta (it, "info", convstr (sidinfo.infoString[j], strlen (sidinfo.infoString[j]), temp, sizeof (temp)));
}
}
char trk[10];
diff --git a/plugins/sndfile/sndfile.c b/plugins/sndfile/sndfile.c
index 269cdd51..eae39b86 100644
--- a/plugins/sndfile/sndfile.c
+++ b/plugins/sndfile/sndfile.c
@@ -16,6 +16,9 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
#ifndef __linux__
#define _LARGEFILE64_SOURCE
#endif
@@ -308,6 +311,7 @@ sndfile_seek (DB_fileinfo_t *_info, float sec) {
static DB_playItem_t *
sndfile_insert (ddb_playlist_t *plt, DB_playItem_t *after, const char *fname) {
+ trace ("adding file %s\n", fname);
SF_INFO inf;
sndfile_info_t info;
memset (&info, 0, sizeof (info));
@@ -317,12 +321,15 @@ sndfile_insert (ddb_playlist_t *plt, DB_playItem_t *after, const char *fname) {
return NULL;
}
int64_t fsize = deadbeef->fgetlength (info.file);
+ trace ("file: %p, size: %lld\n", info.file, deadbeef->fgetlength (info.file));
+ trace ("calling sf_open_virtual\n");
info.ctx = sf_open_virtual (&vfs, SFM_READ, &inf, &info);
if (!info.ctx) {
trace ("sndfile: sf_open failed");
deadbeef->fclose (info.file);
return NULL;
}
+ trace ("calling sf_open_virtual ok\n");
int totalsamples = inf.frames;
int samplerate = inf.samplerate;
sf_close (info.ctx);
diff --git a/plugins/vfs_curl/vfs_curl.c b/plugins/vfs_curl/vfs_curl.c
index 805f04f1..8a069300 100644
--- a/plugins/vfs_curl/vfs_curl.c
+++ b/plugins/vfs_curl/vfs_curl.c
@@ -611,7 +611,7 @@ http_thread_func (void *ctx) {
if (*proxyuser || *proxypass) {
#if LIBCURL_VERSION_MINOR >= 19 && LIBCURL_VERSION_PATCH >= 1
curl_easy_setopt (curl, CURLOPT_PROXYUSERNAME, proxyuser);
- curl_easy_setopt (curl, CURLOPT_PROXYUSERNAME, proxypass);
+ curl_easy_setopt (curl, CURLOPT_PROXYPASSWORD, proxypass);
#else
char pwd[200];
snprintf (pwd, sizeof (pwd), "%s:%s", proxyuser, proxypass);
@@ -784,7 +784,7 @@ http_read (void *ptr, size_t size, size_t nmemb, DB_FILE *stream) {
}
// trace ("buffer remaining: %d\n", fp->remaining);
deadbeef->mutex_lock (fp->mutex);
- trace ("http_read %lld/%lld/%d\n", fp->pos, fp->length, fp->remaining);
+ //trace ("http_read %lld/%lld/%d\n", fp->pos, fp->length, fp->remaining);
int cp = min (sz, fp->remaining);
int readpos = fp->pos & BUFFER_MASK;
int part1 = BUFFER_SIZE-readpos;
@@ -813,7 +813,7 @@ http_read (void *ptr, size_t size, size_t nmemb, DB_FILE *stream) {
static int
http_seek (DB_FILE *stream, int64_t offset, int whence) {
- trace ("http_seek %lld %d\n", offset, whence);
+ //trace ("http_seek %lld %d\n", offset, whence);
assert (stream);
HTTP_FILE *fp = (HTTP_FILE *)stream;
fp->seektoend = 0;
diff --git a/plugins/vorbis/vorbis.c b/plugins/vorbis/vorbis.c
index c85a0c63..f12123ee 100644
--- a/plugins/vorbis/vorbis.c
+++ b/plugins/vorbis/vorbis.c
@@ -15,6 +15,9 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
#include <vorbis/codec.h>
#include <vorbis/vorbisfile.h>
#include <string.h>
@@ -23,9 +26,6 @@
#include <limits.h>
#include <unistd.h>
#include <math.h>
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
#include "../../deadbeef.h"
#include "vcedit.h"
diff --git a/plugins/wildmidi/src/wildmidi_lib.c b/plugins/wildmidi/src/wildmidi_lib.c
index 97912c50..66a2ca4a 100644
--- a/plugins/wildmidi/src/wildmidi_lib.c
+++ b/plugins/wildmidi/src/wildmidi_lib.c
@@ -137,7 +137,9 @@
========================================
*/
-
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
@@ -155,7 +157,6 @@
#ifdef _WIN32
# include <windows.h>
#endif
-#include "config.h"
#include "wildmidi_lib.h"
/*
diff --git a/po/nl.po b/po/nl.po
index a03825ec..4bf53f4f 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -8,19 +8,19 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-11-09 04:43+0000\n"
-"PO-Revision-Date: 2010-08-30 11:05+0200\n"
-"Last-Translator: Sander <celettu@gmail.com>\n"
+"PO-Revision-Date: 2011-06-02 23:20+0200\n"
+"Last-Translator: Pjotr <>\n"
"Language-Team: Spanish\n"
+"Language: nl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: nl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.0.5\n"
#: ../plugins/gtkui/callbacks.c:97
msgid "Supported sound formats"
-msgstr "Ondersteunde geluidsformaten"
+msgstr "Ondersteunde soorten bestandsopmaak voor geluid"
#: ../plugins/gtkui/callbacks.c:108
msgid "Other files (*)"
@@ -32,32 +32,32 @@ msgstr "Open bestand(en)..."
#: ../plugins/gtkui/callbacks.c:151
msgid "Add file(s) to playlist..."
-msgstr "Voeg bestand(en) toe aan de afspeellijst..."
+msgstr "Voeg bestand(en) toe aan speellijst..."
#: ../plugins/gtkui/callbacks.c:190
msgid "Add folder(s) to playlist..."
-msgstr "Voeg map(pen) toe aan de afspeellijst..."
+msgstr "Voeg map(pen) toe aan de speellijst..."
#: ../plugins/gtkui/callbacks.c:192
msgid "Follow symlinks"
-msgstr ""
+msgstr "Volg symbolische koppelingen"
#: ../plugins/gtkui/callbacks.c:667
msgid "Failed while reading help file"
-msgstr "Fout bij het lezen van het help bestand"
+msgstr "Fout bij lezen van hulpbestand"
#: ../plugins/gtkui/callbacks.c:677
msgid "Failed to load help file"
-msgstr "Fout bij het lezen van het help bestand"
+msgstr "Kon hulpbestand niet laden"
#: ../plugins/gtkui/callbacks.c:692
msgid "help.txt"
-msgstr ""
+msgstr "help.txt"
#: ../plugins/gtkui/callbacks.c:693 ../plugins/gtkui/interface.c:1125
#: ../plugins/gtkui/deadbeef.glade.h:52
msgid "Help"
-msgstr "Help"
+msgstr "Hulp"
#: ../plugins/gtkui/callbacks.c:703
#, c-format
@@ -67,52 +67,53 @@ msgstr "Over DeaDBeeF %s"
#: ../plugins/gtkui/callbacks.c:716
#, c-format
msgid "DeaDBeeF %s ChangeLog"
-msgstr "DeaDBeeF %s ChangeLog"
+msgstr "DeaDBeeF %s Logboek van wijzigingen"
#: ../plugins/gtkui/callbacks.c:1080
-#, fuzzy, c-format
+#, c-format
+#, c-format
msgid "DeaDBeeF Translators"
-msgstr "DeaDBeeF speelt nu af"
+msgstr "DeaDBeeF Vertalers"
#: ../plugins/gtkui/ddbtabstrip.c:626
msgid "Edit playlist"
-msgstr "Bewerk afspeellijst"
+msgstr "Bewerk speellijst"
#: ../plugins/gtkui/ddbtabstrip.c:701
msgid "Rename Playlist"
-msgstr "Hernoem Afspeellijst"
+msgstr "Hernoem Speellijst"
#: ../plugins/gtkui/ddbtabstrip.c:705
msgid "Remove Playlist"
-msgstr "Verwijder Afspeellijst"
+msgstr "Verwijder Speellijst"
#: ../plugins/gtkui/ddbtabstrip.c:709
msgid "Add New Playlist"
-msgstr "Maak nieuwe afspeellijst"
+msgstr "Maak nieuwe speellijst"
#: ../plugins/gtkui/eq.c:113
msgid "Save DeaDBeeF EQ Preset"
-msgstr "Bewaar DeaDBeef EQ Preset"
+msgstr "Bewaar DeaDBeef EQ Voorkeuze"
#: ../plugins/gtkui/eq.c:120
msgid "DeaDBeeF EQ preset files (*.ddbeq)"
-msgstr "DeaDBeef EQ preset bestanden (*.ddbeq)"
+msgstr "DeaDBeef EQ voorkeuze-bestanden (*.ddbeq)"
#: ../plugins/gtkui/eq.c:151
msgid "Load DeaDBeeF EQ Preset..."
-msgstr "Laden DeaDBeeF EQ Preset..."
+msgstr "Laden DeaDBeeF EQ Voorkeuze..."
#: ../plugins/gtkui/eq.c:155
msgid "DeaDBeeF EQ presets (*.ddbeq)"
-msgstr "DeaDBeeF EQ Presets (*.ddbeq)"
+msgstr "DeaDBeeF EQ voorkeuzes (*.ddbeq)"
#: ../plugins/gtkui/eq.c:214
msgid "Import Foobar2000 EQ Preset..."
-msgstr "Importeer Foobar2000 EQ Preset..."
+msgstr "Importeer Foobar2000 EQ Voorkeuze..."
#: ../plugins/gtkui/eq.c:218
msgid "Foobar2000 EQ presets (*.feq)"
-msgstr "Foobar2000 EQ presets (*.feq)"
+msgstr "Foobar2000 EQ voorkeuzes (*.feq)"
#: ../plugins/gtkui/eq.c:292
msgid "Enable"
@@ -120,27 +121,27 @@ msgstr "Inschakelen"
#: ../plugins/gtkui/eq.c:300
msgid "Zero All"
-msgstr "Alles Dempen"
+msgstr "Alles op nul"
#: ../plugins/gtkui/eq.c:307
msgid "Zero Preamp"
-msgstr "Preamp Dempen"
+msgstr "Preamp op nul"
#: ../plugins/gtkui/eq.c:314
msgid "Zero Bands"
-msgstr "Bands Dempen"
+msgstr "Banden op nul"
#: ../plugins/gtkui/eq.c:321
msgid "Save Preset"
-msgstr "Opslaan preset"
+msgstr "Opslaan voorkeuze"
#: ../plugins/gtkui/eq.c:328
msgid "Load Preset"
-msgstr "Laden Preset"
+msgstr "Laden Voorkeuze"
#: ../plugins/gtkui/eq.c:335
msgid "Import Foobar2000 Preset"
-msgstr "Importeer Foobar2000 Preset"
+msgstr "Importeer Foobar2000 Voorkeuze"
#: ../plugins/gtkui/gtkui.c:133
#, c-format
@@ -155,7 +156,7 @@ msgstr "%d dagen %d:%02d:%02d"
#: ../plugins/gtkui/gtkui.c:145
#, c-format
msgid "Stopped | %d tracks | %s total playtime"
-msgstr "Gestopt | %d titels | %s totale speeltijd"
+msgstr "Gestopt | %d sporen | %s totale speeltijd"
#: ../plugins/gtkui/gtkui.c:158
msgid "Mono"
@@ -177,28 +178,29 @@ msgstr "Gepauzeerd | "
#: ../plugins/gtkui/gtkui.c:190
#, c-format
msgid "%s%s %s| %dHz | %d bit | %s | %d:%02d / %s | %d tracks | %s total playtime"
-msgstr "%s%s %s| %dHz | %d bit | %s | %d:%02d / %s | %d titels | %s totale speeltijd"
+msgstr ""
+"%s%s %s| %dHz | %d bit | %s | %d:%02d / %s | %d sporen | %s totale speeltijd"
#: ../plugins/gtkui/gtkui.c:661
msgid "Save Playlist As"
-msgstr "Afspeellijst opslaan als"
+msgstr "Speellijst opslaan als"
#: ../plugins/gtkui/gtkui.c:670 ../plugins/gtkui/gtkui.c:731
msgid "DeaDBeeF playlist files (*.dbpl)"
-msgstr "DeaDBeeF afspeellijst bestand (*.dbpl)"
+msgstr "DeaDBeeF speellijstbestanden (*.dbpl)"
#: ../plugins/gtkui/gtkui.c:724
msgid "Load Playlist"
-msgstr "Afspeellijst laden"
+msgstr "Speellijst laden"
#: ../plugins/gtkui/gtkui.c:864
msgid "New Playlist"
-msgstr "Nieuwe afspeellijst"
+msgstr "Nieuwe Speellijst"
#: ../plugins/gtkui/gtkui.c:867
#, c-format
msgid "New Playlist (%d)"
-msgstr "Nieuwe afspeellijst (%d)"
+msgstr "Nieuwe Speellijst (%d)"
#: ../plugins/gtkui/interface.c:142 ../plugins/gtkui/deadbeef.glade.h:152
msgid "_File"
@@ -223,19 +225,19 @@ msgstr "Voeg locatie toe"
#: ../plugins/gtkui/interface.c:190 ../plugins/gtkui/deadbeef.glade.h:82
msgid "New playlist"
-msgstr "Nieuwe afspeellijst"
+msgstr "Nieuwe speellijst"
#: ../plugins/gtkui/interface.c:197 ../plugins/gtkui/deadbeef.glade.h:74
msgid "Load playlist"
-msgstr "Laad afspeellijst"
+msgstr "Laad speellijst"
#: ../plugins/gtkui/interface.c:201 ../plugins/gtkui/deadbeef.glade.h:111
msgid "Save playlist"
-msgstr "Afspeellijst opslaan"
+msgstr "Speellijst opslaan"
#: ../plugins/gtkui/interface.c:205 ../plugins/gtkui/deadbeef.glade.h:112
msgid "Save playlist as"
-msgstr "Afspeellijst opslaan als.."
+msgstr "Speellijst opslaan als"
#: ../plugins/gtkui/interface.c:214 ../plugins/gtkui/deadbeef.glade.h:160
msgid "_Quit"
@@ -272,7 +274,7 @@ msgstr "Verwijderen"
#: ../plugins/gtkui/interface.c:273 ../plugins/gtkui/deadbeef.glade.h:18
msgid "Crop"
-msgstr "verkleinen"
+msgstr "Bijsnijden"
#: ../plugins/gtkui/interface.c:277 ../plugins/gtkui/deadbeef.glade.h:153
msgid "_Find"
@@ -293,7 +295,7 @@ msgstr "Statusbalk"
#: ../plugins/gtkui/interface.c:304 ../plugins/gtkui/deadbeef.glade.h:16
msgid "Column headers"
-msgstr "Kolom headers"
+msgstr "Kolomkoppen"
#: ../plugins/gtkui/interface.c:308 ../plugins/gtkui/deadbeef.glade.h:129
msgid "Tabs"
@@ -305,7 +307,7 @@ msgstr "Equalizer"
#: ../plugins/gtkui/interface.c:316 ../plugins/gtkui/deadbeef.glade.h:159
msgid "_Playback"
-msgstr "_Playback"
+msgstr "_Afspelen"
#: ../plugins/gtkui/interface.c:323 ../plugins/gtkui/deadbeef.glade.h:85
msgid "Order"
@@ -317,7 +319,7 @@ msgstr "Lineair"
#: ../plugins/gtkui/interface.c:336 ../plugins/gtkui/deadbeef.glade.h:120
msgid "Shuffle"
-msgstr "Willekeurig"
+msgstr "Schuffelen"
#: ../plugins/gtkui/interface.c:342 ../plugins/gtkui/deadbeef.glade.h:105
msgid "Random"
@@ -325,52 +327,52 @@ msgstr "Willekeurig"
#: ../plugins/gtkui/interface.c:348 ../plugins/gtkui/deadbeef.glade.h:77
msgid "Looping"
-msgstr "Herhalen"
+msgstr "Herhalend"
#: ../plugins/gtkui/interface.c:355 ../plugins/gtkui/deadbeef.glade.h:75
msgid "Loop All"
-msgstr "Alles herhalen"
+msgstr "Alles herhalend"
#: ../plugins/gtkui/interface.c:361 ../plugins/gtkui/deadbeef.glade.h:76
msgid "Loop Single Song"
-msgstr "Nummer herhalen"
+msgstr "Enkel nummer herhalend"
#: ../plugins/gtkui/interface.c:367 ../plugins/gtkui/deadbeef.glade.h:27
msgid "Don't Loop"
-msgstr "Niet herhalen"
+msgstr "Niet telkens herhalen"
#: ../plugins/gtkui/interface.c:373 ../plugins/gtkui/deadbeef.glade.h:113
msgid "Scroll follows playback"
-msgstr "Scroll volgt afgespeeld nummer"
+msgstr "Bladeren volgt afspelen"
#: ../plugins/gtkui/interface.c:378 ../plugins/gtkui/deadbeef.glade.h:20
msgid "Cursor follows playback"
-msgstr "Cursor volgt afgespeeld nummer"
+msgstr "Aanwijzer volgt afspelen"
#: ../plugins/gtkui/interface.c:382 ../plugins/gtkui/deadbeef.glade.h:124
msgid "Stop after current"
-msgstr "Stop met afspelen na huidig"
+msgstr "Stop na huidig"
#: ../plugins/gtkui/interface.c:394 ../plugins/gtkui/deadbeef.glade.h:69
msgid "Jump to current track"
-msgstr ""
+msgstr "Spring naar huidige spoor"
#: ../plugins/gtkui/interface.c:401 ../plugins/gtkui/interface.c:408
#: ../plugins/gtkui/deadbeef.glade.h:155
msgid "_Help"
-msgstr "_Help"
+msgstr "_Hulp"
#: ../plugins/gtkui/interface.c:416 ../plugins/gtkui/deadbeef.glade.h:148
msgid "_ChangeLog"
-msgstr "_ChangeLog"
+msgstr "_Logboek van wijzigingen"
#: ../plugins/gtkui/interface.c:425 ../plugins/gtkui/deadbeef.glade.h:154
msgid "_GPLv2"
-msgstr ""
+msgstr "_GPLv2"
#: ../plugins/gtkui/interface.c:429 ../plugins/gtkui/deadbeef.glade.h:156
msgid "_LGPLv2.1"
-msgstr ""
+msgstr "LGPLv2.1"
#: ../plugins/gtkui/interface.c:438 ../plugins/gtkui/deadbeef.glade.h:145
msgid "_About"
@@ -378,7 +380,7 @@ msgstr "_Over"
#: ../plugins/gtkui/interface.c:446 ../plugins/gtkui/deadbeef.glade.h:161
msgid "_Translators"
-msgstr ""
+msgstr "_Vertalers"
#: ../plugins/gtkui/interface.c:836 ../plugins/gtkui/deadbeef.glade.h:114
msgid "Search"
@@ -406,7 +408,7 @@ msgstr "Volgende"
#: ../plugins/gtkui/interface.c:951 ../plugins/gtkui/deadbeef.glade.h:92
msgid "Play Random"
-msgstr "Willekeurig afspelen "
+msgstr "Willekeurig afspelen"
#: ../plugins/gtkui/interface.c:960 ../plugins/gtkui/deadbeef.glade.h:3
msgid "About"
@@ -418,7 +420,7 @@ msgstr "Afsluiten"
#: ../plugins/gtkui/interface.c:1045 ../plugins/gtkui/deadbeef.glade.h:8
msgid "Adding files..."
-msgstr "Toevoegen van bestanden..."
+msgstr "Bestanden aan het toevoegen..."
#: ../plugins/gtkui/interface.c:1089 ../plugins/gtkui/deadbeef.glade.h:144
msgid "_Abort"
@@ -426,7 +428,7 @@ msgstr "_Afbreken"
#: ../plugins/gtkui/interface.c:1189 ../plugins/gtkui/deadbeef.glade.h:135
msgid "Track Properties"
-msgstr "Titel eigenschappen"
+msgstr "Eigenschappen van spoor"
#: ../plugins/gtkui/interface.c:1235 ../plugins/gtkui/deadbeef.glade.h:146
msgid "_Apply"
@@ -439,7 +441,7 @@ msgstr "_Sluiten"
#: ../plugins/gtkui/interface.c:1260 ../plugins/gtkui/deadbeef.glade.h:78
msgid "Metadata"
-msgstr "Metadata"
+msgstr "Bijkomende gegevens"
#: ../plugins/gtkui/interface.c:1306 ../plugins/gtkui/plcommon.c:504
#: ../plugins/gtkui/deadbeef.glade.h:98
@@ -457,7 +459,7 @@ msgstr "Titel:"
#: ../plugins/gtkui/interface.c:1414 ../plugins/gtkui/deadbeef.glade.h:30
msgid "Enter new column title here"
-msgstr "Voer een nieuwe column titel in"
+msgstr "Voer hier een nieuwe kolomtitel in"
#: ../plugins/gtkui/interface.c:1422 ../plugins/gtkui/deadbeef.glade.h:136
msgid "Type:"
@@ -465,7 +467,7 @@ msgstr "Type:"
#: ../plugins/gtkui/interface.c:1430
msgid "Item Index"
-msgstr ""
+msgstr "Index van elementen"
#. create default set of columns
#: ../plugins/gtkui/interface.c:1431 ../plugins/gtkui/mainplaylist.c:305
@@ -474,7 +476,7 @@ msgstr "Aan het afspelen"
#: ../plugins/gtkui/interface.c:1432
msgid "Album Art"
-msgstr "Albumhoes"
+msgstr "Albumkunst"
#: ../plugins/gtkui/interface.c:1433
msgid "Artist - Album"
@@ -501,11 +503,11 @@ msgstr "Lengte"
#: ../plugins/gtkui/interface.c:1438 ../plugins/gtkui/interface.c:1821
msgid "Track"
-msgstr "Titel"
+msgstr "Spoor"
#: ../plugins/gtkui/interface.c:1439 ../translation/extra.c:58
msgid "Band / Album Artist"
-msgstr "Band / Album Artiest"
+msgstr "Groep / Album Artiest"
#: ../plugins/gtkui/interface.c:1440 ../plugins/gtkui/plcommon.c:882
msgid "Custom"
@@ -514,11 +516,11 @@ msgstr "Aangepast"
#: ../plugins/gtkui/interface.c:1446 ../plugins/gtkui/interface.c:3124
#: ../plugins/gtkui/deadbeef.glade.h:49
msgid "Format:"
-msgstr "Formaat:"
+msgstr "Opmaaktype:"
#: ../plugins/gtkui/interface.c:1461 ../plugins/gtkui/deadbeef.glade.h:9
msgid "Alignment:"
-msgstr "Uitlijning"
+msgstr "Uitlijning:"
#: ../plugins/gtkui/interface.c:1469
msgid "Left"
@@ -529,7 +531,8 @@ msgid "Right"
msgstr "Rechts"
#: ../plugins/gtkui/interface.c:1472 ../plugins/gtkui/deadbeef.glade.h:35
-#, fuzzy, no-c-format
+#, no-c-format
+#, no-c-format
msgid ""
"Format conversions (start with %):\n"
" [a]rtist, [t]itle, al[b]um, [B]and, [C]omposer\n"
@@ -540,10 +543,11 @@ msgid ""
"Example: %a - %t [%l]"
msgstr ""
"Formatteer conversies (begin met %):\n"
-"[a]rtiest, [t]itel, al[b]um, [B]and, [C]omposer\n"
-"titel[n]ummer, [N]totaltracks,\n"
-"[d]uur, [j]aar, [g]enre, [c]ommentaar,\n"
-"copy[r]echt, [b]estandnaam, [T]ags\n"
+" [a]rtiest, [t]itel, al[b]um, [B]and, [C]omponist\n"
+" spoor[n]ummer, [N]totaltracks,\n"
+" [l]engte, [y]jaar, [g]enre, [c]ommentaar,\n"
+" auteurs[r]echt, [b]estandnaam, [T]ags,\n"
+" [d]map, [D]MapMetPad\n"
"Bijvoorbeeld: %a - %t [%l]"
#: ../plugins/gtkui/interface.c:1501 ../plugins/gtkui/interface.c:2928
@@ -556,15 +560,15 @@ msgstr "_Annuleer"
#: ../plugins/gtkui/interface.c:3061 ../plugins/gtkui/interface.c:3184
#: ../plugins/gtkui/deadbeef.glade.h:157
msgid "_OK"
-msgstr "_Accepteer"
+msgstr "_OK"
#: ../plugins/gtkui/interface.c:1753 ../plugins/gtkui/deadbeef.glade.h:87
msgid "Output plugin:"
-msgstr "Output plugin: "
+msgstr "Uitvoerplugin:"
#: ../plugins/gtkui/interface.c:1766 ../plugins/gtkui/deadbeef.glade.h:86
msgid "Output device:"
-msgstr "Output apparaat:"
+msgstr "Uitvoerapparaat:"
#: ../plugins/gtkui/interface.c:1775 ../plugins/gtkui/deadbeef.glade.h:121
msgid "Sound"
@@ -572,15 +576,15 @@ msgstr "Geluid"
#: ../plugins/gtkui/interface.c:1784 ../plugins/gtkui/deadbeef.glade.h:10
msgid "Allow dynamic samplerate switching"
-msgstr "Dynamic samplerate switching toestaan"
+msgstr "Dynamische samplerate-wisseling toestaan"
#: ../plugins/gtkui/interface.c:1792 ../plugins/gtkui/deadbeef.glade.h:110
msgid "Samplerate conversion quality:"
-msgstr "Samplerate conversie kwaliteit:"
+msgstr "Samplerate-conversiekwaliteit:"
#: ../plugins/gtkui/interface.c:1811 ../plugins/gtkui/deadbeef.glade.h:107
msgid "Replaygain mode:"
-msgstr "Replaygain mode:"
+msgstr "Replaygain modus:"
#: ../plugins/gtkui/interface.c:1820
msgid "Disable"
@@ -588,52 +592,53 @@ msgstr "Uitschakelen"
#: ../plugins/gtkui/interface.c:1824 ../plugins/gtkui/deadbeef.glade.h:108
msgid "Replaygain peak scale"
-msgstr "Replaygain piek scale"
+msgstr "Replaygain piek schaal"
#: ../plugins/gtkui/interface.c:1832 ../plugins/gtkui/deadbeef.glade.h:5
msgid "Add files from command line (or file manager) to this playlist:"
msgstr ""
+"Voeg bestanden toe vanaf de opdrachtregel (of met de bestandbeheerder) aan "
+"deze speellijst:"
#: ../plugins/gtkui/interface.c:1841 ../plugins/gtkui/deadbeef.glade.h:109
msgid "Resume previous session on startup"
-msgstr ""
+msgstr "Hervat vorige sessie bij opstarten"
#: ../plugins/gtkui/interface.c:1845 ../plugins/gtkui/deadbeef.glade.h:93
-#, fuzzy
msgid "Playback"
-msgstr "_Playback"
+msgstr "Afspelen"
#: ../plugins/gtkui/interface.c:1854 ../plugins/gtkui/deadbeef.glade.h:14
msgid "Close minimizes to tray"
-msgstr "Sluiten minimaliseert naar tray"
+msgstr "Sluiten minimaliseert naar systeemvak"
#: ../plugins/gtkui/interface.c:1858 ../plugins/gtkui/deadbeef.glade.h:80
msgid "Middle mouse button closes playlist"
-msgstr "Middelste muisknop sluit afspeellijst"
+msgstr "Middelste muisknop sluit speellijst"
#: ../plugins/gtkui/interface.c:1862 ../plugins/gtkui/deadbeef.glade.h:54
msgid "Hide system tray icon"
-msgstr ""
+msgstr "Verberg systeemvakpictogram"
#: ../plugins/gtkui/interface.c:1866 ../plugins/gtkui/deadbeef.glade.h:138
msgid "Use bold font for currently playing track"
-msgstr ""
+msgstr "Gebruik vetgedrukt lettertype voor het thans afspelende spoor"
#: ../plugins/gtkui/interface.c:1870 ../plugins/gtkui/deadbeef.glade.h:53
msgid "Hide \"Delete from disk\" context menu item"
-msgstr ""
+msgstr "Verberg \"Verwijder van schijf\"-element in het contekstmenu"
#: ../plugins/gtkui/interface.c:1878 ../plugins/gtkui/deadbeef.glade.h:133
msgid "Titlebar text while playing:"
-msgstr ""
+msgstr "Titelbalktekst gedurende afspelen:"
#: ../plugins/gtkui/interface.c:1892 ../plugins/gtkui/deadbeef.glade.h:134
msgid "Titlebar text while stopped:"
-msgstr ""
+msgstr "Titelbalktekst wanneer gestopt:"
#: ../plugins/gtkui/interface.c:1902 ../plugins/gtkui/deadbeef.glade.h:50
msgid "GUI"
-msgstr "Interface"
+msgstr "Gebruikersomgeving"
#: ../plugins/gtkui/interface.c:1916 ../plugins/gtkui/interface.c:1960
#: ../plugins/gtkui/deadbeef.glade.h:88
@@ -650,7 +655,7 @@ msgstr "Achtergrond"
#: ../plugins/gtkui/interface.c:1951 ../plugins/gtkui/deadbeef.glade.h:115
msgid "Seekbar/Volumebar colors"
-msgstr "Kleuren zoekbar/volumebar"
+msgstr "Kleuren Zoekbalk/Volumebalk"
#: ../plugins/gtkui/interface.c:1969 ../plugins/gtkui/deadbeef.glade.h:79
msgid "Middle"
@@ -666,23 +671,23 @@ msgstr "Donker"
#: ../plugins/gtkui/interface.c:2014 ../plugins/gtkui/deadbeef.glade.h:13
msgid "Base"
-msgstr "Achtergrond"
+msgstr "Basis"
#: ../plugins/gtkui/interface.c:2021 ../plugins/gtkui/deadbeef.glade.h:128
msgid "Tab strip colors"
-msgstr "Tab kleuren"
+msgstr "Tabstrook-kleuren"
#: ../plugins/gtkui/interface.c:2030 ../plugins/gtkui/deadbeef.glade.h:89
msgid "Override (looses GTK treeview theming, but speeds up rendering)"
-msgstr "Negeer (sneller, maar geen GTK boomstructuur grafisch thema)"
+msgstr "Negeer (geen boomstructuurthema, maar snellere weergave)"
#: ../plugins/gtkui/interface.c:2039 ../plugins/gtkui/deadbeef.glade.h:32
msgid "Even row"
-msgstr "Even rijen"
+msgstr "Even rij"
#: ../plugins/gtkui/interface.c:2046 ../plugins/gtkui/deadbeef.glade.h:84
msgid "Odd row"
-msgstr "Oneven rijen"
+msgstr "Oneven rij"
#: ../plugins/gtkui/interface.c:2065 ../plugins/gtkui/deadbeef.glade.h:131
msgid "Text"
@@ -694,19 +699,19 @@ msgstr "Geselecteerde rij"
#: ../plugins/gtkui/interface.c:2091 ../plugins/gtkui/deadbeef.glade.h:118
msgid "Selected text"
-msgstr "Geselecteerde text"
+msgstr "Geselecteerde tekst"
#: ../plugins/gtkui/interface.c:2104 ../plugins/gtkui/deadbeef.glade.h:19
msgid "Cursor"
-msgstr "Muisaanwijzer"
+msgstr "Aanwijzer"
#: ../plugins/gtkui/interface.c:2117 ../plugins/gtkui/deadbeef.glade.h:94
msgid "Playlist colors"
-msgstr "Playlist kleuren"
+msgstr "Speellijst-kleuren"
#: ../plugins/gtkui/interface.c:2121 ../plugins/gtkui/deadbeef.glade.h:15
msgid "Colors"
-msgstr ""
+msgstr "Kleuren"
#: ../plugins/gtkui/interface.c:2130 ../plugins/gtkui/deadbeef.glade.h:29
msgid "Enable Proxy Server"
@@ -722,7 +727,7 @@ msgstr "Proxy Server Poort:"
#: ../plugins/gtkui/interface.c:2166 ../plugins/gtkui/deadbeef.glade.h:102
msgid "Proxy Type:"
-msgstr "Proxy type"
+msgstr "Proxy Type:"
#: ../plugins/gtkui/interface.c:2185 ../plugins/gtkui/deadbeef.glade.h:103
msgid "Proxy Username:"
@@ -730,7 +735,7 @@ msgstr "Proxy Gebruikersnaam:"
#: ../plugins/gtkui/interface.c:2198 ../plugins/gtkui/deadbeef.glade.h:99
msgid "Proxy Password:"
-msgstr "Proxy wachtwoord:"
+msgstr "Proxy Wachtwoord:"
#: ../plugins/gtkui/interface.c:2208 ../plugins/gtkui/deadbeef.glade.h:81
msgid "Network"
@@ -779,7 +784,7 @@ msgstr "2.4"
#: ../plugins/gtkui/interface.c:2282 ../plugins/gtkui/deadbeef.glade.h:55
msgid "ID3v1 character encoding (default is iso8859-1)"
-msgstr "ID3v1 karakter codering (default is iso8859-1)"
+msgstr "ID3v1 tekencodering (standaard is iso8859-1)"
#: ../plugins/gtkui/interface.c:2319 ../plugins/gtkui/deadbeef.glade.h:143
msgid "Write ID3v2.4"
@@ -787,7 +792,7 @@ msgstr "ID3v2.4 schrijven"
#: ../plugins/gtkui/interface.c:2388 ../plugins/gtkui/deadbeef.glade.h:130
msgid "Tag writer"
-msgstr "Tag schrijver"
+msgstr "Etiketschrijver"
#: ../plugins/gtkui/interface.c:2419 ../plugins/gtkui/deadbeef.glade.h:22
msgid "Description:"
@@ -795,15 +800,15 @@ msgstr "Beschrijving:"
#: ../plugins/gtkui/interface.c:2434 ../plugins/gtkui/deadbeef.glade.h:11
msgid "Author(s):"
-msgstr "Auteur:"
+msgstr "Auteur(s):"
#: ../plugins/gtkui/interface.c:2449 ../plugins/gtkui/deadbeef.glade.h:28
msgid "Email:"
-msgstr "Email:"
+msgstr "E-mail:"
#: ../plugins/gtkui/interface.c:2464 ../plugins/gtkui/deadbeef.glade.h:139
msgid "Website:"
-msgstr "Website:"
+msgstr "Webstek:"
#: ../plugins/gtkui/interface.c:2495 ../plugins/gtkui/deadbeef.glade.h:17
msgid "Configure"
@@ -823,7 +828,7 @@ msgstr "URL:"
#: ../plugins/gtkui/interface.c:3109 ../plugins/gtkui/deadbeef.glade.h:51
msgid "Group By"
-msgstr "Grouperen volgens"
+msgstr "Groeperen op"
#: ../plugins/gtkui/interface.c:3134 ../plugins/gtkui/deadbeef.glade.h:43
#, no-c-format
@@ -836,10 +841,10 @@ msgid ""
"Example: %a - %t [%l]"
msgstr ""
"Formatteer conversies (begin met %):\n"
-"[a]rtiest, [t]itel, al[b]um, [B]and, [C]omposer\n"
-"titel[n]ummer, [N]totaltracks,\n"
-"[d]uur, [j]aar, [g]enre, [c]ommentaar,\n"
-"copy[r]echt, [b]estandnaam, [T]ags\n"
+" [a]rtiest, [t]itel, al[b]um, [B]and, [C]omponist\n"
+" spoor[n]ummer, [N]totaltracks,\n"
+" [d]uur, [j]aar, [g]enre, [c]ommentaar,\n"
+" auteurs[r]echt, [b]estandnaam, [T]ags\n"
"Bijvoorbeeld: %a - %t [%l]"
#: ../plugins/gtkui/mainplaylist.c:306 ../plugins/gtkui/search.c:439
@@ -848,16 +853,16 @@ msgstr "Artiest / Album"
#: ../plugins/gtkui/mainplaylist.c:307 ../plugins/gtkui/search.c:440
msgid "Track No"
-msgstr "Title nr."
+msgstr "Spoornr."
#: ../plugins/gtkui/mainplaylist.c:308 ../plugins/gtkui/search.c:441
msgid "Title / Track Artist"
-msgstr "Titel / Titel Artiest"
+msgstr "Titel / Spoor Artiest"
#: ../plugins/gtkui/mainplaylist.c:309 ../plugins/gtkui/search.c:442
#: ../plugins/gtkui/trkproperties.c:175
msgid "Duration"
-msgstr "Speeltijd"
+msgstr "Duur"
#: ../plugins/gtkui/plcommon.c:324
msgid "Delete files from disk"
@@ -868,8 +873,8 @@ msgid ""
"Files will be lost. Proceed?\n"
"(This dialog can be turned off in GTKUI plugin settings)"
msgstr ""
-"Bestanden zullen verloren worden. Doorgaan?\n"
-"(Dit venster kunt u uitschakelen in de GTKUI plugin instellingen)"
+"Bestanden zullen verloren gaan. Doorgaan?\n"
+"(Dit venster kunt u uitschakelen in de GTKUI plugin-instellingen)"
#: ../plugins/gtkui/plcommon.c:326 ../plugins/gtkui/trkproperties.c:56
msgid "Warning"
@@ -877,15 +882,15 @@ msgstr "Waarschuwing"
#: ../plugins/gtkui/plcommon.c:402
msgid "Add to playback queue"
-msgstr "Aan de wachtrij toevoegen"
+msgstr "Aan de speelwachtrij toevoegen"
#: ../plugins/gtkui/plcommon.c:407
msgid "Remove from playback queue"
-msgstr "Van wachtrij verwijderen"
+msgstr "Uit speelwachtrij verwijderen"
#: ../plugins/gtkui/plcommon.c:415
msgid "Reload metadata"
-msgstr "Herlaad metadata"
+msgstr "Herlaad bijkomende gegevens"
#: ../plugins/gtkui/plcommon.c:434
msgid "Remove from disk"
@@ -905,7 +910,7 @@ msgstr "Kolom verwijderen"
#: ../plugins/gtkui/plcommon.c:863
msgid "Group by"
-msgstr "Grouperen volgens"
+msgstr "Groeperen op"
#: ../plugins/gtkui/plcommon.c:870
msgid "None"
@@ -926,7 +931,7 @@ msgstr "Configuratie %s"
#: ../plugins/gtkui/prefwin.c:99
msgid "Default Audio Device"
-msgstr "Standaard Geluids Apparaat"
+msgstr "Standaard Geluidsapparaat"
#: ../plugins/gtkui/prefwin.c:329
msgid "Add"
@@ -934,11 +939,11 @@ msgstr "Toevoegen"
#: ../plugins/gtkui/prefwin.c:339
msgid "Global Hotkeys"
-msgstr "Globale sneltoetsen"
+msgstr "Globale Sneltoetsen"
#: ../plugins/gtkui/prefwin.c:401
msgid "Slot"
-msgstr "Sleuf"
+msgstr "Gleuf"
#: ../plugins/gtkui/prefwin.c:402
msgid "Key combination"
@@ -948,36 +953,35 @@ msgstr "Toetscombinatie"
#: ../plugins/gtkui/prefwin.c:481 ../plugins/gtkui/prefwin.c:693
#: ../plugins.c:873
msgid "ALSA output plugin"
-msgstr "ALSA output plugin"
+msgstr "ALSA uitvoer-plugin"
#: ../plugins/gtkui/progress.c:64
msgid "Initializing..."
-msgstr "Initialiseren..."
+msgstr "Aan het initialiseren..."
#: ../plugins/gtkui/trkproperties.c:53
msgid "You've modified data for this track."
-msgstr "U heeft data aangepast voor deze track."
+msgstr "U heeft gegevens aangepast voor dit spoor."
#: ../plugins/gtkui/trkproperties.c:55
msgid "Really close the window?"
-msgstr "Weet u zeker dat u dit venster wilt sluiten?"
+msgstr "Dit venster echt sluiten?"
#: ../plugins/gtkui/trkproperties.c:169
-#, fuzzy
msgid "Location"
-msgstr "Voeg locatie toe"
+msgstr "Locatie"
#: ../plugins/gtkui/trkproperties.c:172
msgid "Subtrack Index"
-msgstr ""
+msgstr "Subspoor-index"
#: ../plugins/gtkui/trkproperties.c:178
msgid "Tag Type(s)"
-msgstr "Tag type(s)"
+msgstr "Etiket-type(s)"
#: ../plugins/gtkui/trkproperties.c:180
msgid "Embedded Cuesheet"
-msgstr "Ingebedde cuesheet"
+msgstr "Ingebedde Informatietekst"
#: ../plugins/gtkui/trkproperties.c:180
msgid "Yes"
@@ -989,7 +993,7 @@ msgstr "Nee"
#: ../plugins/gtkui/trkproperties.c:182
msgid "Codec"
-msgstr ""
+msgstr "Codec"
#: ../plugins/gtkui/trkproperties.c:250 ../plugins/gtkui/trkproperties.c:262
msgid "Key"
@@ -1001,7 +1005,7 @@ msgstr "Waarde"
#: ../plugins/notify/notify.c:138
msgid "DeaDBeeF now playing"
-msgstr "DeaDBeeF speelt nu af"
+msgstr "DeaDBeeF is nu aan het spelen"
#: ../main.c:89
#, c-format
@@ -1016,57 +1020,57 @@ msgstr "Opties:\n"
#: ../main.c:91
#, c-format
msgid " --help or -h Print help (this message) and exit\n"
-msgstr "--help or -h Toont help (deze boodschap) en exit\n"
+msgstr " --help or -h Drukt hulp af (dit bericht) en sluit af\n"
#: ../main.c:92
#, c-format
msgid " --quit Quit player\n"
-msgstr "--quit Speler afsluiten\n"
+msgstr " --quit Speler afsluiten\n"
#: ../main.c:93
#, c-format
msgid " --version Print version info and exit\n"
-msgstr "--version Versie info tonenen exit\n"
+msgstr " --version Versie-informatie afdrukken en sluiten\n"
#: ../main.c:94
#, c-format
msgid " --play Start playback\n"
-msgstr "--play Playback starten\n"
+msgstr " --play Afspelen beginnen\n"
#: ../main.c:95
#, c-format
msgid " --stop Stop playback\n"
-msgstr "--stop Playback stoppen\n"
+msgstr " --stop Afspelen stoppen\n"
#: ../main.c:96
#, c-format
msgid " --pause Pause playback\n"
-msgstr "--pause Playback pauzeren\n"
+msgstr " --pause Afspelen pauzeren\n"
#: ../main.c:97
#, c-format
msgid " --next Next song in playlist\n"
-msgstr "--next Volgend nummer in afspeellijstt\n"
+msgstr " --next Volgend nummer in speellijst\n"
#: ../main.c:98
#, c-format
msgid " --prev Previous song in playlist\n"
-msgstr "--prev Vorig nummer in afspeellijst\n"
+msgstr " --prev Vorig nummer in speellijst\n"
#: ../main.c:99
#, c-format
msgid " --random Random song in playlist\n"
-msgstr "--random Willekeurig nummer in afspeellijst\n"
+msgstr " --random Willekeurig nummer in speellijst\n"
#: ../main.c:100
#, c-format
msgid " --queue Append file(s) to existing playlist\n"
-msgstr "--queue Bestand(en) toevoegen aan afspeellijst\n"
+msgstr " --queue Bestand(en) toevoegen aan speellijst\n"
#: ../main.c:101
#, c-format
msgid " --nowplaying FMT Print formatted track name to stdout\n"
-msgstr "--nowplaying FMT Afdrukken geformatteerde track naam naar stdout\n"
+msgstr " --nowplaying FMT Afdrukken geformatteerde spoornaam naar stdout\n"
#: ../main.c:102
#, c-format
@@ -1075,14 +1079,15 @@ msgid ""
" [l]ength, track[n]umber, [y]ear, [c]omment,\n"
" copy[r]ight, [e]lapsed\n"
msgstr ""
-"FMT %%-syntax: [a]rtist, [t]itle, al[b]um,\n"
-"[l]ength, track[n]umber, [y]ear, [c]omment,\n"
-"copy[r]ight, [e]lapsed\n"
+" FMT %%-syntax: [a]rtist, [t]itle, al[b]um,\n"
+" [l]ength, track[n]umber, [y]ear, [c]omment,\n"
+" copy[r]ight, [e]lapsed\n"
#: ../main.c:105
#, c-format
msgid " e.g.: --nowplaying \"%%a - %%t\" should print \"artist - title\"\n"
-msgstr "e.g.: --nowplaying \"%%a - %%t\" toont \"artist - title\"\n"
+msgstr " e.g.: --nowplaying \"%%a - %%t\" should print \"artist - "
+"title\"\n"
#: ../playlist.c:377 ../playlist.c:2289
msgid "Default"
@@ -1103,11 +1108,10 @@ msgid ""
"Album"
msgstr ""
"Zet uit\n"
-"Nummer\n"
+"Spoor\n"
"Album"
#: ../plugins/gtkui/deadbeef.glade.h:58
-#, fuzzy
msgid ""
"Item Index\n"
"Playing\n"
@@ -1121,9 +1125,9 @@ msgid ""
"Band / Album Artist\n"
"Custom"
msgstr ""
-"Bestandsnummer\n"
-"Speelt af\n"
-"Album Art\n"
+"Elementen Index\n"
+"Aan het afspelen\n"
+"Album Kunst\n"
"Artiest - Album\n"
"Artiest\n"
"Album\n"
@@ -1144,232 +1148,226 @@ msgstr ""
#: ../plugins/gtkui/support.c:90 ../plugins/gtkui/support.c:114
#, c-format
msgid "Couldn't find pixmap file: %s"
-msgstr "Kon geen pixmap bestand vinden: %s"
+msgstr "Kon geen pixmapbestand vinden: %s"
#: ../plugins/wildmidi/wildmidiplug.c:162
#, c-format
msgid "wildmidi: freepats config file not found. Please install timidity-freepats package, or specify path to freepats.cfg in the plugin settings."
msgstr ""
+"wildmidi: configuratiebestand voor freepats niet gevonden. Installeer "
+"timidity-freepats-pakket, of specificeer pad naar freepats.cfg in de plugin-"
+"instellingen"
#. this file should list extra translatable strings that are not referenced
#. directly in source code, e.g. scripted plugin configuration strings
#: ../translation/extra.c:3
msgid "Add Audio CD"
-msgstr "Voeg Audio CD toe"
+msgstr "Voeg Geluids-CD toe"
#: ../translation/extra.c:4
msgid "Lookup on Last.fm"
-msgstr ""
+msgstr "Zoek het op, op Last.fm"
#. ALSA output plugin
#: ../translation/extra.c:6
msgid "Use ALSA resampling"
-msgstr ""
+msgstr "Gebruik ALSA-resampling"
#: ../translation/extra.c:7
msgid "Release device while stopped"
-msgstr ""
+msgstr "Geef apparaat vrij wanneer gestopt"
#: ../translation/extra.c:8 ../translation/extra.c:43
msgid "Preferred buffer size"
-msgstr ""
+msgstr "Voorkeursomvang van de buffer"
#: ../translation/extra.c:9
msgid "Preferred period size"
-msgstr ""
+msgstr "Voorkeursomvang van de periode"
#. Last.fm plugin
#: ../translation/extra.c:11
-#, fuzzy
msgid "Enable scrobbler"
-msgstr "Schakel Proxy Server in"
+msgstr "Schakel scrobbler in"
#: ../translation/extra.c:12
-#, fuzzy
msgid "Disable nowplaying"
-msgstr "DeaDBeeF speelt nu af"
+msgstr "Schakel NuAanHetAfspelen uit"
#: ../translation/extra.c:13
-#, fuzzy
msgid "Username"
-msgstr "Proxy Gebruikersnaam:"
+msgstr "Gebruikersnaam"
#: ../translation/extra.c:14
-#, fuzzy
msgid "Password"
-msgstr "Proxy wachtwoord:"
+msgstr "Wachtwoord"
#: ../translation/extra.c:15
msgid "Scrobble URL"
-msgstr ""
+msgstr "Scrobble URL"
#. Album Artwork plugin
#: ../translation/extra.c:17
msgid "Cache update period (hr)"
-msgstr ""
+msgstr "Periode voor bijwerken opslag (uur)"
#: ../translation/extra.c:18
msgid "Fetch from embedded tags"
-msgstr ""
+msgstr "Haal op uit ingebedde etiketten"
#: ../translation/extra.c:19
msgid "Fetch from local folder"
-msgstr ""
+msgstr "Haal op uit plaatselijke map"
#: ../translation/extra.c:20
msgid "Local cover file mask"
-msgstr ""
+msgstr "Plaatselijk masker voor hoesbestand"
#: ../translation/extra.c:21
msgid "Fetch from last.fm"
-msgstr ""
+msgstr "Haal op van Last.fm"
#: ../translation/extra.c:22
msgid "Fetch from albumart.org"
-msgstr ""
+msgstr "Haal op van albumart.org"
#. Audio CD player
#: ../translation/extra.c:24
msgid "Use CDDB/FreeDB"
-msgstr ""
+msgstr "Gebruik CDDB/FreeDB"
#: ../translation/extra.c:25
msgid "Prefer CD-Text over CDDB"
-msgstr ""
+msgstr "Verkies CD-tekst boven CDDB"
#: ../translation/extra.c:26
msgid "CDDB url (e.g. 'freedb.org')"
-msgstr ""
+msgstr "CDDB url (bijv. 'freedb.org')"
#: ../translation/extra.c:27
msgid "CDDB port number (e.g. '888')"
-msgstr ""
+msgstr "CDDB poortnummer (bijv. '888')"
#: ../translation/extra.c:28
msgid "Prefer CDDB protocol over HTTP"
-msgstr ""
+msgstr "Verkies CDDB-protocol boven HTTP"
#: ../translation/extra.c:29
msgid "Enable NRG image support"
-msgstr ""
+msgstr "Schakel NRG-afbeeldingsondersteuning in"
#. DUMB module player plugin
#: ../translation/extra.c:31
msgid "Resampling quality (0..2, higher is better)"
-msgstr ""
+msgstr "Resampling-kwaliteit (0..2, hoger is beter)"
#. Game_Music_Emu decoder plugin
#: ../translation/extra.c:33
msgid "Max song length (in minutes)"
-msgstr ""
+msgstr "Maximale muziekstukduur (in minuten)"
#. Standard GTK2 user interface plugin
#: ../translation/extra.c:35
-#, fuzzy
msgid "Ask confirmation to delete files from disk"
-msgstr "Verwijder bestanden van schijf"
+msgstr "Vraag bevestiging voor het verwijderen van bestanden van de schijf"
#: ../translation/extra.c:36
msgid "Status icon volume control sensitivity"
-msgstr ""
+msgstr "Statuspictogram voor gevoeligheid van volumeknop"
#: ../translation/extra.c:37
msgid "Custom status icon"
-msgstr ""
+msgstr "Aangepast statuspictogram"
#: ../translation/extra.c:38
msgid "Run gtk_init with --sync (debug mode)"
-msgstr ""
+msgstr "Draai gtk_init met --sync (debug-modus)"
#. OSD Notify plugin
#: ../translation/extra.c:40
msgid "Notification format"
-msgstr ""
+msgstr "Bestandopmaak van melding"
#. PulseAudio output plugin
#: ../translation/extra.c:42
msgid "PulseAudio server"
-msgstr ""
+msgstr "PulseAudio-server"
#: ../translation/extra.c:44
msgid "Samplerate"
-msgstr ""
+msgstr "Samplerate"
#. SHN player plugin
#: ../translation/extra.c:46
msgid "Relative seek table path"
-msgstr ""
+msgstr "Relatief pad voor zoektabel"
#: ../translation/extra.c:47
msgid "Absolute seek table path"
-msgstr ""
+msgstr "Absoluut pad voor zoektabel"
#: ../translation/extra.c:48
msgid "Swap audio bytes (toggle if all you hear is static)"
msgstr ""
+"Verwissel audio-bytes (schakel om indien u slechts statische ruis hoort)"
#. SID decoder plugin
#: ../translation/extra.c:50
-#, fuzzy
msgid "Enable HVSC"
-msgstr "Inschakelen"
+msgstr "HVSC inschakelen"
#: ../translation/extra.c:51
msgid "HVSC path"
-msgstr ""
+msgstr "HVSC-pad"
#. WildMidi player plugin
#: ../translation/extra.c:53
msgid "Timidity++ bank configuration file"
-msgstr ""
+msgstr "Configuratiebestand voor Timidity++ bank"
#: ../translation/extra.c:56
-#, fuzzy
msgid "Track Title"
-msgstr "Title nr."
+msgstr "Spoor Titel"
#: ../translation/extra.c:57
msgid "Performer"
-msgstr ""
+msgstr "Artiest"
#: ../translation/extra.c:60
msgid "Date"
-msgstr ""
+msgstr "Datum"
#: ../translation/extra.c:61
-#, fuzzy
msgid "Track Number"
-msgstr "Title nr."
+msgstr "Spoor Nummer"
#: ../translation/extra.c:62
-#, fuzzy
msgid "Total Tracks"
-msgstr "Titel / Titel Artiest"
+msgstr "Totaal aantal Sporen"
#: ../translation/extra.c:63
msgid "Genre"
-msgstr ""
+msgstr "Genre"
#: ../translation/extra.c:64
msgid "Composer"
-msgstr ""
+msgstr "Componist"
#: ../translation/extra.c:65
-#, fuzzy
msgid "Disc Number"
-msgstr "Bestand´s nummer"
+msgstr "Schijf Nummer"
#: ../translation/extra.c:66
msgid "Comment"
-msgstr ""
+msgstr "Commentaar"
#: ../translation/extra.c:67
msgid "Encoder / Vendor"
-msgstr ""
+msgstr "Encodeur/Verkoper"
#: ../translation/extra.c:68
msgid "Copyright"
-msgstr ""
+msgstr "Auteursrecht"
#~ msgid ""
#~ "<b>WARNING</b>: tag writing feature is still in development.\n"
diff --git a/po/pt.po b/po/pt.po
index 51432a27..70ce6588 100644
--- a/po/pt.po
+++ b/po/pt.po
@@ -8,16 +8,17 @@ msgstr ""
"Project-Id-Version: deadbeef\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-10-06 04:37+0000\n"
-"PO-Revision-Date: 2010-10-06 12:05-0000\n"
+"PO-Revision-Date: 2011-06-10 19:27-0000\n"
"Last-Translator: Sérgio Marques <smarquespt@gmail.com>\n"
"Language-Team: \n"
+"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 2.0.5\n"
"X-Poedit-Language: Portuguese\n"
"X-Poedit-Country: Portugal\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../plugins/gtkui/callbacks.c:97
msgid "Supported sound formats"
@@ -41,7 +42,7 @@ msgstr "Adicionar pasta(s) à lista..."
#: ../plugins/gtkui/callbacks.c:192
msgid "Follow symlinks"
-msgstr "Seguir \"symlinks\""
+msgstr "Seguir ligações simbólicas"
#: ../plugins/gtkui/callbacks.c:667
msgid "Failed while reading help file"
@@ -64,7 +65,7 @@ msgstr "Ajuda"
#: ../plugins/gtkui/callbacks.c:703
#, c-format
msgid "About DeaDBeeF %s"
-msgstr "Sobre DeaDBeef %s"
+msgstr "Sobre o DeaDBeef %s"
#: ../plugins/gtkui/callbacks.c:705
msgid "about.txt"
@@ -114,27 +115,27 @@ msgstr "Adicionar nova lista"
#: ../plugins/gtkui/eq.c:113
msgid "Save DeaDBeeF EQ Preset"
-msgstr "Gravar pré-Ajustes do EQ DeadBeeF"
+msgstr "Gravar pré-ajustes do EQ DeadBeeF"
#: ../plugins/gtkui/eq.c:120
msgid "DeaDBeeF EQ preset files (*.ddbeq)"
-msgstr "Ficheiros de pré-Ajustes do EQ DeadBeeF(*.ddbeq)"
+msgstr "Ficheiros de pré-ajustes do EQ DeadBeeF(*.ddbeq)"
#: ../plugins/gtkui/eq.c:151
msgid "Load DeaDBeeF EQ Preset..."
-msgstr "Carregar pré-Ajustes do EQ DeadBeeF..."
+msgstr "Carregar pré-ajustes do EQ DeadBeeF..."
#: ../plugins/gtkui/eq.c:155
msgid "DeaDBeeF EQ presets (*.ddbeq)"
-msgstr "Pré-Ajustes do EQ DeadBeeF (*.ddbeq)"
+msgstr "Pré-ajustes do EQ DeadBeeF (*.ddbeq)"
#: ../plugins/gtkui/eq.c:214
msgid "Import Foobar2000 EQ Preset..."
-msgstr "Importar pré-Ajustes Foobar2000..."
+msgstr "Importar pré-ajustes Foobar2000..."
#: ../plugins/gtkui/eq.c:218
msgid "Foobar2000 EQ presets (*.feq)"
-msgstr "Pré-Ajustes Foobar2000 (*.feq)"
+msgstr "Pré-ajustes Foobar2000 (*.feq)"
#: ../plugins/gtkui/eq.c:292
msgid "Enable"
@@ -142,27 +143,27 @@ msgstr "Ativar"
#: ../plugins/gtkui/eq.c:300
msgid "Zero All"
-msgstr "Tudo a zero"
+msgstr "Nulo"
#: ../plugins/gtkui/eq.c:307
msgid "Zero Preamp"
-msgstr "\"Zero Preamp\""
+msgstr "Amplificador nulo"
#: ../plugins/gtkui/eq.c:314
msgid "Zero Bands"
-msgstr "Bandas a zero"
+msgstr "Bandas nulas"
#: ../plugins/gtkui/eq.c:321
msgid "Save Preset"
-msgstr "Gravar pré-Ajustes"
+msgstr "Gravar pré-ajustes"
#: ../plugins/gtkui/eq.c:328
msgid "Load Preset"
-msgstr "Carregar pré-Ajustes"
+msgstr "Carregar pré-ajustes"
#: ../plugins/gtkui/eq.c:335
msgid "Import Foobar2000 Preset"
-msgstr "Importar pré-Ajustes do Foobar2000"
+msgstr "Importar pré-ajustes do Foobar2000"
#: ../plugins/gtkui/gtkui.c:133
#, c-format
@@ -177,7 +178,7 @@ msgstr "%d dias %d:%02d:%02d"
#: ../plugins/gtkui/gtkui.c:145
#, c-format
msgid "Stopped | %d tracks | %s total playtime"
-msgstr "Parado | %d faixas | %s reproduções"
+msgstr "Parado | %d músicas | %s reproduções"
#: ../plugins/gtkui/gtkui.c:158
msgid "Mono"
@@ -194,12 +195,12 @@ msgstr "| %4d kbps "
#: ../plugins/gtkui/gtkui.c:189
msgid "Paused | "
-msgstr "Pausado | "
+msgstr "Em pausa | "
#: ../plugins/gtkui/gtkui.c:190
#, c-format
msgid "%s%s %s| %dHz | %d bit | %s | %d:%02d / %s | %d tracks | %s total playtime"
-msgstr "%s%s %s| %dHz | %d bit | %s | %d:%02d / %s | %d faixas | %s reproduções"
+msgstr "%s%s %s| %dHz | %d bit | %s | %d:%02d / %s | %d músicas | %s reproduções"
#: ../plugins/gtkui/gtkui.c:661
msgid "Save Playlist As"
@@ -360,7 +361,7 @@ msgstr "_Reprodução"
#: ../plugins/gtkui/interface.c:323
#: ../plugins/gtkui/deadbeef.glade.h:85
msgid "Order"
-msgstr "Ordem"
+msgstr "Organização"
#: ../plugins/gtkui/interface.c:330
#: ../plugins/gtkui/deadbeef.glade.h:73
@@ -471,7 +472,7 @@ msgstr "Pausar"
#: ../plugins/gtkui/interface.c:935
#: ../plugins/gtkui/deadbeef.glade.h:97
msgid "Previous"
-msgstr "Anterior "
+msgstr "Anterior"
#: ../plugins/gtkui/interface.c:943
#: ../plugins/gtkui/deadbeef.glade.h:83
@@ -506,7 +507,7 @@ msgstr "_Abortar"
#: ../plugins/gtkui/interface.c:1189
#: ../plugins/gtkui/deadbeef.glade.h:135
msgid "Track Properties"
-msgstr "Propriedades da faixa"
+msgstr "Propriedades da música"
#: ../plugins/gtkui/interface.c:1235
#: ../plugins/gtkui/deadbeef.glade.h:146
@@ -600,7 +601,7 @@ msgstr "Faixa"
#: ../plugins/gtkui/interface.c:1439
#: ../translation/extra.c:58
msgid "Band / Album Artist"
-msgstr "Banda/Artista do Álbum"
+msgstr "Banda / Artista do álbum"
#: ../plugins/gtkui/interface.c:1440
#: ../plugins/gtkui/plcommon.c:882
@@ -639,11 +640,11 @@ msgid ""
"Example: %a - %t [%l]"
msgstr ""
"Conversão de formatos (iniciam com %):\n"
-" [a]rtista, [t]ítulo, ál[b]um, [B]anda, [C]ompositor\n"
-" [n]úmerodefaixa, [N]totaldefaixas,\n"
-" [l]duração, [y]ano, [g]énero, [c]omentário,\n"
-" di[r]eitosdeautor, nomede[f]icheiro, [F]nomecompletodocaminho,\n"
-" [T]detalhes [d]iretório, [D]iretóriocomcaminho\n"
+"[a]rtista, [t]ítulo, ál[b]um, [B]anda, [C]ompositor\n"
+"[n]úmerodefaixa, [N]totaldefaixas,\n"
+"[l]duração, [y]ano, [g]énero, [c]omentário,\n"
+"di[r]eitosdeautor, nomede[f]icheiro, [F]nomecompletodocaminho,\n"
+"[T]detalhes [d]iretório, [D]iretóriocomcaminho\n"
"Exemplo: %a - %t [%l]"
#: ../plugins/gtkui/interface.c:1501
@@ -665,7 +666,7 @@ msgstr "_OK"
#: ../plugins/gtkui/interface.c:1753
#: ../plugins/gtkui/deadbeef.glade.h:87
msgid "Output plugin:"
-msgstr "\"Plug-ins\" de som:"
+msgstr "\"Plug-in\" de som:"
#: ../plugins/gtkui/interface.c:1766
#: ../plugins/gtkui/deadbeef.glade.h:86
@@ -680,7 +681,7 @@ msgstr "Som"
#: ../plugins/gtkui/interface.c:1784
#: ../plugins/gtkui/deadbeef.glade.h:10
msgid "Allow dynamic samplerate switching"
-msgstr "Permitir troca dinâmica da taxa de amostragem"
+msgstr "Permitir troca dinâmica da frequência"
#: ../plugins/gtkui/interface.c:1792
#: ../plugins/gtkui/deadbeef.glade.h:110
@@ -734,12 +735,12 @@ msgstr "Ocultar ícone da área de notificação"
#: ../plugins/gtkui/interface.c:1866
#: ../plugins/gtkui/deadbeef.glade.h:138
msgid "Use bold font for currently playing track"
-msgstr "Utilizar letra a negrito para a faixa em reprodução"
+msgstr "Utilizar letra a negrito para a faixa reproduzida"
#: ../plugins/gtkui/interface.c:1870
#: ../plugins/gtkui/deadbeef.glade.h:53
msgid "Hide \"Delete from disk\" context menu item"
-msgstr "Ocultar item do menu de contexto \"Apagar do disco\""
+msgstr "Ocultar item do menu \"Apagar do disco\""
#: ../plugins/gtkui/interface.c:1878
#: ../plugins/gtkui/deadbeef.glade.h:133
@@ -955,12 +956,12 @@ msgstr "Descrição:"
#: ../plugins/gtkui/interface.c:2434
#: ../plugins/gtkui/deadbeef.glade.h:11
msgid "Author(s):"
-msgstr "Autor(s):"
+msgstr "Autor(es):"
#: ../plugins/gtkui/interface.c:2449
#: ../plugins/gtkui/deadbeef.glade.h:28
msgid "Email:"
-msgstr "\"Email\":"
+msgstr "Endereço eletrónico:"
#: ../plugins/gtkui/interface.c:2464
#: ../plugins/gtkui/deadbeef.glade.h:139
@@ -1023,7 +1024,7 @@ msgstr "Faixa n.º"
#: ../plugins/gtkui/mainplaylist.c:308
#: ../plugins/gtkui/search.c:441
msgid "Title / Track Artist"
-msgstr "Título/Artista da faixa"
+msgstr "Título / Artista da faixa"
#: ../plugins/gtkui/mainplaylist.c:309
#: ../plugins/gtkui/search.c:442
@@ -1040,8 +1041,8 @@ msgid ""
"Files will be lost. Proceed?\n"
"(This dialog can be turned off in GTKUI plugin settings)"
msgstr ""
-"Os ficheiros serão perdidos. Continuar?\n"
-"(Esta janela pode ser desligada nas definições do \"GTKUI\")"
+"Os ficheiros serão eliminados. Continuar?\n"
+"(Esta janela pode ser desligada nas definições da GTKUI)"
#: ../plugins/gtkui/plcommon.c:326
#: ../plugins/gtkui/trkproperties.c:56
@@ -1050,11 +1051,11 @@ msgstr "Aviso"
#: ../plugins/gtkui/plcommon.c:402
msgid "Add to playback queue"
-msgstr "Colocar na fila da lista"
+msgstr "Colocar na fila de reprodução"
#: ../plugins/gtkui/plcommon.c:407
msgid "Remove from playback queue"
-msgstr "Remover da fila da lista"
+msgstr "Remover da fila de reprodução"
#: ../plugins/gtkui/plcommon.c:415
msgid "Reload metadata"
@@ -1084,7 +1085,7 @@ msgstr "Agrupar por"
#: ../plugins/gtkui/plcommon.c:870
msgid "None"
-msgstr "Nenhum"
+msgstr "Nada"
#: ../plugins/gtkui/plcommon.c:874
msgid "Artist/Date/Album"
@@ -1113,7 +1114,7 @@ msgstr "Teclas de atalho"
#: ../plugins/gtkui/prefwin.c:401
msgid "Slot"
-msgstr "Ranhura"
+msgstr "Slot"
#: ../plugins/gtkui/prefwin.c:402
msgid "Key combination"
@@ -1152,7 +1153,7 @@ msgstr "Tipo(s) de detalhes"
#: ../plugins/gtkui/trkproperties.c:180
msgid "Embedded Cuesheet"
-msgstr "\"Cuesheet\" incorporada"
+msgstr "Cuesheet incorporada"
#: ../plugins/gtkui/trkproperties.c:180
msgid "Yes"
@@ -1198,7 +1199,7 @@ msgstr " --help ou -h Imprime a ajuda e sai\n"
#: ../main.c:92
#, c-format
msgid " --quit Quit player\n"
-msgstr " --quit Sair do DeadBeeF\n"
+msgstr " --quit Sai do DeadBeeF\n"
#: ../main.c:93
#, c-format
@@ -1208,17 +1209,17 @@ msgstr " --version Imprime info da versão e sai\n"
#: ../main.c:94
#, c-format
msgid " --play Start playback\n"
-msgstr " --play Iniciar reprodução\n"
+msgstr " --play Inicia a reprodução\n"
#: ../main.c:95
#, c-format
msgid " --stop Stop playback\n"
-msgstr " --stop Parar reprodução\n"
+msgstr " --stop Para a reprodução\n"
#: ../main.c:96
#, c-format
msgid " --pause Pause playback\n"
-msgstr " --pause Pausar reprodução\n"
+msgstr " --pause Pausa a reprodução\n"
#: ../main.c:97
#, c-format
@@ -1228,7 +1229,7 @@ msgstr " --next Avança uma música\n"
#: ../main.c:98
#, c-format
msgid " --prev Previous song in playlist\n"
-msgstr " --prev Retrocede uma música\n"
+msgstr " --prev Recua uma música\n"
#: ../main.c:99
#, c-format
@@ -1238,12 +1239,12 @@ msgstr " --random Música aleatória na lista\n"
#: ../main.c:100
#, c-format
msgid " --queue Append file(s) to existing playlist\n"
-msgstr " --queue Acrescenta ficheiro(s) à lista existente\n"
+msgstr " --queue Junta ficheiro(s) à lista existente\n"
#: ../main.c:101
#, c-format
msgid " --nowplaying FMT Print formatted track name to stdout\n"
-msgstr " --nowplaying FMT Imprime o nome da faixa para \"stdout\"\n"
+msgstr " --nowplaying FMT Grava o nome da faixa para stdout\n"
#: ../main.c:102
#, c-format
@@ -1259,7 +1260,7 @@ msgstr ""
#: ../main.c:105
#, c-format
msgid " e.g.: --nowplaying \"%%a - %%t\" should print \"artist - title\"\n"
-msgstr " ex: --nowplaying \"%%a - %%t\" deve imprimir \"artista - título\"\n"
+msgstr " ex: --nowplaying \"%%a - %%t\" deve gravar \"artista - título\"\n"
#: ../playlist.c:377
#: ../playlist.c:2289
@@ -1307,7 +1308,7 @@ msgstr ""
"Título\n"
"Duração\n"
"Faixa\n"
-"Banda/artista do álbum\n"
+"Banda / artista do álbum\n"
"Personalizar"
#: ../plugins/gtkui/deadbeef.glade.h:70
@@ -1327,7 +1328,7 @@ msgstr "Incapaz de encontrar o ficheiro: %s"
#: ../plugins/wildmidi/wildmidiplug.c:162
#, c-format
msgid "wildmidi: freepats config file not found. Please install timidity-freepats package, or specify path to freepats.cfg in the plugin settings."
-msgstr "wildmidi: o ficheiro de configuração \"freepats\" não foi encontrado. Por favor, instale o pacote timidity-freepats ou especifique o caminho para freepats.cfg nas definições do \"plug-in\"."
+msgstr "wildmidi: o ficheiro de configuração freepats não foi encontrado. Por favor, instale o pacote timidity-freepats ou especifique o caminho para freepats.cfg nas definições do \"plug-in\"."
#. this file should list extra translatable strings that are not referenced
#. directly in source code, e.g. scripted plugin configuration strings
@@ -1351,11 +1352,11 @@ msgstr "Libertar dispositivo se parado"
#: ../translation/extra.c:8
#: ../translation/extra.c:43
msgid "Preferred buffer size"
-msgstr "Tamanho do \"buffer\""
+msgstr "Tamanho do buffer"
#: ../translation/extra.c:9
msgid "Preferred period size"
-msgstr "Tamnaho do período"
+msgstr "Tamanho do período"
#. Last.fm plugin
#: ../translation/extra.c:11
@@ -1376,7 +1377,7 @@ msgstr "Senha"
#: ../translation/extra.c:15
msgid "Scrobble URL"
-msgstr "Memorizar URL"
+msgstr "Scrobble URL"
#. Album Artwork plugin
#: ../translation/extra.c:17
@@ -1389,7 +1390,7 @@ msgstr "Obter a partir dos detalhes"
#: ../translation/extra.c:19
msgid "Fetch from local folder"
-msgstr "Obter numa pasta local"
+msgstr "Obter numa pasta local"
#: ../translation/extra.c:20
msgid "Local cover file mask"
@@ -1414,11 +1415,11 @@ msgstr "Preferir CD-Text a CDDB"
#: ../translation/extra.c:26
msgid "CDDB url (e.g. 'freedb.org')"
-msgstr "URL CDDB (ex: \"freedb.org\")"
+msgstr "URL CDDB (ex: freedb.org)"
#: ../translation/extra.c:27
msgid "CDDB port number (e.g. '888')"
-msgstr "Porta CDDB (ex: \"888\")"
+msgstr "Porta CDDB (ex: 888)"
#: ../translation/extra.c:28
msgid "Prefer CDDB protocol over HTTP"
@@ -1453,7 +1454,7 @@ msgstr "Ícone de estado personalizado"
#: ../translation/extra.c:38
msgid "Run gtk_init with --sync (debug mode)"
-msgstr "Execute gtk_init com --sync (modo \"debug\")"
+msgstr "Execute gtk_init com --sync (modo de depuração)"
#. OSD Notify plugin
#: ../translation/extra.c:40
@@ -1467,7 +1468,7 @@ msgstr "Servidor PulseAudio"
#: ../translation/extra.c:44
msgid "Samplerate"
-msgstr "Taxa de amostra"
+msgstr "Frequência"
#. SHN player plugin
#: ../translation/extra.c:46
@@ -1480,7 +1481,7 @@ msgstr "Caminho da tabela de pesquisa absoluta"
#: ../translation/extra.c:48
msgid "Swap audio bytes (toggle if all you hear is static)"
-msgstr "Trocar \"bytes\" áudio (troque se apenas ouvir estático)"
+msgstr "Trocar bytes áudio (apenas se ouvir defeitos)"
#. SID decoder plugin
#: ../translation/extra.c:50
@@ -1498,7 +1499,7 @@ msgstr "Ficheiro de configuração do Timidity++"
#: ../translation/extra.c:56
msgid "Track Title"
-msgstr "Título da faixa"
+msgstr "Título da música"
#: ../translation/extra.c:57
msgid "Performer"
@@ -1510,11 +1511,11 @@ msgstr "Data"
#: ../translation/extra.c:61
msgid "Track Number"
-msgstr "Número da faixa"
+msgstr "Número da música"
#: ../translation/extra.c:62
msgid "Total Tracks"
-msgstr "Total de faixas"
+msgstr "Total de músicas"
#: ../translation/extra.c:63
msgid "Genre"
@@ -1534,7 +1535,7 @@ msgstr "Comentário"
#: ../translation/extra.c:67
msgid "Encoder / Vendor"
-msgstr "Codificador/Fornecedor"
+msgstr "Codificador / Fornecedor"
#: ../translation/extra.c:68
msgid "Copyright"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index fe1b5399..c727cd5f 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: deadbeef\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-05-08 15:08-0300\n"
-"PO-Revision-Date: 2011-05-08 21:32-0300\n"
+"POT-Creation-Date: 2011-05-23 12:53-0300\n"
+"PO-Revision-Date: 2011-05-23 19:55-0300\n"
"Last-Translator: Sérgio Cipolla <secipolla@gmail.com>\n"
"Language-Team: Brazilian Portuguese <ldp-br@bazar2.conectiva.com.br>\n"
"Language: pt_BR\n"
@@ -24,7 +24,7 @@ msgid "Supported sound formats"
msgstr "Formatos de áudio suportados"
#: ../plugins/gtkui/callbacks.c:132
-#: ../plugins/gtkui/gtkui.c:772
+#: ../plugins/gtkui/gtkui.c:776
msgid "Other files (*)"
msgstr "Outros arquivos (*)"
@@ -58,7 +58,9 @@ msgstr "help.pt_BR.txt"
#: ../plugins/gtkui/callbacks.c:723
#: ../plugins/gtkui/interface.c:1155
-#: ../plugins/gtkui/deadbeef.glade.h:47
+#: ../plugins/gtkui/deadbeef.glade.h:48
+#: ../plugins/converter/convgui.c:1240
+#: ../plugins/converter/convgui.c:1248
msgid "Help"
msgstr "Ajuda"
@@ -77,29 +79,28 @@ msgstr "Registro de alterações - DeaDBeeF %s"
msgid "DeaDBeeF Translators"
msgstr "Tradutores do DeaDBeeF"
-#: ../plugins/gtkui/ddbtabstrip.c:684
-#: ../plugins/gtkui/trkproperties.c:599
+#: ../plugins/gtkui/ddbtabstrip.c:689
+#: ../plugins/gtkui/trkproperties.c:618
msgid "Edit playlist"
msgstr "Editar lista de reprodução"
-#: ../plugins/gtkui/ddbtabstrip.c:687
+#: ../plugins/gtkui/ddbtabstrip.c:692
#: ../plugins/gtkui/interface.c:1486
-#: ../plugins/gtkui/interface.c:2861
-#: ../plugins/gtkui/deadbeef.glade.h:134
+#: ../plugins/gtkui/interface.c:2870
+#: ../plugins/gtkui/deadbeef.glade.h:135
#: ../plugins/converter/interface.c:402
-#: ../plugins/converter/converter.glade.h:46
msgid "Title:"
msgstr "Título:"
-#: ../plugins/gtkui/ddbtabstrip.c:742
+#: ../plugins/gtkui/ddbtabstrip.c:748
msgid "Rename Playlist"
msgstr "Renomear lista de reprodução"
-#: ../plugins/gtkui/ddbtabstrip.c:746
+#: ../plugins/gtkui/ddbtabstrip.c:752
msgid "Remove Playlist"
msgstr "Remover lista de reprodução"
-#: ../plugins/gtkui/ddbtabstrip.c:750
+#: ../plugins/gtkui/ddbtabstrip.c:756
msgid "Add New Playlist"
msgstr "Adicionar nova lista de reprodução"
@@ -157,7 +158,6 @@ msgstr "Bandas a zero"
#: ../plugins/gtkui/eq.c:387
#: ../plugins/converter/interface.c:826
-#: ../plugins/converter/converter.glade.h:40
msgid "Presets"
msgstr "Predefinições"
@@ -198,35 +198,35 @@ msgstr "Pausado | "
msgid "%s%s %s| %dHz | %d bit | %s | %d:%02d / %s | %d tracks | %s total playtime"
msgstr "%s%s %s| %dHz | %d bit | %s | %d:%02d / %s | %d faixas | %s tempo total de reprodução"
-#: ../plugins/gtkui/gtkui.c:628
+#: ../plugins/gtkui/gtkui.c:632
msgid "Save Playlist As"
msgstr "Salvar lista como"
-#: ../plugins/gtkui/gtkui.c:639
+#: ../plugins/gtkui/gtkui.c:643
msgid "DeaDBeeF playlist files (*.dbpl)"
msgstr "Arquivos de listas do DeaDBeeF (*.dbpl)"
-#: ../plugins/gtkui/gtkui.c:757
+#: ../plugins/gtkui/gtkui.c:761
msgid "Load Playlist"
msgstr "Carregar lista"
-#: ../plugins/gtkui/gtkui.c:906
-#: ../plugins/gtkui/fileman.c:36
+#: ../plugins/gtkui/gtkui.c:914
+#: ../plugins/gtkui/fileman.c:40
msgid "New Playlist"
msgstr "Nova lista"
-#: ../plugins/gtkui/gtkui.c:909
+#: ../plugins/gtkui/gtkui.c:917
#, c-format
msgid "New Playlist (%d)"
msgstr "Nova lista (%d)"
#: ../plugins/gtkui/interface.c:150
-#: ../plugins/gtkui/deadbeef.glade.h:154
+#: ../plugins/gtkui/deadbeef.glade.h:155
msgid "_File"
msgstr "_Arquivo"
#: ../plugins/gtkui/interface.c:157
-#: ../plugins/gtkui/deadbeef.glade.h:161
+#: ../plugins/gtkui/deadbeef.glade.h:162
msgid "_Open file(s)"
msgstr "_Abrir arquivos(s)"
@@ -241,298 +241,296 @@ msgid "Add folder(s)"
msgstr "Adicionar pasta(s)"
#: ../plugins/gtkui/interface.c:189
-#: ../plugins/gtkui/interface.c:2961
+#: ../plugins/gtkui/interface.c:2970
#: ../plugins/gtkui/deadbeef.glade.h:9
msgid "Add location"
msgstr "Adicionar local"
#: ../plugins/gtkui/interface.c:198
-#: ../plugins/gtkui/deadbeef.glade.h:78
+#: ../plugins/gtkui/deadbeef.glade.h:79
msgid "New playlist"
msgstr "Nova lista de reprodução"
#: ../plugins/gtkui/interface.c:205
-#: ../plugins/gtkui/deadbeef.glade.h:70
+#: ../plugins/gtkui/deadbeef.glade.h:71
msgid "Load playlist"
msgstr "Carregar lista de reprodução"
#: ../plugins/gtkui/interface.c:209
-#: ../plugins/gtkui/deadbeef.glade.h:108
+#: ../plugins/gtkui/deadbeef.glade.h:109
msgid "Save playlist"
msgstr "Salvar lista de reprodução"
#: ../plugins/gtkui/interface.c:218
-#: ../plugins/gtkui/deadbeef.glade.h:163
+#: ../plugins/gtkui/deadbeef.glade.h:164
msgid "_Quit"
msgstr "_Sair"
#: ../plugins/gtkui/interface.c:229
-#: ../plugins/gtkui/deadbeef.glade.h:153
+#: ../plugins/gtkui/deadbeef.glade.h:154
msgid "_Edit"
msgstr "_Editar"
#: ../plugins/gtkui/interface.c:236
-#: ../plugins/gtkui/deadbeef.glade.h:151
+#: ../plugins/gtkui/deadbeef.glade.h:152
msgid "_Clear"
msgstr "_Limpar"
#: ../plugins/gtkui/interface.c:244
-#: ../plugins/gtkui/deadbeef.glade.h:113
+#: ../plugins/gtkui/deadbeef.glade.h:114
msgid "Select all"
msgstr "Selecionar tudo"
#: ../plugins/gtkui/interface.c:251
-#: ../plugins/gtkui/deadbeef.glade.h:31
+#: ../plugins/gtkui/deadbeef.glade.h:32
msgid "Deselect all"
msgstr "Desmarcar tudo"
#: ../plugins/gtkui/interface.c:258
-#: ../plugins/gtkui/deadbeef.glade.h:53
+#: ../plugins/gtkui/deadbeef.glade.h:54
msgid "Invert selection"
msgstr "Inverter seleção"
#: ../plugins/gtkui/interface.c:262
-#: ../plugins/gtkui/deadbeef.glade.h:116
+#: ../plugins/gtkui/deadbeef.glade.h:117
msgid "Selection"
msgstr "Seleção"
#: ../plugins/gtkui/interface.c:269
-#: ../plugins/gtkui/plcommon.c:447
+#: ../plugins/gtkui/plcommon.c:453
#: ../plugins/gtkui/prefwin.c:323
-#: ../plugins/gtkui/deadbeef.glade.h:103
+#: ../plugins/gtkui/deadbeef.glade.h:104
#: ../plugins/converter/interface.c:653
-#: ../plugins/converter/converter.glade.h:43
msgid "Remove"
msgstr "Remover"
#: ../plugins/gtkui/interface.c:277
-#: ../plugins/gtkui/deadbeef.glade.h:23
+#: ../plugins/gtkui/deadbeef.glade.h:24
msgid "Crop"
msgstr "Cortar"
#: ../plugins/gtkui/interface.c:281
-#: ../plugins/gtkui/deadbeef.glade.h:155
+#: ../plugins/gtkui/deadbeef.glade.h:156
msgid "_Find"
msgstr "_Procurar"
#: ../plugins/gtkui/interface.c:288
-#: ../plugins/gtkui/deadbeef.glade.h:120
+#: ../plugins/gtkui/deadbeef.glade.h:121
msgid "Sort By"
msgstr "Ordenar por"
#: ../plugins/gtkui/interface.c:295
#: ../plugins/gtkui/interface.c:1516
-#: ../plugins/gtkui/mainplaylist.c:308
-#: ../plugins/gtkui/prefwin.c:620
-#: ../plugins/gtkui/search.c:385
-#: ../plugins/gtkui/deadbeef.glade.h:133
-#: ../plugins/converter/convgui.c:782
-#: ../plugins/converter/convgui.c:1203
+#: ../plugins/gtkui/mainplaylist.c:315
+#: ../plugins/gtkui/prefwin.c:623
+#: ../plugins/gtkui/search.c:393
+#: ../plugins/gtkui/deadbeef.glade.h:134
+#: ../plugins/converter/convgui.c:790
+#: ../plugins/converter/convgui.c:1211
#: ../plugins/converter/interface.c:630
-#: ../plugins/converter/converter.glade.h:45
msgid "Title"
msgstr "Título"
#: ../plugins/gtkui/interface.c:299
-#: ../plugins/gtkui/deadbeef.glade.h:138
+#: ../plugins/gtkui/deadbeef.glade.h:139
msgid "Track number"
msgstr "Número da faixa"
#: ../plugins/gtkui/interface.c:303
#: ../plugins/gtkui/interface.c:1515
-#: ../plugins/gtkui/interface.c:1864
+#: ../plugins/gtkui/interface.c:1869
#: ../plugins/gtkui/deadbeef.glade.h:10
-#: ../translation/extra.c:68
+#: ../translation/extra.c:69
msgid "Album"
msgstr "Álbum"
#. Track properties dialog
#: ../plugins/gtkui/interface.c:307
#: ../plugins/gtkui/interface.c:1514
-#: ../plugins/gtkui/plcommon.c:992
-#: ../plugins/gtkui/deadbeef.glade.h:12
-#: ../translation/extra.c:64
+#: ../plugins/gtkui/plcommon.c:998
+#: ../plugins/gtkui/deadbeef.glade.h:13
+#: ../translation/extra.c:65
msgid "Artist"
msgstr "Artista"
#: ../plugins/gtkui/interface.c:311
-#: ../plugins/gtkui/deadbeef.glade.h:30
-#: ../translation/extra.c:69
+#: ../plugins/gtkui/deadbeef.glade.h:31
+#: ../translation/extra.c:70
msgid "Date"
msgstr "Data"
#: ../plugins/gtkui/interface.c:315
#: ../plugins/gtkui/interface.c:1520
-#: ../plugins/gtkui/plcommon.c:996
-#: ../plugins/gtkui/deadbeef.glade.h:26
+#: ../plugins/gtkui/plcommon.c:1002
+#: ../plugins/gtkui/deadbeef.glade.h:27
msgid "Custom"
msgstr "Personalizar"
#: ../plugins/gtkui/interface.c:324
-#: ../plugins/gtkui/interface.c:1797
-#: ../plugins/gtkui/deadbeef.glade.h:93
+#: ../plugins/gtkui/interface.c:1798
+#: ../plugins/gtkui/deadbeef.glade.h:94
msgid "Preferences"
msgstr "Preferências"
#: ../plugins/gtkui/interface.c:328
-#: ../plugins/gtkui/deadbeef.glade.h:165
+#: ../plugins/gtkui/deadbeef.glade.h:166
msgid "_View"
msgstr "_Ver"
#: ../plugins/gtkui/interface.c:335
-#: ../plugins/gtkui/deadbeef.glade.h:123
+#: ../plugins/gtkui/deadbeef.glade.h:124
msgid "Status bar"
msgstr "Barra de status"
#: ../plugins/gtkui/interface.c:339
-#: ../plugins/gtkui/deadbeef.glade.h:20
+#: ../plugins/gtkui/deadbeef.glade.h:21
msgid "Column headers"
msgstr "Cabeçalhos das colunas"
#: ../plugins/gtkui/interface.c:343
-#: ../plugins/gtkui/deadbeef.glade.h:130
+#: ../plugins/gtkui/deadbeef.glade.h:131
msgid "Tabs"
msgstr "Abas"
#: ../plugins/gtkui/interface.c:347
-#: ../plugins/gtkui/deadbeef.glade.h:39
+#: ../plugins/gtkui/deadbeef.glade.h:40
msgid "Equalizer"
msgstr "Equalizador"
#: ../plugins/gtkui/interface.c:351
-#: ../plugins/gtkui/deadbeef.glade.h:162
+#: ../plugins/gtkui/deadbeef.glade.h:163
msgid "_Playback"
msgstr "_Reprodução"
#: ../plugins/gtkui/interface.c:358
-#: ../plugins/gtkui/interface.c:3237
-#: ../plugins/gtkui/deadbeef.glade.h:81
+#: ../plugins/gtkui/interface.c:3246
+#: ../plugins/gtkui/deadbeef.glade.h:82
msgid "Order"
msgstr "Ordem"
#: ../plugins/gtkui/interface.c:365
-#: ../plugins/gtkui/deadbeef.glade.h:69
+#: ../plugins/gtkui/deadbeef.glade.h:70
msgid "Linear"
msgstr "Linear"
#: ../plugins/gtkui/interface.c:370
-#: ../plugins/gtkui/deadbeef.glade.h:119
+#: ../plugins/gtkui/deadbeef.glade.h:120
msgid "Shuffle tracks"
msgstr "Embaralhar faixas"
#: ../plugins/gtkui/interface.c:375
-#: ../plugins/gtkui/deadbeef.glade.h:118
+#: ../plugins/gtkui/deadbeef.glade.h:119
msgid "Shuffle albums"
msgstr "Embaralhar álbuns"
#: ../plugins/gtkui/interface.c:380
-#: ../plugins/gtkui/deadbeef.glade.h:102
+#: ../plugins/gtkui/deadbeef.glade.h:103
msgid "Random"
msgstr "Aleatória"
#: ../plugins/gtkui/interface.c:386
-#: ../plugins/gtkui/deadbeef.glade.h:73
+#: ../plugins/gtkui/deadbeef.glade.h:74
msgid "Looping"
msgstr "Repetição"
#: ../plugins/gtkui/interface.c:393
-#: ../plugins/gtkui/deadbeef.glade.h:71
+#: ../plugins/gtkui/deadbeef.glade.h:72
msgid "Loop All"
msgstr "Repetir tudo"
#: ../plugins/gtkui/interface.c:398
-#: ../plugins/gtkui/deadbeef.glade.h:72
+#: ../plugins/gtkui/deadbeef.glade.h:73
msgid "Loop Single Song"
msgstr "Repetir a música"
#: ../plugins/gtkui/interface.c:403
-#: ../plugins/gtkui/deadbeef.glade.h:35
+#: ../plugins/gtkui/deadbeef.glade.h:36
msgid "Don't Loop"
msgstr "Não repetir"
#: ../plugins/gtkui/interface.c:409
-#: ../plugins/gtkui/deadbeef.glade.h:109
+#: ../plugins/gtkui/deadbeef.glade.h:110
msgid "Scroll follows playback"
msgstr "Rolagem segue a reprodução"
#: ../plugins/gtkui/interface.c:414
-#: ../plugins/gtkui/deadbeef.glade.h:25
+#: ../plugins/gtkui/deadbeef.glade.h:26
msgid "Cursor follows playback"
msgstr "Cursor segue a reprodução"
#: ../plugins/gtkui/interface.c:418
-#: ../plugins/gtkui/deadbeef.glade.h:125
+#: ../plugins/gtkui/deadbeef.glade.h:126
msgid "Stop after current"
msgstr "Parar após a atual"
#: ../plugins/gtkui/interface.c:430
-#: ../plugins/gtkui/deadbeef.glade.h:65
+#: ../plugins/gtkui/deadbeef.glade.h:66
msgid "Jump to current track"
msgstr "Ir para a faixa atual"
#: ../plugins/gtkui/interface.c:437
#: ../plugins/gtkui/interface.c:444
-#: ../plugins/gtkui/deadbeef.glade.h:157
+#: ../plugins/gtkui/deadbeef.glade.h:158
msgid "_Help"
msgstr "Aj_uda"
#: ../plugins/gtkui/interface.c:452
-#: ../plugins/gtkui/deadbeef.glade.h:150
+#: ../plugins/gtkui/deadbeef.glade.h:151
msgid "_ChangeLog"
msgstr "Registro de _alterações"
#: ../plugins/gtkui/interface.c:461
-#: ../plugins/gtkui/deadbeef.glade.h:156
+#: ../plugins/gtkui/deadbeef.glade.h:157
msgid "_GPLv2"
msgstr "_GPLv2"
#: ../plugins/gtkui/interface.c:465
-#: ../plugins/gtkui/deadbeef.glade.h:158
+#: ../plugins/gtkui/deadbeef.glade.h:159
msgid "_LGPLv2.1"
msgstr "_LGPLv2.1"
#: ../plugins/gtkui/interface.c:474
-#: ../plugins/gtkui/deadbeef.glade.h:147
+#: ../plugins/gtkui/deadbeef.glade.h:148
msgid "_About"
msgstr "_Sobre"
#: ../plugins/gtkui/interface.c:482
-#: ../plugins/gtkui/deadbeef.glade.h:164
+#: ../plugins/gtkui/deadbeef.glade.h:165
msgid "_Translators"
msgstr "_Tradutores"
#: ../plugins/gtkui/interface.c:898
-#: ../plugins/gtkui/deadbeef.glade.h:110
+#: ../plugins/gtkui/deadbeef.glade.h:111
msgid "Search"
msgstr "Pesquisar"
#: ../plugins/gtkui/interface.c:973
-#: ../plugins/gtkui/deadbeef.glade.h:124
+#: ../plugins/gtkui/deadbeef.glade.h:125
msgid "Stop"
msgstr "Parar"
#: ../plugins/gtkui/interface.c:981
-#: ../plugins/gtkui/deadbeef.glade.h:87
+#: ../plugins/gtkui/deadbeef.glade.h:88
msgid "Play"
msgstr "Reproduzir"
#: ../plugins/gtkui/interface.c:989
-#: ../plugins/gtkui/deadbeef.glade.h:86
+#: ../plugins/gtkui/deadbeef.glade.h:87
msgid "Pause"
msgstr "Pausar"
#: ../plugins/gtkui/interface.c:997
-#: ../plugins/gtkui/deadbeef.glade.h:94
+#: ../plugins/gtkui/deadbeef.glade.h:95
msgid "Previous"
msgstr "Anterior "
#: ../plugins/gtkui/interface.c:1005
-#: ../plugins/gtkui/deadbeef.glade.h:79
+#: ../plugins/gtkui/deadbeef.glade.h:80
msgid "Next"
msgstr "Próxima"
#: ../plugins/gtkui/interface.c:1013
-#: ../plugins/gtkui/deadbeef.glade.h:88
+#: ../plugins/gtkui/deadbeef.glade.h:89
msgid "Play Random"
msgstr "Reprodução aleatória"
@@ -542,49 +540,49 @@ msgid "About"
msgstr "Sobre"
#: ../plugins/gtkui/interface.c:1035
-#: ../plugins/gtkui/deadbeef.glade.h:101
+#: ../plugins/gtkui/deadbeef.glade.h:102
msgid "Quit"
msgstr "Sair"
#: ../plugins/gtkui/interface.c:1225
-#: ../plugins/gtkui/deadbeef.glade.h:137
+#: ../plugins/gtkui/deadbeef.glade.h:138
msgid "Track Properties"
msgstr "Propriedades da faixa"
#: ../plugins/gtkui/interface.c:1270
-#: ../plugins/gtkui/deadbeef.glade.h:117
+#: ../plugins/gtkui/deadbeef.glade.h:118
msgid "Settings"
msgstr "Configuração"
#: ../plugins/gtkui/interface.c:1296
-#: ../plugins/gtkui/deadbeef.glade.h:148
+#: ../plugins/gtkui/deadbeef.glade.h:149
msgid "_Apply"
msgstr "_Aplicar"
#: ../plugins/gtkui/interface.c:1317
#: ../plugins/gtkui/interface.c:1363
-#: ../plugins/gtkui/deadbeef.glade.h:152
+#: ../plugins/gtkui/deadbeef.glade.h:153
msgid "_Close"
msgstr "_Fechar"
#: ../plugins/gtkui/interface.c:1321
-#: ../plugins/gtkui/deadbeef.glade.h:74
+#: ../plugins/gtkui/deadbeef.glade.h:75
msgid "Metadata"
msgstr "Metadados"
#: ../plugins/gtkui/interface.c:1367
-#: ../plugins/gtkui/plcommon.c:597
-#: ../plugins/gtkui/deadbeef.glade.h:95
+#: ../plugins/gtkui/plcommon.c:603
+#: ../plugins/gtkui/deadbeef.glade.h:96
msgid "Properties"
msgstr "Propriedades"
#: ../plugins/gtkui/interface.c:1494
-#: ../plugins/gtkui/deadbeef.glade.h:38
+#: ../plugins/gtkui/deadbeef.glade.h:39
msgid "Enter new column title here"
msgstr "Digite o novo título da coluna aqui"
#: ../plugins/gtkui/interface.c:1502
-#: ../plugins/gtkui/deadbeef.glade.h:139
+#: ../plugins/gtkui/deadbeef.glade.h:140
msgid "Type:"
msgstr "Tipo:"
@@ -594,7 +592,7 @@ msgstr "Índice de itens"
#. create default set of columns
#: ../plugins/gtkui/interface.c:1511
-#: ../plugins/gtkui/mainplaylist.c:305
+#: ../plugins/gtkui/mainplaylist.c:312
msgid "Playing"
msgstr "Em reprodução"
@@ -607,24 +605,24 @@ msgid "Artist - Album"
msgstr "Artista - Álbum"
#: ../plugins/gtkui/interface.c:1517
-#: ../plugins/gtkui/mainplaylist.c:309
-#: ../plugins/gtkui/search.c:386
+#: ../plugins/gtkui/mainplaylist.c:316
+#: ../plugins/gtkui/search.c:394
msgid "Duration"
msgstr "Duração"
#: ../plugins/gtkui/interface.c:1518
-#: ../translation/extra.c:70
+#: ../translation/extra.c:71
msgid "Track Number"
msgstr "Número da faixa"
#: ../plugins/gtkui/interface.c:1519
-#: ../translation/extra.c:67
+#: ../translation/extra.c:68
msgid "Band / Album Artist"
msgstr "Banda / Artista do álbum"
#: ../plugins/gtkui/interface.c:1526
-#: ../plugins/gtkui/interface.c:3089
-#: ../plugins/gtkui/deadbeef.glade.h:43
+#: ../plugins/gtkui/interface.c:3098
+#: ../plugins/gtkui/deadbeef.glade.h:44
msgid "Format:"
msgstr "Formato:"
@@ -642,434 +640,436 @@ msgid "Right"
msgstr "Direita"
#: ../plugins/gtkui/interface.c:1583
-#: ../plugins/gtkui/interface.c:2892
-#: ../plugins/gtkui/interface.c:3004
-#: ../plugins/gtkui/interface.c:3130
-#: ../plugins/gtkui/deadbeef.glade.h:149
+#: ../plugins/gtkui/interface.c:2901
+#: ../plugins/gtkui/interface.c:3013
+#: ../plugins/gtkui/interface.c:3139
+#: ../plugins/gtkui/deadbeef.glade.h:150
msgid "_Cancel"
msgstr "_Cancelar"
#: ../plugins/gtkui/interface.c:1604
-#: ../plugins/gtkui/interface.c:2913
-#: ../plugins/gtkui/interface.c:3025
-#: ../plugins/gtkui/interface.c:3151
-#: ../plugins/gtkui/deadbeef.glade.h:160
+#: ../plugins/gtkui/interface.c:2922
+#: ../plugins/gtkui/interface.c:3034
+#: ../plugins/gtkui/interface.c:3160
+#: ../plugins/gtkui/deadbeef.glade.h:161
msgid "_OK"
msgstr "_OK"
-#: ../plugins/gtkui/interface.c:1818
-#: ../plugins/gtkui/deadbeef.glade.h:83
+#: ../plugins/gtkui/interface.c:1819
+#: ../plugins/gtkui/deadbeef.glade.h:84
msgid "Output plugin:"
msgstr "Plugin de saída:"
-#: ../plugins/gtkui/interface.c:1831
-#: ../plugins/gtkui/deadbeef.glade.h:82
+#: ../plugins/gtkui/interface.c:1832
+#: ../plugins/gtkui/deadbeef.glade.h:83
msgid "Output device:"
msgstr "Dispositivo de saída:"
-#: ../plugins/gtkui/interface.c:1840
-#: ../plugins/gtkui/deadbeef.glade.h:122
+#: ../plugins/gtkui/interface.c:1841
+#: ../plugins/gtkui/deadbeef.glade.h:12
+msgid "Always convert 8 bit audio to 16 bit"
+msgstr "Sempre converter áudio de 8 bits para 16 bits"
+
+#: ../plugins/gtkui/interface.c:1845
+#: ../plugins/gtkui/deadbeef.glade.h:123
msgid "Sound"
msgstr "Som"
-#: ../plugins/gtkui/interface.c:1853
-#: ../plugins/gtkui/deadbeef.glade.h:104
+#: ../plugins/gtkui/interface.c:1858
+#: ../plugins/gtkui/deadbeef.glade.h:105
msgid "Replaygain mode:"
msgstr "Modo de normalização:"
-#: ../plugins/gtkui/interface.c:1862
+#: ../plugins/gtkui/interface.c:1867
msgid "Disable"
-msgstr "Desabilitar"
+msgstr "Desabilitado"
-#: ../plugins/gtkui/interface.c:1863
+#: ../plugins/gtkui/interface.c:1868
msgid "Track"
msgstr "Faixa"
-#: ../plugins/gtkui/interface.c:1866
-#: ../plugins/gtkui/deadbeef.glade.h:105
+#: ../plugins/gtkui/interface.c:1871
+#: ../plugins/gtkui/deadbeef.glade.h:106
msgid "Replaygain peak scale"
msgstr "Ajustar a normalização com o nível de pico"
-#: ../plugins/gtkui/interface.c:1874
-#: ../plugins/gtkui/deadbeef.glade.h:106
+#: ../plugins/gtkui/interface.c:1879
+#: ../plugins/gtkui/deadbeef.glade.h:107
msgid "Replaygain preamp:"
msgstr "Pré-amplificação da normalização:"
-#: ../plugins/gtkui/interface.c:1878
+#: ../plugins/gtkui/interface.c:1883
#: ../plugins/gtkui/deadbeef.glade.h:2
msgid "-12 dB"
msgstr "-12 dB"
-#: ../plugins/gtkui/interface.c:1888
+#: ../plugins/gtkui/interface.c:1893
#: ../plugins/gtkui/deadbeef.glade.h:1
msgid "+12 dB"
msgstr "+12 dB"
-#: ../plugins/gtkui/interface.c:1896
+#: ../plugins/gtkui/interface.c:1901
#: ../plugins/gtkui/deadbeef.glade.h:7
msgid "Add files from command line (or file manager) to this playlist:"
-msgstr "Adicionar arquivos pela linha de comando (ou gerenciador de arquivos) à esta lista de reprodução:"
+msgstr "Adicionar arquivos pela linha de comando (ou gerenciador de arquivos) a esta lista de reprodução:"
-#: ../plugins/gtkui/interface.c:1905
-#: ../plugins/gtkui/deadbeef.glade.h:107
+#: ../plugins/gtkui/interface.c:1910
+#: ../plugins/gtkui/deadbeef.glade.h:108
msgid "Resume previous session on startup"
msgstr "Continuar a sessão anterior ao iniciar"
-#: ../plugins/gtkui/interface.c:1909
-#: ../plugins/gtkui/deadbeef.glade.h:36
+#: ../plugins/gtkui/interface.c:1914
+#: ../plugins/gtkui/deadbeef.glade.h:37
msgid "Don't add from archives when adding folders"
msgstr "Não adicionar de arquivos ao adicionar pastas"
-#: ../plugins/gtkui/interface.c:1913
-#: ../plugins/gtkui/deadbeef.glade.h:89
+#: ../plugins/gtkui/interface.c:1918
+#: ../plugins/gtkui/deadbeef.glade.h:90
msgid "Playback"
msgstr "Reprodução"
-#: ../plugins/gtkui/interface.c:1934
-#: ../plugins/gtkui/interface.c:2466
-#: ../plugins/gtkui/deadbeef.glade.h:21
+#: ../plugins/gtkui/interface.c:1939
+#: ../plugins/gtkui/interface.c:2471
+#: ../plugins/gtkui/deadbeef.glade.h:22
#: ../plugins/converter/interface.c:657
-#: ../plugins/converter/converter.glade.h:8
msgid "Configure"
msgstr "Configurar"
-#: ../plugins/gtkui/interface.c:1969
-#: ../plugins/gtkui/deadbeef.glade.h:28
+#: ../plugins/gtkui/interface.c:1974
+#: ../plugins/gtkui/deadbeef.glade.h:29
msgid "DSP Chain Preset"
msgstr "Predefinição de corrente do DSP"
-#: ../plugins/gtkui/interface.c:1981
-#: ../plugins/gtkui/deadbeef.glade.h:159
+#: ../plugins/gtkui/interface.c:1986
+#: ../plugins/gtkui/deadbeef.glade.h:160
msgid "_Load"
msgstr "_Carregar"
-#: ../plugins/gtkui/interface.c:1985
-#: ../plugins/gtkui/deadbeef.glade.h:27
+#: ../plugins/gtkui/interface.c:1990
+#: ../plugins/gtkui/deadbeef.glade.h:28
msgid "DSP"
msgstr "DSP"
-#: ../plugins/gtkui/interface.c:1994
-#: ../plugins/gtkui/deadbeef.glade.h:18
+#: ../plugins/gtkui/interface.c:1999
+#: ../plugins/gtkui/deadbeef.glade.h:19
msgid "Close minimizes to tray"
msgstr "Fechar minimiza para a área de notificação"
-#: ../plugins/gtkui/interface.c:1998
-#: ../plugins/gtkui/deadbeef.glade.h:76
+#: ../plugins/gtkui/interface.c:2003
+#: ../plugins/gtkui/deadbeef.glade.h:77
msgid "Middle mouse button closes playlist"
msgstr "Botão do meio do mouse fecha a lista"
-#: ../plugins/gtkui/interface.c:2002
-#: ../plugins/gtkui/deadbeef.glade.h:49
+#: ../plugins/gtkui/interface.c:2007
+#: ../plugins/gtkui/deadbeef.glade.h:50
msgid "Hide system tray icon"
msgstr "Ocultar o ícone na área de notificação"
-#: ../plugins/gtkui/interface.c:2006
-#: ../plugins/gtkui/deadbeef.glade.h:141
+#: ../plugins/gtkui/interface.c:2011
+#: ../plugins/gtkui/deadbeef.glade.h:142
msgid "Use bold font for currently playing track"
msgstr "Usar fonte em negrito para a faixa em reprodução"
-#: ../plugins/gtkui/interface.c:2010
-#: ../plugins/gtkui/deadbeef.glade.h:48
+#: ../plugins/gtkui/interface.c:2015
+#: ../plugins/gtkui/deadbeef.glade.h:49
msgid "Hide \"Delete from disk\" context menu item"
msgstr "Ocultar item \"Excluir do disco\" do menu de contexto"
-#: ../plugins/gtkui/interface.c:2014
-#: ../plugins/gtkui/deadbeef.glade.h:15
+#: ../plugins/gtkui/interface.c:2019
+#: ../plugins/gtkui/deadbeef.glade.h:16
msgid "Auto-name playlists when adding a single folder"
msgstr "Autonomear listas de reprodução ao adicionar uma única pasta"
-#: ../plugins/gtkui/interface.c:2022
-#: ../plugins/gtkui/deadbeef.glade.h:52
+#: ../plugins/gtkui/interface.c:2027
+#: ../plugins/gtkui/deadbeef.glade.h:53
msgid "Interface refresh rate (times per second):"
msgstr "Taxa de atualização da interface (vezes por segundo):"
-#: ../plugins/gtkui/interface.c:2036
-#: ../plugins/gtkui/deadbeef.glade.h:135
+#: ../plugins/gtkui/interface.c:2041
+#: ../plugins/gtkui/deadbeef.glade.h:136
msgid "Titlebar text while playing:"
msgstr "Texto na barra de título durante a reprodução:"
-#: ../plugins/gtkui/interface.c:2050
-#: ../plugins/gtkui/deadbeef.glade.h:136
+#: ../plugins/gtkui/interface.c:2055
+#: ../plugins/gtkui/deadbeef.glade.h:137
msgid "Titlebar text while stopped:"
msgstr "Texto na barra de título quando parado:"
-#: ../plugins/gtkui/interface.c:2064
-#: ../plugins/gtkui/deadbeef.glade.h:45
+#: ../plugins/gtkui/interface.c:2069
+#: ../plugins/gtkui/deadbeef.glade.h:46
msgid "GUI Plugin (changing requires restart):"
msgstr "Plugin da interface gráfica (mudança requer reinício):"
-#: ../plugins/gtkui/interface.c:2072
-#: ../plugins/gtkui/deadbeef.glade.h:44
+#: ../plugins/gtkui/interface.c:2077
+#: ../plugins/gtkui/deadbeef.glade.h:45
msgid "GUI"
msgstr "Interface do usuário"
-#: ../plugins/gtkui/interface.c:2087
-#: ../plugins/gtkui/interface.c:2131
-#: ../plugins/gtkui/deadbeef.glade.h:84
+#: ../plugins/gtkui/interface.c:2092
+#: ../plugins/gtkui/interface.c:2136
+#: ../plugins/gtkui/deadbeef.glade.h:85
msgid "Override"
msgstr "Sobrepujar"
-#: ../plugins/gtkui/interface.c:2096
-#: ../plugins/gtkui/deadbeef.glade.h:41
+#: ../plugins/gtkui/interface.c:2101
+#: ../plugins/gtkui/deadbeef.glade.h:42
msgid "Foreground"
msgstr "Primeiro plano"
-#: ../plugins/gtkui/interface.c:2103
-#: ../plugins/gtkui/deadbeef.glade.h:16
+#: ../plugins/gtkui/interface.c:2108
+#: ../plugins/gtkui/deadbeef.glade.h:17
msgid "Background"
msgstr "Segundo plano"
-#: ../plugins/gtkui/interface.c:2122
-#: ../plugins/gtkui/deadbeef.glade.h:111
+#: ../plugins/gtkui/interface.c:2127
+#: ../plugins/gtkui/deadbeef.glade.h:112
msgid "Seekbar/Volumebar colors"
msgstr "Cores das barras volume/pesquisa"
-#: ../plugins/gtkui/interface.c:2140
-#: ../plugins/gtkui/deadbeef.glade.h:75
+#: ../plugins/gtkui/interface.c:2145
+#: ../plugins/gtkui/deadbeef.glade.h:76
msgid "Middle"
msgstr "Meio"
-#: ../plugins/gtkui/interface.c:2147
-#: ../plugins/gtkui/deadbeef.glade.h:68
+#: ../plugins/gtkui/interface.c:2152
+#: ../plugins/gtkui/deadbeef.glade.h:69
msgid "Light"
msgstr "Claro"
-#: ../plugins/gtkui/interface.c:2154
-#: ../plugins/gtkui/deadbeef.glade.h:29
+#: ../plugins/gtkui/interface.c:2159
+#: ../plugins/gtkui/deadbeef.glade.h:30
msgid "Dark"
msgstr "Escuro"
-#: ../plugins/gtkui/interface.c:2185
-#: ../plugins/gtkui/deadbeef.glade.h:17
+#: ../plugins/gtkui/interface.c:2190
+#: ../plugins/gtkui/deadbeef.glade.h:18
msgid "Base"
msgstr "Base"
-#: ../plugins/gtkui/interface.c:2192
-#: ../plugins/gtkui/interface.c:2249
-#: ../plugins/gtkui/deadbeef.glade.h:132
+#: ../plugins/gtkui/interface.c:2197
+#: ../plugins/gtkui/interface.c:2254
+#: ../plugins/gtkui/deadbeef.glade.h:133
msgid "Text"
msgstr "Texto"
-#: ../plugins/gtkui/interface.c:2205
-#: ../plugins/gtkui/deadbeef.glade.h:129
+#: ../plugins/gtkui/interface.c:2210
+#: ../plugins/gtkui/deadbeef.glade.h:130
msgid "Tab strip colors"
msgstr "Cores do separador"
-#: ../plugins/gtkui/interface.c:2214
-#: ../plugins/gtkui/deadbeef.glade.h:85
+#: ../plugins/gtkui/interface.c:2219
+#: ../plugins/gtkui/deadbeef.glade.h:86
msgid "Override (looses GTK treeview theming, but speeds up rendering)"
msgstr "Sobrepujar (perde o tema GTK na visão em árvore, mas acelera a renderização)"
-#: ../plugins/gtkui/interface.c:2223
-#: ../plugins/gtkui/deadbeef.glade.h:40
+#: ../plugins/gtkui/interface.c:2228
+#: ../plugins/gtkui/deadbeef.glade.h:41
msgid "Even row"
msgstr "Linha par"
-#: ../plugins/gtkui/interface.c:2230
-#: ../plugins/gtkui/deadbeef.glade.h:80
+#: ../plugins/gtkui/interface.c:2235
+#: ../plugins/gtkui/deadbeef.glade.h:81
msgid "Odd row"
msgstr "Linha ímpar"
-#: ../plugins/gtkui/interface.c:2256
-#: ../plugins/gtkui/deadbeef.glade.h:114
+#: ../plugins/gtkui/interface.c:2261
+#: ../plugins/gtkui/deadbeef.glade.h:115
msgid "Selected row"
msgstr "Linha selecionada"
-#: ../plugins/gtkui/interface.c:2275
-#: ../plugins/gtkui/deadbeef.glade.h:115
+#: ../plugins/gtkui/interface.c:2280
+#: ../plugins/gtkui/deadbeef.glade.h:116
msgid "Selected text"
msgstr "Texto selecionado"
-#: ../plugins/gtkui/interface.c:2288
-#: ../plugins/gtkui/deadbeef.glade.h:24
+#: ../plugins/gtkui/interface.c:2293
+#: ../plugins/gtkui/deadbeef.glade.h:25
msgid "Cursor"
msgstr "Cursor"
-#: ../plugins/gtkui/interface.c:2301
-#: ../plugins/gtkui/deadbeef.glade.h:90
+#: ../plugins/gtkui/interface.c:2306
+#: ../plugins/gtkui/deadbeef.glade.h:91
msgid "Playlist colors"
msgstr "Cores da lista de reprodução"
-#: ../plugins/gtkui/interface.c:2305
-#: ../plugins/gtkui/deadbeef.glade.h:19
+#: ../plugins/gtkui/interface.c:2310
+#: ../plugins/gtkui/deadbeef.glade.h:20
msgid "Colors"
msgstr "Cores"
-#: ../plugins/gtkui/interface.c:2314
-#: ../plugins/gtkui/deadbeef.glade.h:37
+#: ../plugins/gtkui/interface.c:2319
+#: ../plugins/gtkui/deadbeef.glade.h:38
msgid "Enable Proxy Server"
msgstr "Habilitar servidor proxy"
-#: ../plugins/gtkui/interface.c:2322
-#: ../plugins/gtkui/deadbeef.glade.h:97
+#: ../plugins/gtkui/interface.c:2327
+#: ../plugins/gtkui/deadbeef.glade.h:98
msgid "Proxy Server Address:"
msgstr "Endereço do servidor proxy:"
-#: ../plugins/gtkui/interface.c:2336
-#: ../plugins/gtkui/deadbeef.glade.h:98
+#: ../plugins/gtkui/interface.c:2341
+#: ../plugins/gtkui/deadbeef.glade.h:99
msgid "Proxy Server Port:"
msgstr "Porta do servidor proxy:"
-#: ../plugins/gtkui/interface.c:2350
-#: ../plugins/gtkui/deadbeef.glade.h:99
+#: ../plugins/gtkui/interface.c:2355
+#: ../plugins/gtkui/deadbeef.glade.h:100
msgid "Proxy Type:"
msgstr "Tipo de proxy:"
-#: ../plugins/gtkui/interface.c:2369
-#: ../plugins/gtkui/deadbeef.glade.h:100
+#: ../plugins/gtkui/interface.c:2374
+#: ../plugins/gtkui/deadbeef.glade.h:101
msgid "Proxy Username:"
msgstr "Nome de usuário do proxy:"
-#: ../plugins/gtkui/interface.c:2382
-#: ../plugins/gtkui/deadbeef.glade.h:96
+#: ../plugins/gtkui/interface.c:2387
+#: ../plugins/gtkui/deadbeef.glade.h:97
msgid "Proxy Password:"
msgstr "Senha do proxy:"
-#: ../plugins/gtkui/interface.c:2392
-#: ../plugins/gtkui/deadbeef.glade.h:77
+#: ../plugins/gtkui/interface.c:2397
+#: ../plugins/gtkui/deadbeef.glade.h:78
msgid "Network"
msgstr "Rede"
-#: ../plugins/gtkui/interface.c:2423
-#: ../plugins/gtkui/deadbeef.glade.h:142
+#: ../plugins/gtkui/interface.c:2428
+#: ../plugins/gtkui/deadbeef.glade.h:143
msgid "Version: "
msgstr "Versão: "
-#: ../plugins/gtkui/interface.c:2487
-#: ../plugins/gtkui/deadbeef.glade.h:22
-#: ../translation/extra.c:77
+#: ../plugins/gtkui/interface.c:2492
+#: ../plugins/gtkui/deadbeef.glade.h:23
+#: ../translation/extra.c:78
msgid "Copyright"
msgstr "Direitos autorais"
-#: ../plugins/gtkui/interface.c:2497
-#: ../plugins/gtkui/deadbeef.glade.h:92
+#: ../plugins/gtkui/interface.c:2502
+#: ../plugins/gtkui/deadbeef.glade.h:93
msgid "Plugins"
msgstr "Plugins"
-#: ../plugins/gtkui/interface.c:2972
-#: ../plugins/gtkui/deadbeef.glade.h:140
+#: ../plugins/gtkui/interface.c:2981
+#: ../plugins/gtkui/deadbeef.glade.h:141
msgid "URL:"
msgstr "URL:"
-#: ../plugins/gtkui/interface.c:3074
-#: ../plugins/gtkui/deadbeef.glade.h:46
+#: ../plugins/gtkui/interface.c:3083
+#: ../plugins/gtkui/deadbeef.glade.h:47
msgid "Group By"
msgstr "Agrupar por"
-#: ../plugins/gtkui/interface.c:3198
-#: ../plugins/gtkui/deadbeef.glade.h:121
+#: ../plugins/gtkui/interface.c:3207
+#: ../plugins/gtkui/deadbeef.glade.h:122
msgid "Sort by..."
msgstr "Ordenar por..."
-#: ../plugins/gtkui/interface.c:3214
-#: ../plugins/gtkui/deadbeef.glade.h:42
+#: ../plugins/gtkui/interface.c:3223
+#: ../plugins/gtkui/deadbeef.glade.h:43
msgid "Format"
msgstr "Formato"
-#: ../plugins/gtkui/interface.c:3244
+#: ../plugins/gtkui/interface.c:3253
msgid "Ascending"
msgstr "Ascendente"
-#: ../plugins/gtkui/interface.c:3245
+#: ../plugins/gtkui/interface.c:3254
msgid "Descending"
msgstr "Descendente"
-#: ../plugins/gtkui/interface.c:3298
-#: ../plugins/gtkui/deadbeef.glade.h:112
+#: ../plugins/gtkui/interface.c:3307
+#: ../plugins/gtkui/deadbeef.glade.h:113
#: ../plugins/converter/interface.c:758
-#: ../plugins/converter/converter.glade.h:44
msgid "Select DSP Plugin"
msgstr "Selecionar plugin do DSP"
-#: ../plugins/gtkui/interface.c:3314
-#: ../plugins/gtkui/deadbeef.glade.h:91
-#: ../plugins/converter/convgui.c:1008
+#: ../plugins/gtkui/interface.c:3323
+#: ../plugins/gtkui/deadbeef.glade.h:92
+#: ../plugins/converter/convgui.c:1016
#: ../plugins/converter/interface.c:774
#: ../plugins/gtkui/dspconfig.c:139
-#: ../plugins/converter/converter.glade.h:38
msgid "Plugin"
msgstr "Plugin"
-#: ../plugins/gtkui/interface.c:3400
-#: ../plugins/gtkui/deadbeef.glade.h:131
+#: ../plugins/gtkui/interface.c:3409
+#: ../plugins/gtkui/deadbeef.glade.h:132
msgid "Tag Writer Settings"
msgstr "Configuração do editor de etiquetas"
-#: ../plugins/gtkui/interface.c:3431
-#: ../plugins/gtkui/deadbeef.glade.h:145
+#: ../plugins/gtkui/interface.c:3440
+#: ../plugins/gtkui/deadbeef.glade.h:146
msgid "Write ID3v2"
msgstr "Escrever ID3v2"
-#: ../plugins/gtkui/interface.c:3435
-#: ../plugins/gtkui/interface.c:3562
-#: ../plugins/gtkui/deadbeef.glade.h:144
+#: ../plugins/gtkui/interface.c:3444
+#: ../plugins/gtkui/interface.c:3571
+#: ../plugins/gtkui/deadbeef.glade.h:145
msgid "Write ID3v1"
msgstr "Escrever ID3v1"
-#: ../plugins/gtkui/interface.c:3439
-#: ../plugins/gtkui/interface.c:3518
-#: ../plugins/gtkui/interface.c:3558
-#: ../plugins/gtkui/deadbeef.glade.h:143
+#: ../plugins/gtkui/interface.c:3448
+#: ../plugins/gtkui/interface.c:3527
+#: ../plugins/gtkui/interface.c:3567
+#: ../plugins/gtkui/deadbeef.glade.h:144
msgid "Write APEv2"
msgstr "Escrever APEv2"
-#: ../plugins/gtkui/interface.c:3447
-#: ../plugins/gtkui/interface.c:3526
-#: ../plugins/gtkui/deadbeef.glade.h:128
+#: ../plugins/gtkui/interface.c:3456
+#: ../plugins/gtkui/interface.c:3535
+#: ../plugins/gtkui/deadbeef.glade.h:129
msgid "Strip ID3v2"
msgstr "Remover ID3v2"
-#: ../plugins/gtkui/interface.c:3451
-#: ../plugins/gtkui/interface.c:3574
-#: ../plugins/gtkui/deadbeef.glade.h:127
+#: ../plugins/gtkui/interface.c:3460
+#: ../plugins/gtkui/interface.c:3583
+#: ../plugins/gtkui/deadbeef.glade.h:128
msgid "Strip ID3v1"
msgstr "Remover ID3v1"
-#: ../plugins/gtkui/interface.c:3455
-#: ../plugins/gtkui/interface.c:3530
-#: ../plugins/gtkui/interface.c:3570
-#: ../plugins/gtkui/deadbeef.glade.h:126
+#: ../plugins/gtkui/interface.c:3464
+#: ../plugins/gtkui/interface.c:3539
+#: ../plugins/gtkui/interface.c:3579
+#: ../plugins/gtkui/deadbeef.glade.h:127
msgid "Strip APEv2"
msgstr "Remover APEv2"
-#: ../plugins/gtkui/interface.c:3463
-#: ../plugins/gtkui/deadbeef.glade.h:51
+#: ../plugins/gtkui/interface.c:3472
+#: ../plugins/gtkui/deadbeef.glade.h:52
msgid "ID3v2 version"
msgstr "Versão ID3v2"
-#: ../plugins/gtkui/interface.c:3470
+#: ../plugins/gtkui/interface.c:3479
msgid "2.3 (Recommended)"
msgstr "2.3 (Recomendado)"
-#: ../plugins/gtkui/interface.c:3471
+#: ../plugins/gtkui/interface.c:3480
msgid "2.4"
msgstr "2.4"
-#: ../plugins/gtkui/interface.c:3477
-#: ../plugins/gtkui/deadbeef.glade.h:50
+#: ../plugins/gtkui/interface.c:3486
+#: ../plugins/gtkui/deadbeef.glade.h:51
msgid "ID3v1 character encoding (default is iso8859-1)"
msgstr "Codificação de caracteres ID3v1 (padrão é iso8859-1)"
-#: ../plugins/gtkui/interface.c:3514
-#: ../plugins/gtkui/deadbeef.glade.h:146
+#: ../plugins/gtkui/interface.c:3523
+#: ../plugins/gtkui/deadbeef.glade.h:147
msgid "Write ID3v2.4"
msgstr "Escrever ID3v2.4"
-#: ../plugins/gtkui/mainplaylist.c:306
-#: ../plugins/gtkui/search.c:383
+#: ../plugins/gtkui/mainplaylist.c:313
+#: ../plugins/gtkui/search.c:391
msgid "Artist / Album"
msgstr "Artista / Álbum"
-#: ../plugins/gtkui/mainplaylist.c:307
-#: ../plugins/gtkui/search.c:384
+#: ../plugins/gtkui/mainplaylist.c:314
+#: ../plugins/gtkui/search.c:392
msgid "Track No"
msgstr "Nº da faixa"
-#: ../plugins/gtkui/plcommon.c:319
+#: ../plugins/gtkui/plcommon.c:325
msgid "Delete files from disk"
msgstr "Excluir arquivos do disco"
-#: ../plugins/gtkui/plcommon.c:320
+#: ../plugins/gtkui/plcommon.c:326
msgid ""
"Files will be lost. Proceed?\n"
"(This dialog can be turned off in GTKUI plugin settings)"
@@ -1077,53 +1077,53 @@ msgstr ""
"Os arquivos serão perdidos. Continuar?\n"
"(Este diálogo pode ser desligado nas configurações do plugin GTKUI)"
-#: ../plugins/gtkui/plcommon.c:321
+#: ../plugins/gtkui/plcommon.c:327
#: ../plugins/gtkui/trkproperties.c:162
-#: ../plugins/gtkui/trkproperties.c:674
-#: ../plugins/converter/convgui.c:751
-#: ../plugins/converter/convgui.c:1128
+#: ../plugins/gtkui/trkproperties.c:693
+#: ../plugins/converter/convgui.c:759
+#: ../plugins/converter/convgui.c:1136
msgid "Warning"
msgstr "Alerta"
-#: ../plugins/gtkui/plcommon.c:423
+#: ../plugins/gtkui/plcommon.c:429
msgid "Add to playback queue"
msgstr "Colocar na fila da lista de reprodução"
-#: ../plugins/gtkui/plcommon.c:428
+#: ../plugins/gtkui/plcommon.c:434
msgid "Remove from playback queue"
msgstr "Remover da fila da lista de reprodução"
-#: ../plugins/gtkui/plcommon.c:436
+#: ../plugins/gtkui/plcommon.c:442
msgid "Reload metadata"
msgstr "Recarregar metadados"
-#: ../plugins/gtkui/plcommon.c:455
+#: ../plugins/gtkui/plcommon.c:461
msgid "Remove from disk"
msgstr "Remover do disco"
-#: ../plugins/gtkui/plcommon.c:834
-#: ../plugins/gtkui/plcommon.c:959
+#: ../plugins/gtkui/plcommon.c:840
+#: ../plugins/gtkui/plcommon.c:965
msgid "Add column"
msgstr "Adicionar coluna"
-#: ../plugins/gtkui/plcommon.c:864
-#: ../plugins/gtkui/plcommon.c:963
+#: ../plugins/gtkui/plcommon.c:870
+#: ../plugins/gtkui/plcommon.c:969
msgid "Edit column"
msgstr "Editar coluna"
-#: ../plugins/gtkui/plcommon.c:967
+#: ../plugins/gtkui/plcommon.c:973
msgid "Remove column"
msgstr "Remover coluna"
-#: ../plugins/gtkui/plcommon.c:977
+#: ../plugins/gtkui/plcommon.c:983
msgid "Group by"
msgstr "Agrupar por"
-#: ../plugins/gtkui/plcommon.c:984
+#: ../plugins/gtkui/plcommon.c:990
msgid "None"
msgstr "Nenhum"
-#: ../plugins/gtkui/plcommon.c:988
+#: ../plugins/gtkui/plcommon.c:994
msgid "Artist/Date/Album"
msgstr "Artista/Data/Álbum"
@@ -1142,7 +1142,6 @@ msgstr "Dispositivo de áudio padrão"
#: ../plugins/gtkui/prefwin.c:318
#: ../plugins/converter/interface.c:649
-#: ../plugins/converter/converter.glade.h:6
msgid "Add"
msgstr "Adicionar"
@@ -1179,46 +1178,46 @@ msgstr "Deseja realmente fechar esta janela?"
msgid "[Multiple values] "
msgstr "[Valores múltiplos]"
-#: ../plugins/gtkui/trkproperties.c:395
#: ../plugins/gtkui/trkproperties.c:407
+#: ../plugins/gtkui/trkproperties.c:419
msgid "Key"
-msgstr "Tecla"
+msgstr "Chave"
-#: ../plugins/gtkui/trkproperties.c:396
#: ../plugins/gtkui/trkproperties.c:408
+#: ../plugins/gtkui/trkproperties.c:420
msgid "Value"
msgstr "Valor"
-#: ../plugins/gtkui/trkproperties.c:575
+#: ../plugins/gtkui/trkproperties.c:594
msgid "Writing tags..."
msgstr "Escrevendo etiquetas..."
-#: ../plugins/gtkui/trkproperties.c:602
+#: ../plugins/gtkui/trkproperties.c:621
msgid "Name:"
msgstr "Nome:"
-#: ../plugins/gtkui/trkproperties.c:614
+#: ../plugins/gtkui/trkproperties.c:633
msgid "Field names must not start with : or _"
msgstr "Os nomes dos campos não devem começar com : ou _"
-#: ../plugins/gtkui/trkproperties.c:615
-#: ../plugins/gtkui/trkproperties.c:649
+#: ../plugins/gtkui/trkproperties.c:634
+#: ../plugins/gtkui/trkproperties.c:668
msgid "Cannot add field"
msgstr "Incapaz de adicionar campo"
-#: ../plugins/gtkui/trkproperties.c:648
+#: ../plugins/gtkui/trkproperties.c:667
msgid "Field with such name already exists, please try different name."
msgstr "Um campo com esse nome já existe. Por favor, tente outro nome."
-#: ../plugins/gtkui/trkproperties.c:673
+#: ../plugins/gtkui/trkproperties.c:692
msgid "Really remove selected field?"
msgstr "Deseja realmente remover o campo selecionado?"
-#: ../plugins/gtkui/trkproperties.c:715
+#: ../plugins/gtkui/trkproperties.c:734
msgid "Add field"
msgstr "Adicionar campo"
-#: ../plugins/gtkui/trkproperties.c:718
+#: ../plugins/gtkui/trkproperties.c:737
msgid "Remove field"
msgstr "Remover campo"
@@ -1318,18 +1317,20 @@ msgstr ""
#: ../main.c:109
#, c-format
msgid " for more info, see http://sourceforge.net/apps/mediawiki/deadbeef/index.php?title=Title_Formatting\n"
-msgstr " para mais informações, veja http://sourceforge.net/apps/mediawiki/deadbeef/index.php?title=Title_Formatting\n"
+msgstr ""
+" para mais informações, veja:\n"
+"http://sourceforge.net/apps/mediawiki/deadbeef/index.php?title=Title_Formatting\n"
-#: ../playlist.c:416
-#: ../playlist.c:2553
+#: ../playlist.c:439
+#: ../playlist.c:2605
msgid "Default"
msgstr "Padrão"
-#: ../playlist.c:3800
+#: ../playlist.c:3854
msgid "Yes"
msgstr "Sim"
-#: ../playlist.c:3800
+#: ../playlist.c:3854
msgid "No"
msgstr "Não"
@@ -1341,7 +1342,7 @@ msgstr ""
"2.3 (Recomendado)\n"
"2.4"
-#: ../plugins/gtkui/deadbeef.glade.h:13
+#: ../plugins/gtkui/deadbeef.glade.h:14
msgid ""
"Ascending\n"
"Descending"
@@ -1349,7 +1350,7 @@ msgstr ""
"Ascendente\n"
"Descendente"
-#: ../plugins/gtkui/deadbeef.glade.h:32
+#: ../plugins/gtkui/deadbeef.glade.h:33
msgid ""
"Disable\n"
"Track\n"
@@ -1359,7 +1360,7 @@ msgstr ""
"Faixa\n"
"Álbum"
-#: ../plugins/gtkui/deadbeef.glade.h:54
+#: ../plugins/gtkui/deadbeef.glade.h:55
msgid ""
"Item Index\n"
"Playing\n"
@@ -1385,7 +1386,7 @@ msgstr ""
"Banda / Artista do álbum\n"
"Personalizar"
-#: ../plugins/gtkui/deadbeef.glade.h:66
+#: ../plugins/gtkui/deadbeef.glade.h:67
msgid ""
"Left\n"
"Right"
@@ -1426,7 +1427,7 @@ msgid "Release device while stopped"
msgstr "Liberar dispositivo quando parado"
#: ../translation/extra.c:8
-#: ../translation/extra.c:50
+#: ../translation/extra.c:51
msgid "Preferred buffer size"
msgstr "Tamanho preferido do buffer"
@@ -1460,289 +1461,327 @@ msgstr "URL para scrobbling"
msgid "Device file"
msgstr "Arquivo de dispositivo"
+#: ../translation/extra.c:18
+msgid "OSS4 samplerate bug workaround"
+msgstr "Contornar falha da taxa de amostragem do OSS4"
+
#. Album Artwork plugin
-#: ../translation/extra.c:19
+#: ../translation/extra.c:20
msgid "Cache update period (hr)"
msgstr "Período para atualização do cache (h)"
-#: ../translation/extra.c:20
+#: ../translation/extra.c:21
msgid "Fetch from embedded tags"
msgstr "Buscar nas etiquetas embutidas"
-#: ../translation/extra.c:21
+#: ../translation/extra.c:22
msgid "Fetch from local folder"
msgstr "Buscar numa pasta local"
-#: ../translation/extra.c:22
+#: ../translation/extra.c:23
msgid "Local cover file mask"
msgstr "Máscara de arquivo de capa local"
-#: ../translation/extra.c:23
+#: ../translation/extra.c:24
msgid "Fetch from last.fm"
msgstr "Buscar no last.fm"
-#: ../translation/extra.c:24
+#: ../translation/extra.c:25
msgid "Fetch from albumart.org"
msgstr "Buscar no albumart.org"
-#: ../translation/extra.c:25
+#: ../translation/extra.c:26
msgid "Scale artwork towards longer side"
msgstr "Escalar a capa do álbum pelo lado maior"
#. Audio CD player
-#: ../translation/extra.c:27
+#: ../translation/extra.c:28
msgid "Use CDDB/FreeDB"
msgstr "Usar CDDB/FreeDB"
-#: ../translation/extra.c:28
+#: ../translation/extra.c:29
msgid "Prefer CD-Text over CDDB"
msgstr "Preferir CD-Text a CDDB"
-#: ../translation/extra.c:29
+#: ../translation/extra.c:30
msgid "CDDB url (e.g. 'freedb.org')"
msgstr "URL de CDDB (ex. 'freedb.org')"
-#: ../translation/extra.c:30
+#: ../translation/extra.c:31
msgid "CDDB port number (e.g. '888')"
msgstr "Número da porta CDDB (ex. '888')"
-#: ../translation/extra.c:31
+#: ../translation/extra.c:32
msgid "Prefer CDDB protocol over HTTP"
msgstr "Preferir protocolo CDDB ao HTTP"
-#: ../translation/extra.c:32
+#: ../translation/extra.c:33
msgid "Enable NRG image support"
msgstr "Habilitar suporte ao formato de imagem NRG"
#. DUMB module player plugin
-#: ../translation/extra.c:34
+#: ../translation/extra.c:35
msgid "Resampling quality (0..2, higher is better)"
msgstr "Qualidade de reamostragem (0..2, maior é melhor)"
#. Game_Music_Emu decoder plugin
-#: ../translation/extra.c:36
+#: ../translation/extra.c:37
msgid "Max song length (in minutes)"
msgstr "Duração máxima da música (em minutos)"
#. Standard GTK2 user interface plugin
-#: ../translation/extra.c:38
+#: ../translation/extra.c:39
msgid "Ask confirmation to delete files from disk"
msgstr "Pedir confirmação para excluir arquivos do disco"
-#: ../translation/extra.c:39
+#: ../translation/extra.c:40
msgid "Status icon volume control sensitivity"
msgstr "Sensibilidade ao controle de volume no ícone de status"
-#: ../translation/extra.c:40
+#: ../translation/extra.c:41
msgid "Custom status icon"
msgstr "Ícone de status personalizado"
-#: ../translation/extra.c:41
+#: ../translation/extra.c:42
msgid "Run gtk_init with --sync (debug mode)"
msgstr "Executar gtk_init com --sync (modo de depuração)"
-#: ../translation/extra.c:42
+#: ../translation/extra.c:43
msgid "Add separators between plugin context menu items"
msgstr "Adicionar separadores entre itens do menu de contexto dos plugins"
#. OSD Notify plugin
-#: ../translation/extra.c:44
+#: ../translation/extra.c:45
msgid "Notification title format"
msgstr "Formato de notificação do título"
-#: ../translation/extra.c:45
+#: ../translation/extra.c:46
msgid "Notification content format"
msgstr "Formato de notificação do conteúdo"
-#: ../translation/extra.c:46
+#: ../translation/extra.c:47
msgid "Show album art"
msgstr "Mostrar a capa do álbum"
-#: ../translation/extra.c:47
+#: ../translation/extra.c:48
msgid "Album art size (px)"
msgstr "Tamanho da capa do álbum (px)"
#. PulseAudio output plugin
-#: ../translation/extra.c:49
+#: ../translation/extra.c:50
msgid "PulseAudio server"
msgstr "Servidor PulseAudio"
-#: ../translation/extra.c:51
+#: ../translation/extra.c:52
msgid "Samplerate"
msgstr "Taxa de amostragem"
#. SHN player plugin
-#: ../translation/extra.c:53
+#: ../translation/extra.c:54
msgid "Relative seek table path"
msgstr "Caminho relativo da tabela de referência"
-#: ../translation/extra.c:54
+#: ../translation/extra.c:55
msgid "Absolute seek table path"
msgstr "Caminho absoluto da tabela de referência"
-#: ../translation/extra.c:55
+#: ../translation/extra.c:56
msgid "Swap audio bytes (toggle if all you hear is static)"
msgstr "Intercâmbio de bytes de áudio (alterne se só ouve estática)"
#. SID decoder plugin
-#: ../translation/extra.c:57
+#: ../translation/extra.c:58
msgid "Enable HVSC Songlength DB"
msgstr "Habilitar banco de dados de duração da HVSC"
-#: ../translation/extra.c:58
+#: ../translation/extra.c:59
msgid "Songlengths.txt (from HVSC)"
msgstr "Songlengths.txt (da HVSC)"
-#: ../translation/extra.c:59
+#: ../translation/extra.c:60
msgid "Bits per sample (8 or 16)"
msgstr "Bits por amostra (8 ou 16)"
-#: ../translation/extra.c:60
+#: ../translation/extra.c:61
msgid "Default song length (sec)"
msgstr "Duração padrão das músicas (em segundos)"
#. WildMidi player plugin
-#: ../translation/extra.c:62
+#: ../translation/extra.c:63
msgid "Timidity++ bank configuration file"
msgstr "Arquivo de configuração para o banco Timidity++"
-#: ../translation/extra.c:65
+#: ../translation/extra.c:66
msgid "Track Title"
msgstr "Título da faixa"
-#: ../translation/extra.c:66
+#: ../translation/extra.c:67
msgid "Performer"
msgstr "Artista"
-#: ../translation/extra.c:71
+#: ../translation/extra.c:72
msgid "Total Tracks"
msgstr "Total de faixas"
-#: ../translation/extra.c:72
+#: ../translation/extra.c:73
msgid "Genre"
msgstr "Gênero"
-#: ../translation/extra.c:73
+#: ../translation/extra.c:74
msgid "Composer"
msgstr "Compositor"
-#: ../translation/extra.c:74
+#: ../translation/extra.c:75
msgid "Disc Number"
msgstr "Número do disco"
-#: ../translation/extra.c:75
+#: ../translation/extra.c:76
msgid "Comment"
msgstr "Comentário"
-#: ../translation/extra.c:76
+#: ../translation/extra.c:77
msgid "Encoder / Vendor"
msgstr "Codificador / Fornecedor"
-#. FFmpeg deocder plugin
#: ../translation/extra.c:79
+msgid "Location"
+msgstr "Local"
+
+#: ../translation/extra.c:80
+msgid "Subtrack Index"
+msgstr "Índice de subfaixas"
+
+#: ../translation/extra.c:81
+msgid "Tag Type(s)"
+msgstr "Tipo(s) de etiqueta"
+
+#: ../translation/extra.c:82
+msgid "Embedded Cuesheet"
+msgstr "Cuesheet embutida"
+
+#: ../translation/extra.c:83
+msgid "Codec"
+msgstr "Codec"
+
+#. FFmpeg deocder plugin
+#: ../translation/extra.c:85
msgid "File Extensions (separate with ';')"
msgstr "Extensões de arquivo (separadas por \";\")"
-#: ../plugins/converter/convgui.c:107
+#. Converter GUI
+#: ../translation/extra.c:87
+msgid "Convert"
+msgstr "Converter"
+
+#. Resampler (Secret Rabbit Code)
+#: ../translation/extra.c:89
+msgid "Target Samplerate"
+msgstr "Taxa de amostragem alvo"
+
+#: ../translation/extra.c:90
+msgid "Quality / Algorythm"
+msgstr "Qualidade / Algoritmo"
+
+#: ../translation/extra.c:91
+msgid "Automatic Samplerate (overrides Target Samplerate)"
+msgstr "Taxa de amostragem automática (sobrepuja a taxa de amostragem alvo)"
+
+#: ../plugins/converter/convgui.c:108
msgid "The file already exists. Overwrite?"
msgstr "O arquivo já existe. Sobrescrever?"
-#: ../plugins/converter/convgui.c:109
+#: ../plugins/converter/convgui.c:110
msgid "Converter warning"
msgstr "Alerta do conversor"
-#: ../plugins/converter/convgui.c:221
+#: ../plugins/converter/convgui.c:222
msgid "Please select encoder"
msgstr "Selecione o codificador, por favor"
-#: ../plugins/converter/convgui.c:223
+#: ../plugins/converter/convgui.c:224
msgid "Converter error"
msgstr "Erro do conversor"
-#: ../plugins/converter/convgui.c:247
+#: ../plugins/converter/convgui.c:248
msgid "Converting..."
msgstr "Convertendo..."
-#: ../plugins/converter/convgui.c:386
-#: ../plugins/converter/convgui.c:488
+#: ../plugins/converter/convgui.c:394
+#: ../plugins/converter/convgui.c:496
msgid "Select folder..."
msgstr "Selecionar pasta..."
-#: ../plugins/converter/convgui.c:627
+#: ../plugins/converter/convgui.c:635
msgid "Failed to save encoder preset"
msgstr "Falha ao salvar predefinição do codificador"
-#: ../plugins/converter/convgui.c:629
-#: ../plugins/converter/convgui.c:1027
+#: ../plugins/converter/convgui.c:637
+#: ../plugins/converter/convgui.c:1035
msgid "Check preset folder permissions, try to pick different title, or free up some disk space"
msgstr "Verifique as permissões da pasta de predefinições, tente com um título diferente ou libere algum espaço no disco"
-#: ../plugins/converter/convgui.c:629
-#: ../plugins/converter/convgui.c:1027
+#: ../plugins/converter/convgui.c:637
+#: ../plugins/converter/convgui.c:1035
msgid "Preset with the same name already exists. Try to pick another title."
msgstr "Uma predefinição com o mesmo nome já existe. Tente um título diferente."
-#: ../plugins/converter/convgui.c:630
-#: ../plugins/converter/convgui.c:1028
+#: ../plugins/converter/convgui.c:638
+#: ../plugins/converter/convgui.c:1036
msgid "Error"
msgstr "Erro"
-#: ../plugins/converter/convgui.c:684
+#: ../plugins/converter/convgui.c:692
msgid "Add new encoder"
msgstr "Adicionar novo codificador"
-#: ../plugins/converter/convgui.c:716
+#: ../plugins/converter/convgui.c:724
msgid "Edit encoder"
msgstr "Editar codificador"
-#: ../plugins/converter/convgui.c:748
-#: ../plugins/converter/convgui.c:1125
+#: ../plugins/converter/convgui.c:756
+#: ../plugins/converter/convgui.c:1133
msgid "Remove preset"
msgstr "Remover predefinição"
-#: ../plugins/converter/convgui.c:750
-#: ../plugins/converter/convgui.c:1127
+#: ../plugins/converter/convgui.c:758
+#: ../plugins/converter/convgui.c:1135
msgid "This action will delete the selected preset. Are you sure?"
msgstr "Esta ação irá excluir a predefinição selecionada. Tem certeza?"
-#: ../plugins/converter/convgui.c:774
+#: ../plugins/converter/convgui.c:782
msgid "Encoders"
msgstr "Codificadores"
-#: ../plugins/converter/convgui.c:830
+#: ../plugins/converter/convgui.c:838
#: ../plugins/gtkui/dspconfig.c:183
msgid "Add plugin to DSP chain"
msgstr "Adicionar plugin à corrente do DSP"
-#: ../plugins/converter/convgui.c:1026
+#: ../plugins/converter/convgui.c:1034
msgid "Failed to save DSP preset"
msgstr "Falha ao salvar predefinição do DSP"
-#: ../plugins/converter/convgui.c:1090
+#: ../plugins/converter/convgui.c:1098
msgid "New DSP Preset"
msgstr "Nova predefinição do DSP"
-#: ../plugins/converter/convgui.c:1175
+#: ../plugins/converter/convgui.c:1183
msgid "Edit DSP Preset"
msgstr "Editar predefinição do DSP"
-#: ../plugins/converter/convgui.c:1195
+#: ../plugins/converter/convgui.c:1203
msgid "DSP Presets"
msgstr "Predefinições do DSP"
#: ../plugins/converter/interface.c:97
-#: ../plugins/converter/converter.glade.h:34
msgid "Output folder:"
msgstr "Pasta de saída:"
#: ../plugins/converter/interface.c:118
-#: ../plugins/converter/converter.glade.h:33
msgid "Output file name:"
msgstr "Nome do arquivo de saída:"
#: ../plugins/converter/interface.c:129
-#: ../plugins/converter/converter.glade.h:18
-#, no-c-format
msgid ""
"Extension (e.g. .mp3) will be appended automatically.\n"
"Leave the field empty for default (%a - %t)."
@@ -1751,22 +1790,18 @@ msgstr ""
"Deixe o campo vazio para o padrão (%a - %t)."
#: ../plugins/converter/interface.c:142
-#: ../plugins/converter/converter.glade.h:13
msgid "Encoder:"
msgstr "Codificador:"
#: ../plugins/converter/interface.c:166
-#: ../plugins/converter/converter.glade.h:10
msgid "DSP preset:"
msgstr "Predefinição do DSP:"
#: ../plugins/converter/interface.c:189
-#: ../plugins/converter/converter.glade.h:30
msgid "Number of threads:"
msgstr "Número de linhas de execução"
#: ../plugins/converter/interface.c:202
-#: ../plugins/converter/converter.glade.h:35
msgid "Output sample format:"
msgstr "Formato da amostra de saída:"
@@ -1795,7 +1830,6 @@ msgid "32 bit float"
msgstr "32 bits flutuante"
#: ../plugins/converter/interface.c:220
-#: ../plugins/converter/converter.glade.h:49
msgid "When file exists:"
msgstr "Quando o arquivo existir:"
@@ -1808,38 +1842,31 @@ msgid "Overwrite"
msgstr "Sobrescrever"
#: ../plugins/converter/interface.c:230
-#: ../plugins/converter/converter.glade.h:39
msgid "Preserve folder structure, starting from:"
msgstr "Preservar a estrutura da pasta, começando por:"
#: ../plugins/converter/interface.c:386
-#: ../plugins/converter/converter.glade.h:12
msgid "Edit Encoder Preset"
msgstr "Editar predefinição do codificador"
#: ../plugins/converter/interface.c:409
-#: ../plugins/converter/converter.glade.h:48
msgid "Untitled Encoder"
msgstr "Codificador sem título"
#: ../plugins/converter/interface.c:417
-#: ../plugins/converter/converter.glade.h:32
msgid "Output file extension:"
msgstr "Extensão do arquivo de saída:"
#: ../plugins/converter/interface.c:424
-#: ../plugins/converter/converter.glade.h:11
msgid "E.g. mp3"
msgstr "Ex. mp3"
#: ../plugins/converter/interface.c:432
-#: ../plugins/converter/converter.glade.h:7
msgid "Command line:"
msgstr "Linha de comando:"
#: ../plugins/converter/interface.c:443
-#: ../plugins/converter/converter.glade.h:15
-#, no-c-format
+#, c-format
msgid ""
"Example: lame - %o\n"
"%i for input file, %o for output file, - for stdin"
@@ -1848,8 +1875,7 @@ msgstr ""
"%i para arquivo de entrada, %o para arquivo de saída, - para entrada padrão (stdin)"
#: ../plugins/converter/interface.c:453
-#: ../plugins/converter/converter.glade.h:3
-#, no-c-format
+#, c-format
msgid ""
"<small>%o - output file name\n"
"%i - temporary input file name</small>"
@@ -1858,7 +1884,6 @@ msgstr ""
"%i - nome do arquivo de entrada temporário</small>"
#: ../plugins/converter/interface.c:462
-#: ../plugins/converter/converter.glade.h:29
msgid "Method:"
msgstr "Método:"
@@ -1871,76 +1896,65 @@ msgid "Temporary file"
msgstr "Arquivo temporário"
#: ../plugins/converter/interface.c:487
-#: ../plugins/converter/converter.glade.h:5
msgid "APEv2"
msgstr "APEv2"
#: ../plugins/converter/interface.c:493
-#: ../plugins/converter/converter.glade.h:21
msgid "ID3v1"
msgstr "ID3v1"
#: ../plugins/converter/interface.c:499
-#: ../plugins/converter/converter.glade.h:31
msgid "OggVorbis"
msgstr "OggVorbis"
#: ../plugins/converter/interface.c:505
-#: ../plugins/converter/converter.glade.h:20
msgid "FLAC"
msgstr "FLAC"
#: ../plugins/converter/interface.c:517
-#: ../plugins/converter/converter.glade.h:22
msgid "ID3v2"
msgstr "ID3v2"
#: ../plugins/converter/interface.c:527
-#: ../plugins/converter/converter.glade.h:1
msgid "<b>Tag writer</b>"
msgstr "<b>Editor de etiquetas</b>"
#: ../plugins/converter/interface.c:614
-#: ../plugins/converter/converter.glade.h:9
msgid "DSP Preset Editor"
msgstr "Editor de predefinições do DSP"
#: ../plugins/converter/interface.c:637
-#: ../plugins/converter/converter.glade.h:47
msgid "Untitled DSP Preset"
msgstr "Predefinição do DSP sem título"
-#: ../plugins/converter/converter.glade.h:23
-msgid ""
-"Keep source format\n"
-"8 bit signed int\n"
-"16 bit signed int\n"
-"24 bit signed int\n"
-"32 bit signed int\n"
-"32 bit float"
-msgstr ""
-"Manter formato original\n"
-"Inteiro de 8 bits com sinal\n"
-"Inteiro de 16 bits com sinal\n"
-"Inteiro de 24 bits com sinal\n"
-"Inteiro de 32 bits com sinal\n"
-"32 bits flutuante"
-
-#: ../plugins/converter/converter.glade.h:36
-msgid ""
-"Pipe\n"
-"Temporary file"
-msgstr ""
-"Pipe\n"
-"Arquivo temporário"
+#~ msgid ""
+#~ "Keep source format\n"
+#~ "8 bit signed int\n"
+#~ "16 bit signed int\n"
+#~ "24 bit signed int\n"
+#~ "32 bit signed int\n"
+#~ "32 bit float"
+#~ msgstr ""
+#~ "Manter formato original\n"
+#~ "Inteiro de 8 bits com sinal\n"
+#~ "Inteiro de 16 bits com sinal\n"
+#~ "Inteiro de 24 bits com sinal\n"
+#~ "Inteiro de 32 bits com sinal\n"
+#~ "32 bits flutuante"
-#: ../plugins/converter/converter.glade.h:41
-msgid ""
-"Prompt\n"
-"Overwrite"
-msgstr ""
-"Perguntar\n"
-"Sobrescrever"
+#~ msgid ""
+#~ "Pipe\n"
+#~ "Temporary file"
+#~ msgstr ""
+#~ "Pipe\n"
+#~ "Arquivo temporário"
+
+#~ msgid ""
+#~ "Prompt\n"
+#~ "Overwrite"
+#~ msgstr ""
+#~ "Perguntar\n"
+#~ "Sobrescrever"
#~ msgid "about.txt"
#~ msgstr "about.txt"
@@ -2032,21 +2046,6 @@ msgstr ""
#~ msgid "ALSA output plugin"
#~ msgstr "Plugin ALSA"
-#~ msgid "Location"
-#~ msgstr "Local"
-
-#~ msgid "Subtrack Index"
-#~ msgstr "Índice de subfaixas"
-
-#~ msgid "Tag Type(s)"
-#~ msgstr "Tipo(s) de etiqueta"
-
-#~ msgid "Embedded Cuesheet"
-#~ msgstr "Cuesheet embutida"
-
-#~ msgid "Codec"
-#~ msgstr "Codec"
-
#~ msgid "DeaDBeeF now playing"
#~ msgstr "O DeaDBeeF está reproduzindo"
diff --git a/po/ru.po b/po/ru.po
index 7eb1d2d9..7151a2b2 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -1689,7 +1689,7 @@ msgstr "Заменить"
#: ../plugins/converter/interface.c:230
msgid "Preserve folder structure, starting from:"
-msgstr ""
+msgstr "Сохранить структуру папок, начиная с:"
#: ../plugins/converter/interface.c:386
msgid "Edit Encoder Preset"
diff --git a/po/te.po b/po/te.po
new file mode 100644
index 00000000..74f470a2
--- /dev/null
+++ b/po/te.po
@@ -0,0 +1,1166 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-09-10 15:02+0200\n"
+"PO-Revision-Date: 2011-04-25 17:20+0200\n"
+"Last-Translator: PraveenIlla <mail2ipn@gmail.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: te\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 2.0.5\n"
+
+#: ../plugins/gtkui/callbacks.c:97
+msgid "Supported sound formats"
+msgstr "సహకారంవున్న శబ్ధపు ఫార్మేట్లు"
+
+#: ../plugins/gtkui/callbacks.c:108
+msgid "Other files (*)"
+msgstr "ఇతర ఫైళ్ళు (*)"
+
+#: ../plugins/gtkui/callbacks.c:118
+msgid "Open file(s)..."
+msgstr "ఫైళ్ళ(ను) తెరువు..."
+
+#: ../plugins/gtkui/callbacks.c:151
+msgid "Add file(s) to playlist..."
+msgstr "పాటలజాబితాకు ఫైళ్ళ(ను) జతచేయి..."
+
+#: ../plugins/gtkui/callbacks.c:190
+msgid "Add folder(s) to playlist..."
+msgstr "సంచయా(ల)ను పాటలజాబితాకు జతచేయి..."
+
+#: ../plugins/gtkui/callbacks.c:192
+msgid "Follow symlinks"
+msgstr "symlinks అనుసరించు"
+
+#: ../plugins/gtkui/callbacks.c:677
+msgid "Failed while reading help file"
+msgstr "సహాయక ఫైలును చదువుతుండగా విఫలమైంది"
+
+#: ../plugins/gtkui/callbacks.c:687
+msgid "Failed to load help file"
+msgstr "సహాయక ఫైల్ లోడుచేయుటలో విఫలమైంది"
+
+#: ../plugins/gtkui/callbacks.c:701 ../plugins/gtkui/interface.c:1090
+#: ../plugins/gtkui/deadbeef.glade.h:65
+msgid "Help"
+msgstr "సహాయం"
+
+#: ../plugins/gtkui/callbacks.c:711
+#, c-format
+msgid "About DeaDBeeF %s"
+msgstr "డెడ్‌బీఫ్ %s గురించి"
+
+#: ../plugins/gtkui/callbacks.c:722
+#, c-format
+msgid "DeaDBeeF %s ChangeLog"
+msgstr "డెడ్‌బీఫ్ %s మార్పుచిట్టా"
+
+#: ../plugins/gtkui/ddbtabstrip.c:527
+msgid "Edit playlist"
+msgstr "పాటలజాబితాను సవరించు"
+
+#: ../plugins/gtkui/ddbtabstrip.c:604
+msgid "Rename Playlist"
+msgstr "పాటలజాబితా పేరుమార్చు"
+
+#: ../plugins/gtkui/ddbtabstrip.c:608
+msgid "Remove Playlist"
+msgstr "పాటలజాబితాను తొలగించు"
+
+#: ../plugins/gtkui/ddbtabstrip.c:612
+msgid "Add New Playlist"
+msgstr "కొత్త పాటలజాబితాను జతచేయి"
+
+#: ../plugins/gtkui/eq.c:113
+msgid "Save DeaDBeeF EQ Preset"
+msgstr "డెడ్‌బీఫ్ EQ ప్రిసెట్ భద్రపరుచు"
+
+#: ../plugins/gtkui/eq.c:120
+msgid "DeaDBeeF EQ preset files (*.ddbeq)"
+msgstr "డెడ్‌బీఫ్ EQ ప్రిసెట్ ఫైళ్ళు (*.ddbeq)"
+
+#: ../plugins/gtkui/eq.c:151
+msgid "Load DeaDBeeF EQ Preset..."
+msgstr "డెడ్‌బీఫ్ EQ ప్రిసెట్ లోడుచేయి..."
+
+#: ../plugins/gtkui/eq.c:155
+msgid "DeaDBeeF EQ presets (*.ddbeq)"
+msgstr "డెడ్‌బీఫ్ EQ ప్రిసెట్ (*.ddbeq)"
+
+#: ../plugins/gtkui/eq.c:214
+msgid "Import Foobar2000 EQ Preset..."
+msgstr "Foobar2000 EQ ప్రిసెట్ దిగుమతిచేయి..."
+
+#: ../plugins/gtkui/eq.c:218
+msgid "Foobar2000 EQ presets (*.feq)"
+msgstr "Foobar2000 EQ ప్రిసెట్ (*.feq)"
+
+#: ../plugins/gtkui/eq.c:292
+msgid "Enable"
+msgstr "చేతనపరుచు"
+
+#: ../plugins/gtkui/eq.c:300
+msgid "Zero All"
+msgstr "అన్నీ సున్నాచేయి"
+
+#: ../plugins/gtkui/eq.c:307
+msgid "Zero Preamp"
+msgstr "ప్రిఆంప్ సున్నాచేయి"
+
+#: ../plugins/gtkui/eq.c:314
+msgid "Zero Bands"
+msgstr "బ్రాండ్లను సున్నాచేయి"
+
+#: ../plugins/gtkui/eq.c:321
+msgid "Save Preset"
+msgstr "ప్రిసెట్ భద్రపరుచు"
+
+#: ../plugins/gtkui/eq.c:328
+msgid "Load Preset"
+msgstr "ప్రిసెట్ లోడుచేయి"
+
+#: ../plugins/gtkui/eq.c:335
+msgid "Import Foobar2000 Preset"
+msgstr "Foobar2000 EQ ప్రిసెట్ దిగుమతిచేయి"
+
+#: ../plugins/gtkui/gtkui.c:133
+#, c-format
+msgid "1 day %d:%02d:%02d"
+msgstr "1 రోజు %d:%02d:%02d"
+
+#: ../plugins/gtkui/gtkui.c:136
+#, c-format
+msgid "%d days %d:%02d:%02d"
+msgstr "%d రోజులు %d:%02d:%02d"
+
+#: ../plugins/gtkui/gtkui.c:145
+#, c-format
+msgid "Stopped | %d tracks | %s total playtime"
+msgstr "ఆపివేయబడింది | %d ట్రాక్‌లు | %s మొత్తం ప్లేటైమ్"
+
+#: ../plugins/gtkui/gtkui.c:158
+msgid "Mono"
+msgstr "మోనో"
+
+#: ../plugins/gtkui/gtkui.c:158
+msgid "Stereo"
+msgstr "స్టీరియో"
+
+#: ../plugins/gtkui/gtkui.c:183
+#, c-format
+msgid "| %4d kbps "
+msgstr "| %4d kbps "
+
+#: ../plugins/gtkui/gtkui.c:189
+msgid "Paused | "
+msgstr "నిలిపివేయబడింది | "
+
+#: ../plugins/gtkui/gtkui.c:190
+#, c-format
+msgid ""
+"%s%s %s| %dHz | %d bit | %s | %d:%02d / %s | %d tracks | %s total playtime"
+msgstr ""
+"%s%s %s| %dHz | %d బిట్ | %s | %d:%02d / %s | %d ట్రాక్‌లు | %s మొత్తం "
+"ప్లేటైమ్"
+
+#: ../plugins/gtkui/gtkui.c:660
+msgid "Save Playlist As"
+msgstr "పాటలజాబితాను ఇలా దాచు"
+
+#: ../plugins/gtkui/gtkui.c:669 ../plugins/gtkui/gtkui.c:730
+msgid "DeaDBeeF playlist files (*.dbpl)"
+msgstr "డెడ్‍బీఫ్ పాటలజాబితా ఫైళ్ళు (*.dbpl)"
+
+#: ../plugins/gtkui/gtkui.c:723
+msgid "Load Playlist"
+msgstr "పాటలజాబితాను నింపు"
+
+#: ../plugins/gtkui/gtkui.c:863
+msgid "New Playlist"
+msgstr "కొత్త పాటలజాబితా"
+
+#: ../plugins/gtkui/gtkui.c:866
+#, c-format
+msgid "New Playlist (%d)"
+msgstr "కొత్త పాటలజాబితా (%d)"
+
+#: ../plugins/gtkui/interface.c:138 ../plugins/gtkui/deadbeef.glade.h:153
+msgid "_File"
+msgstr "ఫైల్ (_F)"
+
+#: ../plugins/gtkui/interface.c:145 ../plugins/gtkui/deadbeef.glade.h:157
+msgid "_Open file(s)"
+msgstr "ఫైళ్ళ(ను) తెరువు (_O)"
+
+#: ../plugins/gtkui/interface.c:161 ../plugins/gtkui/deadbeef.glade.h:6
+msgid "Add file(s)"
+msgstr "ఫైళ్ళ(ను) జతచేయి"
+
+#: ../plugins/gtkui/interface.c:169 ../plugins/gtkui/deadbeef.glade.h:8
+msgid "Add folder(s)"
+msgstr "సంచయా(ల)ను జతచేయి"
+
+#: ../plugins/gtkui/interface.c:177 ../plugins/gtkui/interface.c:2969
+#: ../plugins/gtkui/deadbeef.glade.h:9
+msgid "Add location"
+msgstr "స్థానమును జతచేయి"
+
+#: ../plugins/gtkui/interface.c:186 ../plugins/gtkui/deadbeef.glade.h:83
+msgid "New playlist"
+msgstr "కొత్త పాటలజాబితా"
+
+#: ../plugins/gtkui/interface.c:193 ../plugins/gtkui/deadbeef.glade.h:75
+msgid "Load playlist"
+msgstr "పాటలజాబితాను నింపు"
+
+#: ../plugins/gtkui/interface.c:197 ../plugins/gtkui/deadbeef.glade.h:112
+msgid "Save playlist"
+msgstr "పాటలజాబితాను దాచు"
+
+#: ../plugins/gtkui/interface.c:201 ../plugins/gtkui/deadbeef.glade.h:113
+msgid "Save playlist as"
+msgstr "పాటలజాబితాను ఇలా దాచు"
+
+#: ../plugins/gtkui/interface.c:210 ../plugins/gtkui/deadbeef.glade.h:159
+msgid "_Quit"
+msgstr "నిష్క్రమించు (_Q)"
+
+#: ../plugins/gtkui/interface.c:221 ../plugins/gtkui/deadbeef.glade.h:152
+msgid "_Edit"
+msgstr "సవరించు(_E)"
+
+#: ../plugins/gtkui/interface.c:228 ../plugins/gtkui/deadbeef.glade.h:150
+msgid "_Clear"
+msgstr "శుభ్రంచేయి (_C)"
+
+#: ../plugins/gtkui/interface.c:236 ../plugins/gtkui/deadbeef.glade.h:117
+msgid "Select all"
+msgstr "అన్నీ ఎంచుకో"
+
+#: ../plugins/gtkui/interface.c:243 ../plugins/gtkui/deadbeef.glade.h:25
+msgid "Deselect all"
+msgstr "ఎంపికను రద్దుచేయి"
+
+#: ../plugins/gtkui/interface.c:250 ../plugins/gtkui/deadbeef.glade.h:70
+msgid "Invert selection"
+msgstr "ఎంపికను తారుమారుచేయి"
+
+#: ../plugins/gtkui/interface.c:254 ../plugins/gtkui/deadbeef.glade.h:120
+msgid "Selection"
+msgstr "ఎంపిక"
+
+#: ../plugins/gtkui/interface.c:261 ../plugins/gtkui/plcommon.c:425
+#: ../plugins/gtkui/prefwin.c:317 ../plugins/gtkui/deadbeef.glade.h:107
+msgid "Remove"
+msgstr "తొలగించు"
+
+#: ../plugins/gtkui/interface.c:269 ../plugins/gtkui/deadbeef.glade.h:20
+msgid "Crop"
+msgstr "కత్తిరించు"
+
+#: ../plugins/gtkui/interface.c:273 ../plugins/gtkui/deadbeef.glade.h:154
+msgid "_Find"
+msgstr "కనుగొను (_F)"
+
+#: ../plugins/gtkui/interface.c:285 ../plugins/gtkui/interface.c:1705
+#: ../plugins/gtkui/deadbeef.glade.h:97
+msgid "Preferences"
+msgstr "ప్రాధాన్యతలు"
+
+#: ../plugins/gtkui/interface.c:289 ../plugins/gtkui/deadbeef.glade.h:160
+msgid "_View"
+msgstr "వీక్షణం (_V)"
+
+#: ../plugins/gtkui/interface.c:296 ../plugins/gtkui/deadbeef.glade.h:123
+msgid "Status bar"
+msgstr "స్థితి పట్టీ"
+
+#: ../plugins/gtkui/interface.c:300 ../plugins/gtkui/deadbeef.glade.h:18
+msgid "Column headers"
+msgstr "నిలువువరుస పీఠికలు"
+
+#: ../plugins/gtkui/interface.c:304 ../plugins/gtkui/deadbeef.glade.h:130
+msgid "Tabs"
+msgstr "ట్యాబ్‌లు"
+
+#: ../plugins/gtkui/interface.c:308 ../plugins/gtkui/deadbeef.glade.h:33
+msgid "Equalizer"
+msgstr "ఈక్విలైజర్"
+
+#: ../plugins/gtkui/interface.c:312 ../plugins/gtkui/deadbeef.glade.h:158
+msgid "_Playback"
+msgstr "ప్లేబాక్(_P)"
+
+#: ../plugins/gtkui/interface.c:319 ../plugins/gtkui/deadbeef.glade.h:86
+msgid "Order"
+msgstr "క్రమం"
+
+#: ../plugins/gtkui/interface.c:326 ../plugins/gtkui/deadbeef.glade.h:74
+msgid "Linear"
+msgstr "ఒకే వరుసలో ఉన్నవి"
+
+#: ../plugins/gtkui/interface.c:332 ../plugins/gtkui/deadbeef.glade.h:121
+msgid "Shuffle"
+msgstr "యాదృచ్ఛికం"
+
+#: ../plugins/gtkui/interface.c:338 ../plugins/gtkui/deadbeef.glade.h:106
+msgid "Random"
+msgstr "యాదృచ్ఛికం"
+
+#: ../plugins/gtkui/interface.c:344 ../plugins/gtkui/deadbeef.glade.h:78
+msgid "Looping"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:351 ../plugins/gtkui/deadbeef.glade.h:76
+msgid "Loop All"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:357 ../plugins/gtkui/deadbeef.glade.h:77
+msgid "Loop Single Song"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:363 ../plugins/gtkui/deadbeef.glade.h:29
+msgid "Don't Loop"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:369 ../plugins/gtkui/deadbeef.glade.h:114
+msgid "Scroll follows playback"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:374 ../plugins/gtkui/deadbeef.glade.h:22
+msgid "Cursor follows playback"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:378 ../plugins/gtkui/deadbeef.glade.h:125
+msgid "Stop after current"
+msgstr "దీని తరువాత ఆపివేయి"
+
+#: ../plugins/gtkui/interface.c:385 ../plugins/gtkui/interface.c:392
+#: ../plugins/gtkui/deadbeef.glade.h:155
+msgid "_Help"
+msgstr "సహాయం (_H)"
+
+#: ../plugins/gtkui/interface.c:400 ../plugins/gtkui/deadbeef.glade.h:149
+msgid "_ChangeLog"
+msgstr "మార్పుచిట్టా (_C)"
+
+#: ../plugins/gtkui/interface.c:422 ../plugins/gtkui/deadbeef.glade.h:146
+msgid "_About"
+msgstr "గురించి (_A)"
+
+#: ../plugins/gtkui/interface.c:801 ../plugins/gtkui/deadbeef.glade.h:115
+msgid "Search"
+msgstr "వెతుకు"
+
+#: ../plugins/gtkui/interface.c:876 ../plugins/gtkui/deadbeef.glade.h:124
+msgid "Stop"
+msgstr "ఆపు"
+
+#: ../plugins/gtkui/interface.c:884 ../plugins/gtkui/deadbeef.glade.h:92
+msgid "Play"
+msgstr "ప్లే"
+
+#: ../plugins/gtkui/interface.c:892 ../plugins/gtkui/deadbeef.glade.h:91
+msgid "Pause"
+msgstr "నిలిపివేయి"
+
+#: ../plugins/gtkui/interface.c:900 ../plugins/gtkui/deadbeef.glade.h:98
+msgid "Previous"
+msgstr "మునుపటి"
+
+#: ../plugins/gtkui/interface.c:908 ../plugins/gtkui/deadbeef.glade.h:84
+msgid "Next"
+msgstr "తరువాతి"
+
+#: ../plugins/gtkui/interface.c:916 ../plugins/gtkui/deadbeef.glade.h:93
+msgid "Play Random"
+msgstr "యాదృచ్ఛికంగా ప్లేచేయి"
+
+#: ../plugins/gtkui/interface.c:925 ../plugins/gtkui/deadbeef.glade.h:5
+msgid "About"
+msgstr "గురించి"
+
+#: ../plugins/gtkui/interface.c:938 ../plugins/gtkui/deadbeef.glade.h:105
+msgid "Quit"
+msgstr "నిష్క్రమించు"
+
+#: ../plugins/gtkui/interface.c:1010 ../plugins/gtkui/deadbeef.glade.h:10
+msgid "Adding files..."
+msgstr "ఫైళ్ళను జతచేస్తున్నది..."
+
+#: ../plugins/gtkui/interface.c:1054 ../plugins/gtkui/deadbeef.glade.h:145
+msgid "_Abort"
+msgstr "మధ్యలోరద్దు (_A)"
+
+#: ../plugins/gtkui/interface.c:1155 ../plugins/gtkui/deadbeef.glade.h:136
+msgid "Track Properties"
+msgstr "ట్రాక్ లక్షణాలు"
+
+#: ../plugins/gtkui/interface.c:1179 ../plugins/gtkui/deadbeef.glade.h:3
+msgid ""
+"<b>WARNING</b>: tag writing feature is still in development.\n"
+"<b>Make backup copies</b> before using."
+msgstr ""
+"<b>హెచ్చరిక</b>: ట్యాగ్ వ్రాయుట అనే అంశము ఇంకా అభివృద్ధిలోనే ఉన్నది.\n"
+"దీనిని వాడేముందు <b>బ్యాక్అప్ కాపీలను తీసుకోండి</b>."
+
+#: ../plugins/gtkui/interface.c:1206 ../plugins/gtkui/deadbeef.glade.h:147
+msgid "_Apply"
+msgstr "అనువర్తించు (_A)"
+
+#: ../plugins/gtkui/interface.c:1227 ../plugins/gtkui/interface.c:1273
+#: ../plugins/gtkui/interface.c:2497 ../plugins/gtkui/deadbeef.glade.h:151
+msgid "_Close"
+msgstr "మూసివేయి (_C)"
+
+#: ../plugins/gtkui/interface.c:1231 ../plugins/gtkui/deadbeef.glade.h:79
+msgid "Metadata"
+msgstr "మెటాడేటా"
+
+#: ../plugins/gtkui/interface.c:1277 ../plugins/gtkui/plcommon.c:503
+#: ../plugins/gtkui/deadbeef.glade.h:99
+msgid "Properties"
+msgstr "గుణములు"
+
+#: ../plugins/gtkui/interface.c:1363 ../plugins/gtkui/deadbeef.glade.h:161
+msgid "editcolumndlg"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:1378 ../plugins/gtkui/interface.c:2869
+#: ../plugins/gtkui/deadbeef.glade.h:133
+msgid "Title:"
+msgstr "శీర్షిక:"
+
+#: ../plugins/gtkui/interface.c:1386 ../plugins/gtkui/deadbeef.glade.h:32
+msgid "Enter new column title here"
+msgstr "కొత్త నిలువువరుస శీర్షికను ఇక్కడ ప్రవేశపెట్టండి"
+
+#: ../plugins/gtkui/interface.c:1394 ../plugins/gtkui/deadbeef.glade.h:137
+msgid "Type:"
+msgstr "రకం:"
+
+#: ../plugins/gtkui/interface.c:1402
+msgid "File number"
+msgstr "ఫైల్ సంఖ్య"
+
+#. create default set of columns
+#: ../plugins/gtkui/interface.c:1403 ../plugins/gtkui/mainplaylist.c:300
+msgid "Playing"
+msgstr "ప్లేచేస్తున్నది"
+
+#: ../plugins/gtkui/interface.c:1404
+msgid "Album Art"
+msgstr "ఆల్బమ్ చిత్రం"
+
+#: ../plugins/gtkui/interface.c:1405
+msgid "Artist - Album"
+msgstr "కళాకారుడు - ఆల్బమ్"
+
+#: ../plugins/gtkui/interface.c:1406 ../plugins/gtkui/plcommon.c:877
+msgid "Artist"
+msgstr "కళాకారుడు"
+
+#: ../plugins/gtkui/interface.c:1407 ../plugins/gtkui/interface.c:1794
+msgid "Album"
+msgstr "ఆల్బమ్"
+
+#: ../plugins/gtkui/interface.c:1408 ../plugins/gtkui/prefwin.c:595
+msgid "Title"
+msgstr "శీర్షిక"
+
+#: ../plugins/gtkui/interface.c:1409
+msgid "Length"
+msgstr "నిడివి"
+
+#: ../plugins/gtkui/interface.c:1410 ../plugins/gtkui/interface.c:1793
+msgid "Track"
+msgstr "ట్రాక్"
+
+#: ../plugins/gtkui/interface.c:1411
+msgid "Band / Album Artist"
+msgstr "బ్యాండ్ / ఆల్బమ్ కళాకారుడు"
+
+#: ../plugins/gtkui/interface.c:1412 ../plugins/gtkui/plcommon.c:881
+msgid "Custom"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:1418 ../plugins/gtkui/interface.c:3096
+#: ../plugins/gtkui/deadbeef.glade.h:62
+msgid "Format:"
+msgstr "ఫార్మేట్:"
+
+#: ../plugins/gtkui/interface.c:1433 ../plugins/gtkui/deadbeef.glade.h:11
+msgid "Alignment:"
+msgstr "అనుగుణం:"
+
+#: ../plugins/gtkui/interface.c:1441
+msgid "Left"
+msgstr "ఎడమ"
+
+#: ../plugins/gtkui/interface.c:1442
+msgid "Right"
+msgstr "కుడి"
+
+#: ../plugins/gtkui/interface.c:1444 ../plugins/gtkui/deadbeef.glade.h:48
+#, no-c-format
+msgid ""
+"Format conversions (start with %):\n"
+" [a]rtist, [t]itle, al[b]um, [B]and, [C]omposer\n"
+" track[n]umber, [N]totaltracks,\n"
+" [l]ength, [y]ear, [g]enre, [c]omment,\n"
+" copy[r]ight, [f]ilename, [F]ullPathname, [T]ags,\n"
+" [d]irectory, [D]irectoryWithPath\n"
+"Example: %a - %t [%l]"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:1473 ../plugins/gtkui/interface.c:2900
+#: ../plugins/gtkui/interface.c:3012 ../plugins/gtkui/interface.c:3135
+#: ../plugins/gtkui/deadbeef.glade.h:148
+msgid "_Cancel"
+msgstr "రద్దుచేయి (_C)"
+
+#: ../plugins/gtkui/interface.c:1494 ../plugins/gtkui/interface.c:2921
+#: ../plugins/gtkui/interface.c:3033 ../plugins/gtkui/interface.c:3156
+#: ../plugins/gtkui/deadbeef.glade.h:156
+msgid "_OK"
+msgstr "సరే (_O)"
+
+#: ../plugins/gtkui/interface.c:1725 ../plugins/gtkui/deadbeef.glade.h:88
+msgid "Output plugin:"
+msgstr "అవుట్‌పుట్ ప్లగిన్:"
+
+#: ../plugins/gtkui/interface.c:1738 ../plugins/gtkui/deadbeef.glade.h:87
+msgid "Output device:"
+msgstr "అవుట్‌పుట్ పరికరం:"
+
+#: ../plugins/gtkui/interface.c:1747 ../plugins/gtkui/deadbeef.glade.h:122
+msgid "Sound"
+msgstr "ధ్వని"
+
+#: ../plugins/gtkui/interface.c:1756 ../plugins/gtkui/deadbeef.glade.h:12
+msgid "Allow dynamic samplerate switching"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:1764 ../plugins/gtkui/deadbeef.glade.h:111
+msgid "Samplerate conversion quality:"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:1783 ../plugins/gtkui/deadbeef.glade.h:108
+msgid "Replaygain mode:"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:1792
+msgid "Disable"
+msgstr "అచేతనంచేయి"
+
+#: ../plugins/gtkui/interface.c:1796 ../plugins/gtkui/deadbeef.glade.h:109
+msgid "Replaygain peak scale"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:1804 ../plugins/gtkui/deadbeef.glade.h:7
+msgid "Add files from command line (or file manager) to this playlist:"
+msgstr "ఆదేశ వరుస (లేదా ఫైల్ నిర్వాహకము) నుండి ఫైళ్ళను ఈ పాటలజాబితాకు జతచేయి"
+
+#: ../plugins/gtkui/interface.c:1813 ../plugins/gtkui/deadbeef.glade.h:110
+msgid "Resume previous session on startup"
+msgstr "ప్రారంభములో మునుపటి కొనసాగిన కాలాన్ని పునఃప్రారంభించు"
+
+#: ../plugins/gtkui/interface.c:1817 ../plugins/gtkui/deadbeef.glade.h:94
+msgid "Playback"
+msgstr "ప్లేబాక్"
+
+#: ../plugins/gtkui/interface.c:1826 ../plugins/gtkui/deadbeef.glade.h:16
+msgid "Close minimizes to tray"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:1830 ../plugins/gtkui/deadbeef.glade.h:81
+msgid "Middle mouse button closes playlist"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:1834 ../plugins/gtkui/deadbeef.glade.h:67
+msgid "Hide system tray icon"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:1838 ../plugins/gtkui/deadbeef.glade.h:139
+msgid "Use bold font for currently playing track"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:1842 ../plugins/gtkui/deadbeef.glade.h:66
+msgid "Hide \"Delete from disk\" context menu item"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:1850 ../plugins/gtkui/deadbeef.glade.h:134
+msgid "Titlebar text while playing:"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:1864 ../plugins/gtkui/deadbeef.glade.h:135
+msgid "Titlebar text while stopped:"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:1874 ../plugins/gtkui/deadbeef.glade.h:63
+msgid "GUI"
+msgstr "GUI"
+
+#: ../plugins/gtkui/interface.c:1888 ../plugins/gtkui/interface.c:1932
+#: ../plugins/gtkui/deadbeef.glade.h:89
+msgid "Override"
+msgstr "తిరస్కరించు"
+
+#: ../plugins/gtkui/interface.c:1897 ../plugins/gtkui/deadbeef.glade.h:46
+msgid "Foreground"
+msgstr "ముందుభాగము"
+
+#: ../plugins/gtkui/interface.c:1904 ../plugins/gtkui/deadbeef.glade.h:14
+msgid "Background"
+msgstr "నేపథ్యం"
+
+#: ../plugins/gtkui/interface.c:1923 ../plugins/gtkui/deadbeef.glade.h:116
+msgid "Seekbar/Volumebar colors"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:1941 ../plugins/gtkui/deadbeef.glade.h:80
+msgid "Middle"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:1948 ../plugins/gtkui/deadbeef.glade.h:73
+msgid "Light"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:1955 ../plugins/gtkui/deadbeef.glade.h:23
+msgid "Dark"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:1986 ../plugins/gtkui/deadbeef.glade.h:15
+msgid "Base"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:1993 ../plugins/gtkui/deadbeef.glade.h:129
+msgid "Tab strip colors"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:2002 ../plugins/gtkui/deadbeef.glade.h:90
+msgid "Override (looses GTK treeview theming, but speeds up rendering)"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:2011 ../plugins/gtkui/deadbeef.glade.h:34
+msgid "Even row"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:2018 ../plugins/gtkui/deadbeef.glade.h:85
+msgid "Odd row"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:2037 ../plugins/gtkui/deadbeef.glade.h:132
+msgid "Text"
+msgstr "పాఠ్యం"
+
+#: ../plugins/gtkui/interface.c:2044 ../plugins/gtkui/deadbeef.glade.h:118
+msgid "Selected row"
+msgstr "ఎంచుకున్న అడ్డవరుస"
+
+#: ../plugins/gtkui/interface.c:2063 ../plugins/gtkui/deadbeef.glade.h:119
+msgid "Selected text"
+msgstr "ఎంచుకున్న పాఠ్యం"
+
+#: ../plugins/gtkui/interface.c:2076 ../plugins/gtkui/deadbeef.glade.h:21
+msgid "Cursor"
+msgstr "కర్సరు"
+
+#: ../plugins/gtkui/interface.c:2089 ../plugins/gtkui/deadbeef.glade.h:95
+msgid "Playlist colors"
+msgstr "పాటలజాబితా రంగులు"
+
+#: ../plugins/gtkui/interface.c:2093 ../plugins/gtkui/deadbeef.glade.h:17
+msgid "Colors"
+msgstr "రంగులు"
+
+#: ../plugins/gtkui/interface.c:2102 ../plugins/gtkui/deadbeef.glade.h:31
+msgid "Enable Proxy Server"
+msgstr "ప్రోక్సీ సేవికను చేతనపరుచు"
+
+#: ../plugins/gtkui/interface.c:2110 ../plugins/gtkui/deadbeef.glade.h:101
+msgid "Proxy Server Address:"
+msgstr "ప్రోక్సీ సేవిక చిరునామా:"
+
+#: ../plugins/gtkui/interface.c:2124 ../plugins/gtkui/deadbeef.glade.h:102
+msgid "Proxy Server Port:"
+msgstr "ప్రోక్సీ సేవిక పోర్టు:"
+
+#: ../plugins/gtkui/interface.c:2138 ../plugins/gtkui/deadbeef.glade.h:103
+msgid "Proxy Type:"
+msgstr "ప్రోక్సీ రకం:"
+
+#: ../plugins/gtkui/interface.c:2157 ../plugins/gtkui/deadbeef.glade.h:104
+msgid "Proxy Username:"
+msgstr "ప్రోక్సీ వాడుకరిపేరు:"
+
+#: ../plugins/gtkui/interface.c:2170 ../plugins/gtkui/deadbeef.glade.h:100
+msgid "Proxy Password:"
+msgstr "ప్రోక్సీ సంకేతపదం:"
+
+#: ../plugins/gtkui/interface.c:2180 ../plugins/gtkui/deadbeef.glade.h:82
+msgid "Network"
+msgstr "నెట్‌వర్క్"
+
+#: ../plugins/gtkui/interface.c:2208 ../plugins/gtkui/deadbeef.glade.h:143
+msgid "Write ID3v2"
+msgstr "ID3v2 వ్రాయి"
+
+#: ../plugins/gtkui/interface.c:2212 ../plugins/gtkui/interface.c:2339
+#: ../plugins/gtkui/deadbeef.glade.h:142
+msgid "Write ID3v1"
+msgstr "ID3v1 వ్రాయి"
+
+#: ../plugins/gtkui/interface.c:2216 ../plugins/gtkui/interface.c:2295
+#: ../plugins/gtkui/interface.c:2335 ../plugins/gtkui/deadbeef.glade.h:141
+msgid "Write APEv2"
+msgstr "APEv2 వ్రాయి"
+
+#: ../plugins/gtkui/interface.c:2224 ../plugins/gtkui/interface.c:2303
+#: ../plugins/gtkui/deadbeef.glade.h:128
+msgid "Strip ID3v2"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:2228 ../plugins/gtkui/interface.c:2351
+#: ../plugins/gtkui/deadbeef.glade.h:127
+msgid "Strip ID3v1"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:2232 ../plugins/gtkui/interface.c:2307
+#: ../plugins/gtkui/interface.c:2347 ../plugins/gtkui/deadbeef.glade.h:126
+msgid "Strip APEv2"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:2240 ../plugins/gtkui/deadbeef.glade.h:69
+msgid "ID3v2 version"
+msgstr "ID3v2 వర్షన్"
+
+#: ../plugins/gtkui/interface.c:2247
+msgid "2.3 (Recommended)"
+msgstr "2.3 (సిఫారసుచేయబడింది)"
+
+#: ../plugins/gtkui/interface.c:2248
+msgid "2.4"
+msgstr "2.4"
+
+#: ../plugins/gtkui/interface.c:2254 ../plugins/gtkui/deadbeef.glade.h:68
+msgid "ID3v1 character encoding (default is iso8859-1)"
+msgstr "ID3v1 అక్షరపు ఎన్‌కోడింగ్ (iso8859-1 అనేది అప్రమేయము)"
+
+#: ../plugins/gtkui/interface.c:2291 ../plugins/gtkui/deadbeef.glade.h:144
+msgid "Write ID3v2.4"
+msgstr "ID3v2.4 వ్రాయి"
+
+#: ../plugins/gtkui/interface.c:2360 ../plugins/gtkui/deadbeef.glade.h:131
+msgid "Tag writer"
+msgstr "ట్యాగ్ వ్రైటర్"
+
+#: ../plugins/gtkui/interface.c:2391 ../plugins/gtkui/deadbeef.glade.h:24
+msgid "Description:"
+msgstr "వివరణ:"
+
+#: ../plugins/gtkui/interface.c:2406 ../plugins/gtkui/deadbeef.glade.h:13
+msgid "Author(s):"
+msgstr "మూలకర్త(లు):"
+
+#: ../plugins/gtkui/interface.c:2421 ../plugins/gtkui/deadbeef.glade.h:30
+msgid "Email:"
+msgstr "ఇమెయిల్:"
+
+#: ../plugins/gtkui/interface.c:2436 ../plugins/gtkui/deadbeef.glade.h:140
+msgid "Website:"
+msgstr "వెబ్‌సైట్:"
+
+#: ../plugins/gtkui/interface.c:2467 ../plugins/gtkui/deadbeef.glade.h:19
+msgid "Configure"
+msgstr "స్వరూపించు"
+
+#: ../plugins/gtkui/interface.c:2471 ../plugins/gtkui/deadbeef.glade.h:96
+msgid "Plugins"
+msgstr "ప్లగిన్‌లు"
+
+#: ../plugins/gtkui/interface.c:2853 ../plugins/gtkui/deadbeef.glade.h:162
+msgid "editplaylistdlg"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:2980 ../plugins/gtkui/deadbeef.glade.h:138
+msgid "URL:"
+msgstr "URL:"
+
+#: ../plugins/gtkui/interface.c:3081 ../plugins/gtkui/deadbeef.glade.h:64
+msgid "Group By"
+msgstr ""
+
+#: ../plugins/gtkui/interface.c:3106 ../plugins/gtkui/deadbeef.glade.h:56
+#, no-c-format
+msgid ""
+"Format conversions (start with %):\n"
+" [a]rtist, [t]itle, al[b]um, [B]and, [C]omposer\n"
+" track[n]umber, [N]totaltracks,\n"
+" [l]ength, [y]ear, [g]enre, [c]omment,\n"
+" copy[r]ight, [f]ilename, [T]ags\n"
+"Example: %a - %t [%l]"
+msgstr ""
+
+#: ../plugins/gtkui/mainplaylist.c:301 ../plugins/gtkui/search.c:434
+msgid "Artist / Album"
+msgstr "కళాకారుడు / ఆల్బమ్"
+
+#: ../plugins/gtkui/mainplaylist.c:302 ../plugins/gtkui/search.c:435
+msgid "Track No"
+msgstr "ట్రాక్ సంఖ్య"
+
+#: ../plugins/gtkui/mainplaylist.c:303 ../plugins/gtkui/search.c:436
+msgid "Title / Track Artist"
+msgstr "శీర్షిక / ట్రాక్ కళాకారుడు"
+
+#: ../plugins/gtkui/mainplaylist.c:304 ../plugins/gtkui/search.c:437
+#: ../plugins/gtkui/trkproperties.c:175
+msgid "Duration"
+msgstr "నిడివి"
+
+#: ../plugins/gtkui/plcommon.c:323
+msgid "Delete files from disk"
+msgstr "డిస్కు నుండి ఫైళ్ళను తీసివేయి"
+
+#: ../plugins/gtkui/plcommon.c:324
+msgid ""
+"Files will be lost. Proceed?\n"
+"(This dialog can be turned off in GTKUI plugin settings)"
+msgstr ""
+"ఫైళ్ళను కోల్పోతారు. కొనసాగుతారా?\n"
+"(ఈ డైలాగును GTKUI ప్లగిన్ అమరికలలోకి వెళ్ళి ఆపివేయవచ్చు)"
+
+#: ../plugins/gtkui/plcommon.c:325 ../plugins/gtkui/trkproperties.c:56
+msgid "Warning"
+msgstr "హెచ్చరిక"
+
+#: ../plugins/gtkui/plcommon.c:401
+msgid "Add to playback queue"
+msgstr "ప్లేబాక్ వరుసకు జతచేయి"
+
+#: ../plugins/gtkui/plcommon.c:406
+msgid "Remove from playback queue"
+msgstr "ప్లేబాక్ వరుస నుండి తొలగించు"
+
+#: ../plugins/gtkui/plcommon.c:414
+msgid "Reload metadata"
+msgstr "మెటాడేటాను మళ్ళీ నింపు"
+
+#: ../plugins/gtkui/plcommon.c:433
+msgid "Remove from disk"
+msgstr "డిస్కు నుండి తొలగించు"
+
+#: ../plugins/gtkui/plcommon.c:719 ../plugins/gtkui/plcommon.c:844
+msgid "Add column"
+msgstr "నిలువువరుసను జతచేయి"
+
+#: ../plugins/gtkui/plcommon.c:749 ../plugins/gtkui/plcommon.c:848
+msgid "Edit column"
+msgstr "నిలువువరుసను సవరించు"
+
+#: ../plugins/gtkui/plcommon.c:852
+msgid "Remove column"
+msgstr "నిలువువరుసను తొలగించు"
+
+#: ../plugins/gtkui/plcommon.c:862
+msgid "Group by"
+msgstr ""
+
+#: ../plugins/gtkui/plcommon.c:869
+msgid "None"
+msgstr "ఏదీకాదు"
+
+#: ../plugins/gtkui/plcommon.c:873
+msgid "Artist/Date/Album"
+msgstr "కళాకారుడు/తేదీ/ఆల్బమ్"
+
+#: ../plugins/gtkui/pluginconf.c:41
+msgid "Open file..."
+msgstr "ఫైల్ తెరువు..."
+
+#: ../plugins/gtkui/pluginconf.c:142
+#, c-format
+msgid "Setup %s"
+msgstr "%s అమర్చు"
+
+#: ../plugins/gtkui/prefwin.c:98
+msgid "Default Audio Device"
+msgstr "అప్రమేయ ఆడియా పరికరం"
+
+#: ../plugins/gtkui/prefwin.c:312
+msgid "Add"
+msgstr "జతచేయి"
+
+#: ../plugins/gtkui/prefwin.c:322
+msgid "Global Hotkeys"
+msgstr "సార్వత్రిక హాట్ కీలు"
+
+#: ../plugins/gtkui/prefwin.c:384
+msgid "Slot"
+msgstr ""
+
+#: ../plugins/gtkui/prefwin.c:385
+msgid "Key combination"
+msgstr "కీ కాంబినేషన్"
+
+#. output plugin selection
+#: ../plugins/gtkui/prefwin.c:464 ../plugins/gtkui/prefwin.c:676
+#: ../plugins.c:872
+msgid "ALSA output plugin"
+msgstr "ALSA అవుట్‌పుట్ ప్లగిన్"
+
+#: ../plugins/gtkui/progress.c:64
+msgid "Initializing..."
+msgstr "ఆరంభిస్తున్నది..."
+
+#: ../plugins/gtkui/trkproperties.c:53
+msgid "You've modified data for this track."
+msgstr "ఈ ట్రాక్ డేటాను మీరు సవరించారు."
+
+#: ../plugins/gtkui/trkproperties.c:55
+msgid "Really close the window?"
+msgstr "నిజంగానే విండో మూసివేయాలా?"
+
+#: ../plugins/gtkui/trkproperties.c:178
+msgid "Tag Type(s)"
+msgstr "ట్యాగ్ రకము(లు)"
+
+#: ../plugins/gtkui/trkproperties.c:180
+msgid "Embedded Cuesheet"
+msgstr ""
+
+#: ../plugins/gtkui/trkproperties.c:180
+msgid "Yes"
+msgstr "అవును"
+
+#: ../plugins/gtkui/trkproperties.c:180
+msgid "No"
+msgstr "కాదు"
+
+#: ../plugins/gtkui/trkproperties.c:182
+msgid "Codec"
+msgstr "కొడెక్"
+
+#: ../plugins/gtkui/trkproperties.c:250 ../plugins/gtkui/trkproperties.c:262
+msgid "Key"
+msgstr "కీ"
+
+#: ../plugins/gtkui/trkproperties.c:251 ../plugins/gtkui/trkproperties.c:263
+msgid "Value"
+msgstr "విలువ"
+
+#: ../plugins/notify/notify.c:138
+msgid "DeaDBeeF now playing"
+msgstr "డెడ్‌బీఫ్ ఇప్పుడు ఆడిస్తున్నది"
+
+#: ../main.c:89
+#, c-format
+msgid "Usage: deadbeef [options] [file(s)]\n"
+msgstr "వాడుక: deadbeef [options] [file(s)]\n"
+
+#: ../main.c:90
+#, c-format
+msgid "Options:\n"
+msgstr "ఐచ్ఛికాలు:\n"
+
+#: ../main.c:91
+#, c-format
+msgid " --help or -h Print help (this message) and exit\n"
+msgstr " --help or -h సహాయాన్ని ముద్రించు (ఈ సందేశమును) మరియు నిష్క్రమించు\n"
+
+#: ../main.c:92
+#, c-format
+msgid " --quit Quit player\n"
+msgstr " --quit ప్లేయర్ నుండి నిష్క్రమిస్తుంది\n"
+
+#: ../main.c:93
+#, c-format
+msgid " --version Print version info and exit\n"
+msgstr " --version వర్షన్ సమాచారాన్ని ముద్రించి, నిష్క్రమించు\n"
+
+#: ../main.c:94
+#, c-format
+msgid " --play Start playback\n"
+msgstr " --play ప్లేబాక్ ప్రారంభించు\n"
+
+#: ../main.c:95
+#, c-format
+msgid " --stop Stop playback\n"
+msgstr " --stop ప్లేబాక్ ఆపుము\n"
+
+#: ../main.c:96
+#, c-format
+msgid " --pause Pause playback\n"
+msgstr " --pause ప్లేబాక్ నిలిపివేయి\n"
+
+#: ../main.c:97
+#, c-format
+msgid " --next Next song in playlist\n"
+msgstr " --next పాటలజాబితాలో తదుపరి పాట\n"
+
+#: ../main.c:98
+#, c-format
+msgid " --prev Previous song in playlist\n"
+msgstr " --prev పాటలజాబితాలో మునుపటి పాట\n"
+
+#: ../main.c:99
+#, c-format
+msgid " --random Random song in playlist\n"
+msgstr " --random పాటల జాబితాలో యాదృచ్ఛిక పాట\n"
+
+#: ../main.c:100
+#, c-format
+msgid " --queue Append file(s) to existing playlist\n"
+msgstr " --queue ఉన్నటువంటి పాటలజాబితాకు ఫైళ్ళను జతచేయి\n"
+
+#: ../main.c:101
+#, c-format
+msgid " --nowplaying FMT Print formatted track name to stdout\n"
+msgstr ""
+
+#: ../main.c:102
+#, c-format
+msgid ""
+" FMT %%-syntax: [a]rtist, [t]itle, al[b]um,\n"
+" [l]ength, track[n]umber, [y]ear, [c]omment,\n"
+" copy[r]ight, [e]lapsed\n"
+msgstr ""
+
+#: ../main.c:105
+#, c-format
+msgid ""
+" e.g.: --nowplaying \"%%a - %%t\" should print \"artist "
+"- title\"\n"
+msgstr ""
+
+#: ../playlist.c:377 ../playlist.c:2289
+msgid "Default"
+msgstr "అప్రమేయం"
+
+#: ../plugins/gtkui/deadbeef.glade.h:1
+msgid ""
+"2.3 (Recommended)\n"
+"2.4"
+msgstr ""
+"2.3 (సిఫారసుచేయబడింది)\n"
+"2.4"
+
+#: ../plugins/gtkui/deadbeef.glade.h:26
+msgid ""
+"Disable\n"
+"Track\n"
+"Album"
+msgstr ""
+"అచేతనపరుచు\n"
+"ట్రాక్\n"
+"ఆల్బమ్"
+
+#: ../plugins/gtkui/deadbeef.glade.h:35
+msgid ""
+"File number\n"
+"Playing\n"
+"Album Art\n"
+"Artist - Album\n"
+"Artist\n"
+"Album\n"
+"Title\n"
+"Length\n"
+"Track\n"
+"Band / Album Artist\n"
+"Custom"
+msgstr ""
+"ఫైల్ సంఖ్య\n"
+"ఆడుతున్నది\n"
+"ఆల్బమ్ ముఖచిత్రం\n"
+"కళాకారుడు - ఆల్బమ్\n"
+"కళాకారుడు\n"
+"ఆల్బమ్\n"
+"శీర్షిక\n"
+"పొడవు\n"
+"ట్రాక్\n"
+"బ్యాండ్ / ఆల్బమ్ కళాకారుడు\n"
+"అనురూపితం"
+
+#: ../plugins/gtkui/deadbeef.glade.h:71
+msgid ""
+"Left\n"
+"Right"
+msgstr ""
+"ఎడమ\n"
+"కుడి"
+
+#: ../plugins/gtkui/support.c:90 ../plugins/gtkui/support.c:114
+#, c-format
+msgid "Couldn't find pixmap file: %s"
+msgstr ""
+
+#: ../plugins/vorbis/vcedit.c:129 ../plugins/vorbis/vcedit.c:155
+msgid "Couldn't get enough memory for input buffering."
+msgstr "ఇన్‌పుట్ బఫరింగ్ కొరకు సరితగిన మెమోరీ పొందలేదు."
+
+#: ../plugins/vorbis/vcedit.c:179 ../plugins/vorbis/vcedit.c:550
+msgid "Error reading first page of Ogg bitstream."
+msgstr "Ogg బిట్‌స్ట్రీమ్ యొక్క మెదట పేజీని చదువుటలో దోషము."
+
+#: ../plugins/vorbis/vcedit.c:185 ../plugins/vorbis/vcedit.c:557
+msgid "Error reading initial header packet."
+msgstr ""
+
+#: ../plugins/vorbis/vcedit.c:237
+msgid "Couldn't get enough memory to register new stream serial number."
+msgstr ""
+
+#: ../plugins/vorbis/vcedit.c:505
+msgid "Input truncated or empty."
+msgstr ""
+
+#: ../plugins/vorbis/vcedit.c:507
+msgid "Input is not an Ogg bitstream."
+msgstr "ఇన్‌పుట్ Ogg బిట్‌స్ట్రీమ్ కాదు"
+
+#: ../plugins/vorbis/vcedit.c:565
+msgid "Ogg bitstream does not contain Vorbis data."
+msgstr "Ogg బిట్‌స్ట్రీమ్ Vorbis డేటాను కలిగిలేదు."
+
+#: ../plugins/vorbis/vcedit.c:578
+msgid "EOF before recognised stream."
+msgstr ""
+
+#: ../plugins/vorbis/vcedit.c:594
+msgid "Ogg bitstream does not contain a supported data-type."
+msgstr ""
+
+#: ../plugins/vorbis/vcedit.c:638
+msgid "Corrupt secondary header."
+msgstr ""
+
+#: ../plugins/vorbis/vcedit.c:659
+msgid "EOF before end of Vorbis headers."
+msgstr ""
+
+#: ../plugins/vorbis/vcedit.c:834
+msgid "Corrupt or missing data, continuing..."
+msgstr "పాడైన లేక తప్పిపోయిన డేటా వుండవచ్చు, కొనసాగుతుంది..."
+
+#: ../plugins/vorbis/vcedit.c:874
+msgid ""
+"Error writing stream to output. Output stream may be corrupted or truncated."
+msgstr ""
+
+#: ../plugins/wildmidi/wildmidiplug.c:162
+#, c-format
+msgid ""
+"wildmidi: freepats config file not found. Please install timidity-freepats "
+"package, or specify path to freepats.cfg in the plugin settings."
+msgstr ""
diff --git a/scripts/portable_package_static.sh b/scripts/portable_package_static.sh
index 129000b2..be8c75b6 100755
--- a/scripts/portable_package_static.sh
+++ b/scripts/portable_package_static.sh
@@ -54,7 +54,6 @@ tar jcvf ../portable_out/build/deadbeef-$VERSION-static-i686.tar.bz2\
$PLUGDIR/dumb.so\
$PLUGDIR/converter.so\
$PLUGDIR/converter_gtkui.so\
- $PLUGDIR/converter_gtkui.fallback.so\
$PLUGDIR/convpresets\
$PLUGDIR/pulse.so\
$PLUGDIR/dsp_libsrc.so\
diff --git a/scripts/portable_postbuild.sh b/scripts/portable_postbuild.sh
index 7fab1d6e..ae9b7ec1 100755
--- a/scripts/portable_postbuild.sh
+++ b/scripts/portable_postbuild.sh
@@ -45,10 +45,6 @@ fi
if [ -f ./plugins/gtkui/.libs/ddb_gui_GTK2.fallback.so ]; then
cp ./plugins/gtkui/.libs/ddb_gui_GTK2.fallback.so $PLUGDIR/
fi
-if [ -f ./plugins/converter/.libs/converter_gtkui.fallback.so ]; then
- cp ./plugins/converter/.libs/converter_gtkui.fallback.so $PLUGDIR/
-fi
-
#pixmaps
diff --git a/scripts/quickinstall.sh b/scripts/quickinstall.sh
index 20b89482..b7cda98b 100755
--- a/scripts/quickinstall.sh
+++ b/scripts/quickinstall.sh
@@ -42,3 +42,4 @@ cp ./plugins/converter/.libs/converter_gtkui.so /usr/local/lib/deadbeef/
cp ./plugins/soundtouch/ddb_soundtouch.so /usr/local/lib/deadbeef/
cp ./plugins/vfs_zip/.libs/vfs_zip.so /usr/local/lib/deadbeef/
cp ./plugins/mono2stereo/mono2stereo.so /usr/local/lib/deadbeef/
+cp ./plugins/medialib/.libs/medialib.so /usr/local/lib/deadbeef/
diff --git a/streamer.c b/streamer.c
index 2f137891..74398e34 100644
--- a/streamer.c
+++ b/streamer.c
@@ -1580,6 +1580,7 @@ streamer_dsp_init (void) {
int
streamer_init (void) {
+ streaming_terminate = 0;
#if WRITE_DUMP
out = fopen ("out.raw", "w+b");
#endif
diff --git a/streamer.h b/streamer.h
index c06fdf8b..a0414e46 100644
--- a/streamer.h
+++ b/streamer.h
@@ -121,4 +121,10 @@ streamer_dsp_refresh (void);
void
streamer_get_output_format (ddb_waveformat_t *fmt);
+void
+streamer_dsp_postinit (void);
+
+int
+streamer_dsp_chain_save (const char *fname, ddb_dsp_context_t *chain);
+
#endif // __STREAMER_H
diff --git a/utf8.c b/utf8.c
index 4efb2ea6..6165742e 100644
--- a/utf8.c
+++ b/utf8.c
@@ -19,6 +19,12 @@
by Jeff Bezanson
placed in the public domain Fall 2005
*/
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+#ifdef HAVE_ALLOCA_H
+# include <alloca.h>
+#endif
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
diff --git a/vfs_stdio.c b/vfs_stdio.c
index 840ee722..6f006efa 100644
--- a/vfs_stdio.c
+++ b/vfs_stdio.c
@@ -169,6 +169,7 @@ static DB_vfs_t plugin = {
.plugin.version_minor = 0,
.plugin.type = DB_PLUGIN_VFS,
.plugin.name = "stdio vfs",
+ .plugin.id = "vfs_stdio",
.plugin.descr = "Standard IO plugin\nUsed for reading normal local files\nIt is statically linked, so you can't delete it.",
.plugin.copyright =
"Copyright (C) 2009-2011 Alexey Yakovenko <waker@users.sourceforge.net>\n"
diff --git a/yasmwrapper.sh b/yasmwrapper.sh
new file mode 100755
index 00000000..1d0170f1
--- /dev/null
+++ b/yasmwrapper.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+ARGS=""
+for i in $@ ; do
+ #if [ "$i" != "-fPIC" ] && [ "$i" != "-DPIC" ]; then
+ if [ "$i" != "-fPIC" ]; then
+ ARGS="$ARGS $i"
+ fi
+done
+echo "exec: yasm $ARGS"
+yasm $ARGS