have to reset y_nudge if wiping out lang/locale
This commit is contained in:
parent
b5275ec578
commit
f296909c75
6 changed files with 35 additions and 27 deletions
|
|
@ -118,6 +118,12 @@
|
||||||
#define expected(x,y) (x)
|
#define expected(x,y) (x)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
|
||||||
|
#define MUST_CHECK __attribute__((warn_unused_result))
|
||||||
|
#else
|
||||||
|
#define MUST_CHECK
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef __powerpc__
|
#ifdef __powerpc__
|
||||||
// Ticks at 1/4 the memory bus clock (24.907667 MHz on Albert's Mac Cube)
|
// Ticks at 1/4 the memory bus clock (24.907667 MHz on Albert's Mac Cube)
|
||||||
|
|
|
||||||
|
|
@ -143,6 +143,7 @@ int num_font_styles_max = 0;
|
||||||
int text_state = 0;
|
int text_state = 0;
|
||||||
unsigned text_size = 4; // initial text size
|
unsigned text_size = 4; // initial text size
|
||||||
|
|
||||||
|
int button_label_y_nudge;
|
||||||
|
|
||||||
static void loadfonts_locale_filter(SDL_Surface * screen, const char *const dir, const char *restrict locale);
|
static void loadfonts_locale_filter(SDL_Surface * screen, const char *const dir, const char *restrict locale);
|
||||||
|
|
||||||
|
|
@ -259,7 +260,7 @@ TuxPaint_Font *load_locale_font(TuxPaint_Font * fallback, int size)
|
||||||
str,
|
str,
|
||||||
SDL_GetError()
|
SDL_GetError()
|
||||||
);
|
);
|
||||||
smash_i18n();
|
button_label_y_nudge = smash_i18n();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -177,6 +177,7 @@ extern style_info **user_font_styles;
|
||||||
extern int num_font_styles;
|
extern int num_font_styles;
|
||||||
extern int num_font_styles_max;
|
extern int num_font_styles_max;
|
||||||
|
|
||||||
|
extern int button_label_y_nudge;
|
||||||
|
|
||||||
int compar_fontgroup(const void *v1, const void *v2);
|
int compar_fontgroup(const void *v1, const void *v2);
|
||||||
int compar_fontkiller(const void *v1, const void *v2);
|
int compar_fontkiller(const void *v1, const void *v2);
|
||||||
|
|
|
||||||
44
src/i18n.c
44
src/i18n.c
|
|
@ -346,15 +346,15 @@ static void ctype_utf8(void)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Determine the current language/locale, and set the language string: */
|
/* Determine the current language/locale, and set the language string: */
|
||||||
|
|
||||||
|
static int set_current_language(void) MUST_CHECK;
|
||||||
static int set_current_language(void)
|
static int set_current_language(void)
|
||||||
{
|
{
|
||||||
char *loc, *baseloc;
|
char *loc, *baseloc;
|
||||||
int i, found;
|
int i, found;
|
||||||
int y_nudge;
|
int y_nudge = 0;
|
||||||
|
|
||||||
y_nudge = 0;
|
|
||||||
|
|
||||||
bindtextdomain("tuxpaint", LOCALEDIR);
|
bindtextdomain("tuxpaint", LOCALEDIR);
|
||||||
/* Old version of glibc does not have bind_textdomain_codeset() */
|
/* Old version of glibc does not have bind_textdomain_codeset() */
|
||||||
|
|
@ -368,18 +368,13 @@ static int set_current_language(void)
|
||||||
langint = LANG_EN;
|
langint = LANG_EN;
|
||||||
|
|
||||||
|
|
||||||
#ifndef WIN32
|
#ifndef _WIN32
|
||||||
loc = setlocale(LC_MESSAGES, NULL); // NULL: Used to direct setlocale() to query the current internationalised environment and return the name of the locale().
|
loc = setlocale(LC_MESSAGES, NULL); // NULL: Used to direct setlocale() to query the current internationalised environment and return the name of the locale().
|
||||||
|
|
||||||
// FIXME: I'm getting back en_US.UTF-8 even after LC_ALL has been putenv()'d...?? -bjk 2008.02.19
|
// FIXME: I'm getting back en_US.UTF-8 even after LC_ALL has been putenv()'d...?? -bjk 2008.02.19
|
||||||
|
|
||||||
if (loc != NULL)
|
if (loc && strstr(loc, "LC_MESSAGES"))
|
||||||
{
|
loc = getenv("LANG");
|
||||||
if (strstr(loc, "LC_MESSAGES") != NULL)
|
|
||||||
{
|
|
||||||
loc = getenv("LANG");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#else
|
#else
|
||||||
bind_textdomain_codeset("tuxpaint", "UTF-8");
|
bind_textdomain_codeset("tuxpaint", "UTF-8");
|
||||||
loc = getenv("LANGUAGE");
|
loc = getenv("LANGUAGE");
|
||||||
|
|
@ -400,10 +395,10 @@ static int set_current_language(void)
|
||||||
|
|
||||||
//debug(loc);
|
//debug(loc);
|
||||||
|
|
||||||
if (loc != NULL)
|
if (loc)
|
||||||
{
|
{
|
||||||
baseloc = strdup(loc);
|
baseloc = strdup(loc);
|
||||||
if (strchr(baseloc, '.') != NULL)
|
if (strchr(baseloc, '.'))
|
||||||
strcpy(strchr(baseloc, '.'), "\0");
|
strcpy(strchr(baseloc, '.'), "\0");
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -464,7 +459,7 @@ static int set_current_language(void)
|
||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return(y_nudge);
|
return y_nudge;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -665,9 +660,10 @@ static void show_locale_usage(FILE * f, const char *const prg)
|
||||||
"\n", prg);
|
"\n", prg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setup_language(const char *const prg, int * y_nudge)
|
static int setup_language(const char *const prg) MUST_CHECK;
|
||||||
|
static int setup_language(const char *const prg)
|
||||||
{
|
{
|
||||||
if (langstr != NULL)
|
if (langstr)
|
||||||
{
|
{
|
||||||
int i =
|
int i =
|
||||||
sizeof language_to_locale_array / sizeof language_to_locale_array[0];
|
sizeof language_to_locale_array / sizeof language_to_locale_array[0];
|
||||||
|
|
@ -720,13 +716,18 @@ static void setup_language(const char *const prg, int * y_nudge)
|
||||||
langstr = NULL;
|
langstr = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
*y_nudge = set_current_language();
|
return set_current_language();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// handle --locale arg
|
// handle --locale arg
|
||||||
static void do_locale_option(const char *const arg)
|
static void do_locale_option(const char *const arg)
|
||||||
{
|
{
|
||||||
|
if(!strcmp(arg,"help"))
|
||||||
|
{
|
||||||
|
show_locale_usage(stdout,"tuxpaint");
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
int len = strlen(arg) + 6;
|
int len = strlen(arg) + 6;
|
||||||
char *str = malloc(len);
|
char *str = malloc(len);
|
||||||
snprintf(str, len, "LANG=%s", arg);
|
snprintf(str, len, "LANG=%s", arg);
|
||||||
|
|
@ -738,22 +739,23 @@ static void do_locale_option(const char *const arg)
|
||||||
ctype_utf8();
|
ctype_utf8();
|
||||||
}
|
}
|
||||||
|
|
||||||
void setup_i18n(const char *restrict lang, const char *restrict locale, int *button_label_y_nudge)
|
int setup_i18n(const char *restrict lang, const char *restrict locale)
|
||||||
{
|
{
|
||||||
printf("lang \"%s\", locale \"%s\"\n", lang, locale);
|
printf("lang \"%s\", locale \"%s\"\n", lang, locale);
|
||||||
if(lang)
|
if(lang)
|
||||||
set_langstr(lang);
|
set_langstr(lang);
|
||||||
if(locale)
|
if(locale)
|
||||||
do_locale_option(locale);
|
do_locale_option(locale);
|
||||||
setup_language("tuxpaint", button_label_y_nudge);
|
int y_nudge = setup_language("tuxpaint");
|
||||||
printf("lang_prefixes[%d] is \"%s\"\n", get_current_language(), lang_prefixes[get_current_language()]);
|
printf("lang_prefixes[%d] is \"%s\"\n", get_current_language(), lang_prefixes[get_current_language()]);
|
||||||
|
return y_nudge;
|
||||||
}
|
}
|
||||||
|
|
||||||
void smash_i18n(void)
|
int smash_i18n(void)
|
||||||
{
|
{
|
||||||
putenv((char *) "LANG=C");
|
putenv((char *) "LANG=C");
|
||||||
putenv((char *) "OUTPUT_CHARSET=C");
|
putenv((char *) "OUTPUT_CHARSET=C");
|
||||||
setlocale(LC_ALL, "C");
|
setlocale(LC_ALL, "C");
|
||||||
ctype_utf8();
|
ctype_utf8();
|
||||||
set_current_language();
|
return set_current_language();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -147,7 +147,7 @@ extern const char *lang_prefix, *short_lang_prefix;
|
||||||
/* Function prototypes: */
|
/* Function prototypes: */
|
||||||
|
|
||||||
int get_current_language(void);
|
int get_current_language(void);
|
||||||
void setup_i18n(const char *restrict lang, const char *restrict locale, int *button_label_y_nudge);
|
int setup_i18n(const char *restrict lang, const char *restrict locale) MUST_CHECK;
|
||||||
void smash_i18n(void);
|
int smash_i18n(void) MUST_CHECK;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -1167,8 +1167,6 @@ static SDL_Surface *img_title_on, *img_title_off,
|
||||||
static SDL_Surface *img_title_names[NUM_TITLES];
|
static SDL_Surface *img_title_names[NUM_TITLES];
|
||||||
static SDL_Surface *img_tools[NUM_TOOLS], *img_tool_names[NUM_TOOLS];
|
static SDL_Surface *img_tools[NUM_TOOLS], *img_tool_names[NUM_TOOLS];
|
||||||
|
|
||||||
static int button_label_y_nudge;
|
|
||||||
|
|
||||||
static SDL_Surface *thumbnail(SDL_Surface * src, int max_x, int max_y,
|
static SDL_Surface *thumbnail(SDL_Surface * src, int max_x, int max_y,
|
||||||
int keep_aspect);
|
int keep_aspect);
|
||||||
static SDL_Surface *thumbnail2(SDL_Surface * src, int max_x, int max_y,
|
static SDL_Surface *thumbnail2(SDL_Surface * src, int max_x, int max_y,
|
||||||
|
|
@ -19077,7 +19075,7 @@ static void setup_config(char *argv[])
|
||||||
|
|
||||||
datadir = tmpcfg.datadir ? tmpcfg.datadir : savedir;
|
datadir = tmpcfg.datadir ? tmpcfg.datadir : savedir;
|
||||||
|
|
||||||
setup_i18n(tmpcfg.parsertmp_lang, tmpcfg.parsertmp_locale, &button_label_y_nudge);
|
button_label_y_nudge = setup_i18n(tmpcfg.parsertmp_lang, tmpcfg.parsertmp_locale);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue