diff --git a/ChangeLog b/ChangeLog index dff289a95..cf3173947 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,20 @@ +2003-09-20 Tor Lillqvist + + * gtk-zip.sh.in: Don't use zip -r on the etc directory, to avoid + including editor backup files. List files we want explicitly. + + * gtk/gtkmain.c (_gtk_get_lc_ctype): New function. On Unix, just + calls setlocale (LC_CTYPE, NULL). On Windows, looks for the + LC_ALL, LC_CTYPE and LANG environment variables, than calls + g_win32_getlocale(). + + (gtk_get_default_language): Code snippet moved to above function, + call it. + + * gtk/gtkimmulticontext.c (gtk_im_multicontext_get_slave) + * gtk/gtkrc.c (gtk_rc_context_parse_file): Call + _gtk_get_lc_ctype() instead of setlocale(). + Fri Sep 19 18:15:31 2003 Soeren Sandmann * gtk/gtkpaned.c, gtk/gtkhpaned.c: implement RTL flipping diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index dff289a95..cf3173947 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,20 @@ +2003-09-20 Tor Lillqvist + + * gtk-zip.sh.in: Don't use zip -r on the etc directory, to avoid + including editor backup files. List files we want explicitly. + + * gtk/gtkmain.c (_gtk_get_lc_ctype): New function. On Unix, just + calls setlocale (LC_CTYPE, NULL). On Windows, looks for the + LC_ALL, LC_CTYPE and LANG environment variables, than calls + g_win32_getlocale(). + + (gtk_get_default_language): Code snippet moved to above function, + call it. + + * gtk/gtkimmulticontext.c (gtk_im_multicontext_get_slave) + * gtk/gtkrc.c (gtk_rc_context_parse_file): Call + _gtk_get_lc_ctype() instead of setlocale(). + Fri Sep 19 18:15:31 2003 Soeren Sandmann * gtk/gtkpaned.c, gtk/gtkhpaned.c: implement RTL flipping diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index dff289a95..cf3173947 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,20 @@ +2003-09-20 Tor Lillqvist + + * gtk-zip.sh.in: Don't use zip -r on the etc directory, to avoid + including editor backup files. List files we want explicitly. + + * gtk/gtkmain.c (_gtk_get_lc_ctype): New function. On Unix, just + calls setlocale (LC_CTYPE, NULL). On Windows, looks for the + LC_ALL, LC_CTYPE and LANG environment variables, than calls + g_win32_getlocale(). + + (gtk_get_default_language): Code snippet moved to above function, + call it. + + * gtk/gtkimmulticontext.c (gtk_im_multicontext_get_slave) + * gtk/gtkrc.c (gtk_rc_context_parse_file): Call + _gtk_get_lc_ctype() instead of setlocale(). + Fri Sep 19 18:15:31 2003 Soeren Sandmann * gtk/gtkpaned.c, gtk/gtkhpaned.c: implement RTL flipping diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index dff289a95..cf3173947 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,20 @@ +2003-09-20 Tor Lillqvist + + * gtk-zip.sh.in: Don't use zip -r on the etc directory, to avoid + including editor backup files. List files we want explicitly. + + * gtk/gtkmain.c (_gtk_get_lc_ctype): New function. On Unix, just + calls setlocale (LC_CTYPE, NULL). On Windows, looks for the + LC_ALL, LC_CTYPE and LANG environment variables, than calls + g_win32_getlocale(). + + (gtk_get_default_language): Code snippet moved to above function, + call it. + + * gtk/gtkimmulticontext.c (gtk_im_multicontext_get_slave) + * gtk/gtkrc.c (gtk_rc_context_parse_file): Call + _gtk_get_lc_ctype() instead of setlocale(). + Fri Sep 19 18:15:31 2003 Soeren Sandmann * gtk/gtkpaned.c, gtk/gtkhpaned.c: implement RTL flipping diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index dff289a95..cf3173947 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,20 @@ +2003-09-20 Tor Lillqvist + + * gtk-zip.sh.in: Don't use zip -r on the etc directory, to avoid + including editor backup files. List files we want explicitly. + + * gtk/gtkmain.c (_gtk_get_lc_ctype): New function. On Unix, just + calls setlocale (LC_CTYPE, NULL). On Windows, looks for the + LC_ALL, LC_CTYPE and LANG environment variables, than calls + g_win32_getlocale(). + + (gtk_get_default_language): Code snippet moved to above function, + call it. + + * gtk/gtkimmulticontext.c (gtk_im_multicontext_get_slave) + * gtk/gtkrc.c (gtk_rc_context_parse_file): Call + _gtk_get_lc_ctype() instead of setlocale(). + Fri Sep 19 18:15:31 2003 Soeren Sandmann * gtk/gtkpaned.c, gtk/gtkhpaned.c: implement RTL flipping diff --git a/gtk-zip.sh.in b/gtk-zip.sh.in index cee5bac8c..16ed3cb71 100755 --- a/gtk-zip.sh.in +++ b/gtk-zip.sh.in @@ -10,9 +10,11 @@ rm $ZIP DLLDIR=lib [ -f bin/libgdk_pixbuf-@GTK_API_VERSION@-@LT_CURRENT_MINUS_AGE@.dll ] && DLLDIR=bin -zip -r $ZIP -@ <setlocale (LC_ALL, "") but also takes care of the * locale specific setup of the windowing system used by GDK. * - * Return value: a string corresponding to the locale set, as with the - * C library function setlocale(). + * Return: a string corresponding to the locale set, typically in the + * form lang_COUNTRY, where lang is an ISO-639 language code, and + * COUNTRY is an ISO-3166 country code. On Unix, this form matches the + * result of the setlocale(); it is also used on + * other machines, such as Windows, where the C library returns a + * different result. The string is owned by GTK+ and should not be + * modified or freed. **/ gchar * gtk_set_locale (void) @@ -998,6 +1003,66 @@ gtk_set_locale (void) return gdk_set_locale (); } +/** + * _gtk_get_lc_ctype: + * + * Return the Unix-style locale string for the language currently in + * effect. On Unix systems, this is the return value from + * setlocale(LC_CTYPE, NULL), and the user can + * affect this through the environment variables LC_ALL, LC_CTYPE or + * LANG (checked in that order). The locale strings typically is in + * the form lang_COUNTRY, where lang is an ISO-639 language code, and + * COUNTRY is an ISO-3166 country code. For instance, sv_FI for + * Swedish as written in Finland or pt_BR for Portuguese as written in + * Brazil. + * + * On Windows, the C library doesn't use any such environment + * variables, and setting them won't affect the behaviour of functions + * like ctime(). The user sets the locale through + * the Regional Options in the Control Panel. The C library (in the + * setlocale() function) does not use country and + * language codes, but country and language names spelled out in + * English. However, this function does check the above environment + * variables, and does return a Unix-style locale string based on + * either said environment variables or the thread's current locale. + * + * Return value: a dynamically allocated string, free with g_free(). + */ + +gchar * +_gtk_get_lc_ctype (void) +{ + gchar *p; + +#ifdef G_OS_WIN32 + /* Somebody might try to set the locale for this process using the + * LANG or LC_ environment variables. The Microsoft C library + * doesn't know anything about them. You set the locale in the + * Control Panel. Setting these env vars won't have any affect on + * locale-dependent C library functions like ctime(). But just for + * kicks, do obey LC_ALL, LC_CTYPE and LANG in GTK. (This also makes + * it easier to test GTK and Pango in various default languages, you + * don't have to clickety-click in the Control Panel, you can simply + * start the program with LC_ALL=something on the command line.) + */ + p = getenv ("LC_ALL"); + if (p != NULL) + return g_strdup (p); + + p = getenv ("LC_CTYPE"); + if (p != NULL) + return g_strdup (p); + + p = getenv ("LANG"); + if (p != NULL) + return g_strdup (p); + + return g_win32_getlocale (); +#else + return g_strdup (setlocale (LC_CTYPE, NULL)); +#endif +} + /** * gtk_get_default_language: * @@ -1005,7 +1070,8 @@ gtk_set_locale (void) * effect. (Note that this can change over the life of an * application.) The default language is derived from the current * locale. It determines, for example, whether GTK+ uses the - * right-to-left or left-to-right text direction. + * right-to-left or left-to-right text direction. See + * _gtk_get_lc_ctype for notes on behaviour on Windows. * * Return value: the default language as a #PangoLanguage, must not be * freed @@ -1017,37 +1083,7 @@ gtk_get_default_language (void) PangoLanguage *result; gchar *p; -#ifdef G_OS_WIN32 - /* Somebody might try to set the locale for this process using the - * LANG or LC_ environment variables. The Microsoft C library - * doesn't know anything about them. You set the locale in the - * Control Panel. Setting these env vars won't have any affect on - * locale-dependent C library functions like ctime. But just for - * kicks, do obey LC_ALL, LANG and LC_CTYPE in GTK. (This also makes - * it easier to test GTK and Pango in various default languages, you - * don't have to clickety-click in the Control Panel, you can simply - * start the program with LC_ALL=something on the command line.) - */ - p = getenv ("LC_ALL"); - if (p != NULL) - lang = g_strdup (p); - else - { - p = getenv ("LANG"); - if (p != NULL) - lang = g_strdup (p); - else - { - p = getenv ("LC_CTYPE"); - if (p != NULL) - lang = g_strdup (p); - else - lang = g_win32_getlocale (); - } - } -#else - lang = g_strdup (setlocale (LC_CTYPE, NULL)); -#endif + lang = _gtk_get_lc_ctype (); p = strchr (lang, '.'); if (p) *p = '\0'; diff --git a/gtk/gtkmain.h b/gtk/gtkmain.h index 45527b720..a159aff0a 100644 --- a/gtk/gtkmain.h +++ b/gtk/gtkmain.h @@ -215,6 +215,8 @@ gchar * _gtk_find_module (const gchar *name, const gchar *type); gchar **_gtk_get_module_path (const gchar *type); +gchar *_gtk_get_lc_ctype (void); + #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/gtk/gtkrc.c b/gtk/gtkrc.c index ff6864e94..1c4889734 100644 --- a/gtk/gtkrc.c +++ b/gtk/gtkrc.c @@ -840,15 +840,11 @@ gtk_rc_context_parse_file (GtkRcContext *context, gchar *locale_suffixes[2]; gint n_locale_suffixes = 0; gchar *p; - const gchar *locale; + gchar *locale; gint length, j; gboolean found = FALSE; -#ifdef G_OS_WIN32 - locale = g_win32_getlocale (); -#else - locale = setlocale (LC_CTYPE, NULL); -#endif + locale = _gtk_get_lc_ctype (); if (strcmp (locale, "C") && strcmp (locale, "POSIX")) { @@ -873,6 +869,8 @@ gtk_rc_context_parse_file (GtkRcContext *context, locale_suffixes[n_locale_suffixes++] = g_strndup (locale, length); } } + + g_free (locale); gtk_rc_context_parse_one_file (context, filename, priority, reload); for (j = 0; j < n_locale_suffixes; j++)