summaryrefslogtreecommitdiff
path: root/gdk/x11/gdkim-x11.c
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2001-10-10 21:54:25 +0000
committerOwen Taylor <otaylor@src.gnome.org>2001-10-10 21:54:25 +0000
commitca9158fa031bf1f498b8eaa9fecd4a04ea368ea6 (patch)
treebaf525dd86fa5c66725d3839c590efb17135b8ad /gdk/x11/gdkim-x11.c
parent82a3cc699debd3d16e8371d59990d7f4652066ec (diff)
downloadgtk+-ca9158fa031bf1f498b8eaa9fecd4a04ea368ea6.tar.gz
Call setlocale (LC_ALL, ""). (#60606)
Wed Oct 10 12:48:38 2001 Owen Taylor <otaylor@redhat.com> * gtk/gtkmain.c (gtk_init_check): Call setlocale (LC_ALL, ""). (#60606) * gtk/gtkmain.c (gtk_disable_setlocale): Add function to disable calling setlocale (LC_ALL, ""). * gtk/gtkmain.c (gtk_set_locale): Indicate in the docs that this function is not typically useful. * gdk/x11/{gdkim-x11.c,gdkmain-x11.c,gdkprivate-x11.h}: Automatically initialize GDK for the current locale on gdk_init(). Don't reset locale to C when XSupportsLocale() fails. * gdk/linux-fb/gdkim-fb.c (gdk_set_locale): Remove useless checks for UTF-8 locale breakage that mattered only for X. * examples/calendar/calendar.c tests/{testgtk.c,testtext.c,testcalendar.c}: Remove calls to gtk_set_locale(). * gtk/gtkiconfactory.c gtk/gtkitemfactory.c: gdk_pixbuf_new_from_stream => gdk_pixbuf_new_from_inline.
Diffstat (limited to 'gdk/x11/gdkim-x11.c')
-rw-r--r--gdk/x11/gdkim-x11.c49
1 files changed, 24 insertions, 25 deletions
diff --git a/gdk/x11/gdkim-x11.c b/gdk/x11/gdkim-x11.c
index 05fe0764c4..bd118b0aa0 100644
--- a/gdk/x11/gdkim-x11.c
+++ b/gdk/x11/gdkim-x11.c
@@ -46,47 +46,35 @@
*/
static gboolean gdk_use_mb;
-/*
- *--------------------------------------------------------------
- * gdk_set_locale
- *
- * Arguments:
- *
- * Results:
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-gchar*
-gdk_set_locale (void)
+void
+_gdk_x11_initialize_locale (void)
{
wchar_t result;
gchar *current_locale;
+ static char *last_locale = NULL;
gdk_use_mb = FALSE;
- if (!setlocale (LC_ALL,""))
- g_warning ("locale not supported by C library");
-
+ current_locale = setlocale (LC_ALL, NULL);
+
+ if (last_locale && strcmp (last_locale, current_locale) == 0)
+ return;
+
+ g_free (last_locale);
+ last_locale = g_strdup (current_locale);
+
if (!XSupportsLocale ())
- {
- g_warning ("locale not supported by Xlib, locale set to C");
- setlocale (LC_ALL, "C");
- }
+ g_warning ("locale not supported by Xlib");
if (!XSetLocaleModifiers (""))
g_warning ("can not set locale modifiers");
- current_locale = setlocale (LC_ALL, NULL);
-
if ((strcmp (current_locale, "C")) && (strcmp (current_locale, "POSIX")))
{
gdk_use_mb = TRUE;
#ifndef X_LOCALE
- /* Detect GNU libc, where mb == UTF8. Not useful unless it's
+ /* Detect ancient GNU libc, where mb == UTF8. Not useful unless it's
* really a UTF8 locale. The below still probably will
* screw up on Greek, Cyrillic, etc, encoded as UTF8.
*/
@@ -109,6 +97,17 @@ gdk_set_locale (void)
return current_locale;
}
+gchar*
+gdk_set_locale (void)
+{
+ if (!setlocale (LC_ALL,""))
+ g_warning ("locale not supported by C library");
+
+ _gdk_x11_initialize_locale ();
+
+ return setlocale (LC_ALL, NULL);
+}
+
/*
* gdk_wcstombs
*