From ca9158fa031bf1f498b8eaa9fecd4a04ea368ea6 Mon Sep 17 00:00:00 2001 From: Owen Taylor Date: Wed, 10 Oct 2001 21:54:25 +0000 Subject: [PATCH] Call setlocale (LC_ALL, ""). (#60606) Wed Oct 10 12:48:38 2001 Owen Taylor * 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. --- ChangeLog | 27 ++++++++++++++++++++++ ChangeLog.pre-2-0 | 27 ++++++++++++++++++++++ ChangeLog.pre-2-10 | 27 ++++++++++++++++++++++ ChangeLog.pre-2-2 | 27 ++++++++++++++++++++++ ChangeLog.pre-2-4 | 27 ++++++++++++++++++++++ ChangeLog.pre-2-6 | 27 ++++++++++++++++++++++ ChangeLog.pre-2-8 | 27 ++++++++++++++++++++++ gdk/linux-fb/gdkim-fb.c | 40 +------------------------------- gdk/x11/gdkim-x11.c | 49 ++++++++++++++++++++-------------------- gdk/x11/gdkmain-x11.c | 2 ++ gdk/x11/gdkprivate-x11.h | 2 ++ 11 files changed, 218 insertions(+), 64 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7a86504286..ac9a9e96d6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,30 @@ +Wed Oct 10 12:48:38 2001 Owen Taylor + + * 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. + Wed Oct 10 21:13:46 2001 Kristian Rietveld * gtk/gtktreemodel.[ch]: added gtk_tree_model_get_iter_from_string(). diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index 7a86504286..ac9a9e96d6 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,30 @@ +Wed Oct 10 12:48:38 2001 Owen Taylor + + * 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. + Wed Oct 10 21:13:46 2001 Kristian Rietveld * gtk/gtktreemodel.[ch]: added gtk_tree_model_get_iter_from_string(). diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 7a86504286..ac9a9e96d6 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,30 @@ +Wed Oct 10 12:48:38 2001 Owen Taylor + + * 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. + Wed Oct 10 21:13:46 2001 Kristian Rietveld * gtk/gtktreemodel.[ch]: added gtk_tree_model_get_iter_from_string(). diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 7a86504286..ac9a9e96d6 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,30 @@ +Wed Oct 10 12:48:38 2001 Owen Taylor + + * 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. + Wed Oct 10 21:13:46 2001 Kristian Rietveld * gtk/gtktreemodel.[ch]: added gtk_tree_model_get_iter_from_string(). diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 7a86504286..ac9a9e96d6 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,30 @@ +Wed Oct 10 12:48:38 2001 Owen Taylor + + * 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. + Wed Oct 10 21:13:46 2001 Kristian Rietveld * gtk/gtktreemodel.[ch]: added gtk_tree_model_get_iter_from_string(). diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 7a86504286..ac9a9e96d6 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,30 @@ +Wed Oct 10 12:48:38 2001 Owen Taylor + + * 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. + Wed Oct 10 21:13:46 2001 Kristian Rietveld * gtk/gtktreemodel.[ch]: added gtk_tree_model_get_iter_from_string(). diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 7a86504286..ac9a9e96d6 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,30 @@ +Wed Oct 10 12:48:38 2001 Owen Taylor + + * 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. + Wed Oct 10 21:13:46 2001 Kristian Rietveld * gtk/gtktreemodel.[ch]: added gtk_tree_model_get_iter_from_string(). diff --git a/gdk/linux-fb/gdkim-fb.c b/gdk/linux-fb/gdkim-fb.c index 7330f40d64..d6e65373bd 100644 --- a/gdk/linux-fb/gdkim-fb.c +++ b/gdk/linux-fb/gdkim-fb.c @@ -37,12 +37,6 @@ #include -/* If this variable is FALSE, it indicates that we should - * avoid trying to use multibyte conversion functions and - * assume everything is 1-byte per character - */ -static gboolean gdk_use_mb; - /* *-------------------------------------------------------------- * gdk_set_locale @@ -59,42 +53,10 @@ static gboolean gdk_use_mb; gchar* gdk_set_locale (void) { - wchar_t result; - gchar *current_locale; - - gdk_use_mb = FALSE; - if (!setlocale (LC_ALL,"")) g_warning ("locale not supported by C library"); - 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 - * really a UTF8 locale. The below still probably will - * screw up on Greek, Cyrillic, etc, encoded as UTF8. - */ - - if ((MB_CUR_MAX == 2) && - (mbstowcs (&result, "\xdd\xa5", 1) > 0) && - result == 0x765) - { - if ((strlen (current_locale) < 4) || - g_strcasecmp (current_locale + strlen(current_locale) - 4, "utf8")) - gdk_use_mb = FALSE; - } -#endif /* X_LOCALE */ - } - - GDK_NOTE (MISC, - g_message ("%s multi-byte string functions.", - gdk_use_mb ? "Using" : "Not using")); - - return current_locale; + return setlocale (LC_ALL, NULL); } /* 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 * diff --git a/gdk/x11/gdkmain-x11.c b/gdk/x11/gdkmain-x11.c index cf2b41ffee..e0c2ed61bf 100644 --- a/gdk/x11/gdkmain-x11.c +++ b/gdk/x11/gdkmain-x11.c @@ -116,6 +116,8 @@ _gdk_windowing_init_check (int argc, char **argv) XKeyboardState keyboard_state; XClassHint *class_hint; guint pid; + + _gdk_x11_initialize_locale (); XSetErrorHandler (gdk_x_error); XSetIOErrorHandler (gdk_x_io_error); diff --git a/gdk/x11/gdkprivate-x11.h b/gdk/x11/gdkprivate-x11.h index bc8564825c..b22b0a3fdd 100644 --- a/gdk/x11/gdkprivate-x11.h +++ b/gdk/x11/gdkprivate-x11.h @@ -150,6 +150,8 @@ void _gdk_keymap_state_changed (void); GC _gdk_x11_gc_flush (GdkGC *gc); +void _gdk_x11_initialize_locale (void); + extern GdkDrawableClass _gdk_x11_drawable_class; extern Window _gdk_root_window; extern gboolean _gdk_use_xshm;