summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorTor Lillqvist <tml@iki.fi>2003-09-20 23:52:16 +0000
committerTor Lillqvist <tml@src.gnome.org>2003-09-20 23:52:16 +0000
commit71e847d11c4a94291b8068eeae924a3978cc91c5 (patch)
tree86bfedba20cc2c25fb4c34f0f83e9f9be6ce91b4 /gtk
parente95ad99afe722788319dd0fcb9f4e7ed9ab6e2e6 (diff)
downloadgtk+-71e847d11c4a94291b8068eeae924a3978cc91c5.tar.gz
Don't use zip -r on the etc directory, to avoid including editor backup
2003-09-20 Tor Lillqvist <tml@iki.fi> * 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().
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtkimmulticontext.c7
-rw-r--r--gtk/gtkmain.c104
-rw-r--r--gtk/gtkmain.h2
-rw-r--r--gtk/gtkrc.c10
4 files changed, 79 insertions, 44 deletions
diff --git a/gtk/gtkimmulticontext.c b/gtk/gtkimmulticontext.c
index 7563682015..6a2e44f301 100644
--- a/gtk/gtkimmulticontext.c
+++ b/gtk/gtkimmulticontext.c
@@ -24,6 +24,7 @@
#include "gtkimmulticontext.h"
#include "gtkimmodule.h"
+#include "gtkmain.h"
#include "gtkradiomenuitem.h"
#include "gtkintl.h"
#include "gtkprivate.h"
@@ -254,11 +255,9 @@ gtk_im_multicontext_get_slave (GtkIMMulticontext *multicontext)
if (!global_context_id)
{
- const char *locale;
-
- locale = setlocale (LC_CTYPE, NULL);
-
+ gchar *locale = _gtk_get_lc_ctype ();
global_context_id = _gtk_im_module_get_default_context_id (locale);
+ g_free (locale);
}
slave = _gtk_im_module_create (global_context_id);
diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c
index 02e2361405..78dc4d1c02 100644
--- a/gtk/gtkmain.c
+++ b/gtk/gtkmain.c
@@ -989,8 +989,13 @@ gtk_exit (gint errorcode)
* <literal>setlocale (LC_ALL, "")</literal> 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 <function>setlocale()</function>.
+ * 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 <function>setlocale()</function>; 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)
@@ -999,55 +1004,86 @@ gtk_set_locale (void)
}
/**
- * gtk_get_default_language:
+ * _gtk_get_lc_ctype:
*
- * Returns the #PangoLanguage for the default language currently in
- * 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.
+ * Return the Unix-style locale string for the language currently in
+ * effect. On Unix systems, this is the return value from
+ * <literal>setlocale(LC_CTYPE, NULL)</literal>, 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.
*
- * Return value: the default language as a #PangoLanguage, must not be
- * freed
- **/
-PangoLanguage *
-gtk_get_default_language (void)
+ * On Windows, the C library doesn't use any such environment
+ * variables, and setting them won't affect the behaviour of functions
+ * like <function>ctime()</function>. The user sets the locale through
+ * the Regional Options in the Control Panel. The C library (in the
+ * <function>setlocale()</function> 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 *lang;
- 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
+ * 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)
- 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 ();
- }
- }
+ 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
- lang = g_strdup (setlocale (LC_CTYPE, NULL));
+ return g_strdup (setlocale (LC_CTYPE, NULL));
#endif
+}
+
+/**
+ * gtk_get_default_language:
+ *
+ * Returns the #PangoLanguage for the default language currently in
+ * 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. See
+ * _gtk_get_lc_ctype for notes on behaviour on Windows.
+ *
+ * Return value: the default language as a #PangoLanguage, must not be
+ * freed
+ **/
+PangoLanguage *
+gtk_get_default_language (void)
+{
+ gchar *lang;
+ PangoLanguage *result;
+ gchar *p;
+
+ lang = _gtk_get_lc_ctype ();
p = strchr (lang, '.');
if (p)
*p = '\0';
diff --git a/gtk/gtkmain.h b/gtk/gtkmain.h
index 45527b7203..a159aff0a3 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 ff6864e949..1c48897344 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++)