Automaticall convert message to console charset, use utf8 for GTK2 Gui

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@17773 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
reimar 2006-03-08 12:45:48 +00:00
parent 1b8e9839b0
commit 1519205f24
4 changed files with 70 additions and 1 deletions

View File

@ -61,7 +61,6 @@ Pixmap guiIconMask;
void gtkInit( void )
{
mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"[widget] init GTK ...\n" );
gtk_set_locale();
gtk_init( 0,NULL );
// gdk_set_use_xshm( TRUE );

View File

@ -6,6 +6,9 @@
{"really-quiet", &verbose, CONF_TYPE_FLAG, CONF_GLOBAL, 0, -10, NULL},
{"v", cfg_inc_verbose, CONF_TYPE_FUNC, CONF_GLOBAL|CONF_NOSAVE, 0, 0, NULL},
{"msglevel", msgl_config, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL},
#ifdef USE_ICONV
{"msgcharset", &mp_msg_charset, CONF_TYPE_STRING, CONF_GLOBAL, 0, 0, NULL},
#endif
{"include", cfg_include, CONF_TYPE_FUNC_PARAM, CONF_NOSAVE, 0, 0, NULL},
#ifdef WIN32
{"priority", &proc_priority, CONF_TYPE_STRING, 0, 0, 0, NULL},
@ -302,6 +305,7 @@
extern int quiet;
extern int verbose;
extern char *mp_msg_charset;
// codec/filter opts: (defined at libmpcodecs/vd.c)
extern float screen_size_xy;

17
configure vendored
View File

@ -6958,6 +6958,20 @@ else
fi
# --------------- GUI specific tests end -------------------
if test "$_charset" = "noconv" ; then
_charset=""
elif test -z "$_charset" ; then
if test "$_gtk1" = yes ; then
_charset=`cat ${_mp_help}.charset`
else
_charset=utf8
fi
fi
if test "$_charset" ; then
_def_charset="#define MSG_CHARSET \"$_charset\""
else
_def_charset="#undef MSG_CHARSET"
fi
#############################################################################
@ -7404,6 +7418,9 @@ cat > config.h << EOF
/* use GNU internationalization */
$_def_i18n
/* name of messages charset */
$_def_charset
/* Runtime CPU detection */
$_def_runtime_cpudetection

View File

@ -7,6 +7,14 @@
#include "config.h"
#ifdef USE_LANGINFO
#include <locale.h>
#include <langinfo.h>
#endif
#ifdef USE_ICONV
#include <iconv.h>
#endif
#if defined(FOR_MENCODER) || defined(CODECS2HTML)
#undef HAVE_NEW_GUI
#endif
@ -23,6 +31,11 @@ extern int use_gui;
int mp_msg_levels[MSGT_MAX]; // verbose level of this module. inited to -2
int mp_msg_level_all = MSGL_STATUS;
int verbose = 0;
#ifdef USE_ICONV
char *mp_msg_charset = NULL;
static char *old_charset = NULL;
static iconv_t msgiconv;
#endif
void mp_msg_init(void){
int i;
@ -43,6 +56,16 @@ void mp_msg_init(void){
#endif
#endif
for(i=0;i<MSGT_MAX;i++) mp_msg_levels[i] = -2;
#ifdef USE_ICONV
mp_msg_charset = getenv("MPLAYER_CHARSET");
#ifdef USE_LANGINFO
if (!mp_msg_charset) {
setlocale(LC_CTYPE, "");
mp_msg_charset = nl_langinfo(CODESET);
setlocale(LC_CTYPE, "C");
}
#endif
#endif
}
int mp_msg_test(int mod, int lev)
@ -66,6 +89,32 @@ void mp_msg(int mod, int lev, const char *format, ... ){
guiMessageBox(lev, tmp);
#endif
#if defined(USE_ICONV) && defined(MSG_CHARSET)
if (mp_msg_charset && strcasecmp(mp_msg_charset, "noconv")) {
char tmp2[MSGSIZE_MAX];
size_t inlen = strlen(tmp), outlen = MSGSIZE_MAX;
char *in = tmp, *out = tmp2;
if (!old_charset || strcmp(old_charset, mp_msg_charset)) {
if (old_charset) {
free(old_charset);
iconv_close(msgiconv);
}
msgiconv = iconv_open(mp_msg_charset, MSG_CHARSET);
old_charset = strdup(mp_msg_charset);
}
memset(tmp2, 0, MSGSIZE_MAX);
while (iconv(msgiconv, &in, &inlen, &out, &outlen) == -1) {
if (!inlen || !outlen)
break;
*out++ = *in++;
outlen--; inlen--;
}
strncpy(tmp, tmp2, MSGSIZE_MAX);
tmp[MSGSIZE_MAX-1] = 0;
tmp[MSGSIZE_MAX-2] = '\n';
}
#endif
#ifdef MSG_USE_COLORS
/* that's only a silly color test */
#ifdef MP_ANNOY_ME