diff options
Diffstat (limited to 'x11-libs/gtk+/files/gtk+-1.2.10-cvs-rclocale.patch')
-rw-r--r-- | x11-libs/gtk+/files/gtk+-1.2.10-cvs-rclocale.patch | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/x11-libs/gtk+/files/gtk+-1.2.10-cvs-rclocale.patch b/x11-libs/gtk+/files/gtk+-1.2.10-cvs-rclocale.patch new file mode 100644 index 0000000..2340efd --- /dev/null +++ b/x11-libs/gtk+/files/gtk+-1.2.10-cvs-rclocale.patch @@ -0,0 +1,133 @@ +--- gtk+-1.2.10/gtk/gtkrc.c.encoding Thu Mar 15 13:41:40 2001 ++++ gtk+-1.2.10/gtk/gtkrc.c Thu Jul 5 12:48:48 2001 +@@ -33,6 +33,7 @@ + #include <string.h> + #include <stdio.h> + #include <stdlib.h> ++#include <langinfo.h> + + #include "gtkrc.h" + #include "gtkbindings.h" +@@ -440,7 +441,7 @@ + void + gtk_rc_init (void) + { +- static gchar *locale_suffixes[3]; ++ static gchar *locale_suffixes[8]; + static gint n_locale_suffixes = 0; + + gint i, j; +@@ -449,9 +450,7 @@ + + if (!initted) + { +- gint length; +- +- char *locale = setlocale (LC_CTYPE, NULL); ++ char *locale = g_strdup (setlocale (LC_CTYPE, NULL)); + char *p; + + initted = TRUE; +@@ -470,39 +469,84 @@ + * We normalize the charset into a standard form, + * which has all '-' and '_' characters removed, + * and is lowercase. ++ * ++ * the search is done in that order: ++ * gtkrc.ll_cc.lowercasecodeset ++ * gtkrc.ll_cc.normalizedcodeset ++ * gtkrc.ll.lowercasecodeset ++ * gtkrc.ll.normalizedcodeset ++ * gtkrc.lowercasecodeset ++ * gtkrc.normalizedcodeset ++ * gtkrc.ll_cc ++ * gtkrc.ll ++ * + */ +- gchar *normalized_locale; ++ char *codeset = NULL; ++ char *normalized_codeset = NULL; ++ char *cc = NULL; ++ char *ll; + + p = strchr (locale, '@'); +- length = p ? (p -locale) : strlen (locale); ++ if (p) ++ *p = '\0'; + ++ codeset = nl_langinfo (CODESET); ++ + p = strchr (locale, '.'); ++ if (!codeset && p) ++ codeset = p + 1; + if (p) ++ *p = '\0'; ++ ++ if (codeset) + { +- gchar *tmp1 = g_strndup (locale, p - locale + 1); +- gchar *tmp2 = _gtk_normalize_codeset (p + 1, length - (p - locale + 1)); ++ codeset = g_strdup (codeset); + +- normalized_locale = g_strconcat (tmp1, tmp2, NULL); +- g_free (tmp1); +- g_free (tmp2); +- +- locale_suffixes[n_locale_suffixes++] = g_strdup (normalized_locale); +- length = p - locale; ++ p = codeset; ++ while (*p) ++ { ++ /* tolower not used, because some locales are not ++ * compatible with C locale in lowercasing ascii ++ */ ++ if (*p >= 'A' && *p <= 'Z') ++ *p = (*p) - 'A' + 'a'; ++ p++; ++ } ++ ++ normalized_codeset = _gtk_normalize_codeset(codeset, strlen (codeset)); ++ if (strcmp (normalized_codeset, codeset) == 0) ++ normalized_codeset = NULL; + } +- else +- normalized_locale = g_strndup (locale, length); + +- p = strchr (normalized_locale, '_'); ++ p = strchr (locale, '_'); + if (p) + { +- locale_suffixes[n_locale_suffixes++] = g_strndup (normalized_locale, length); +- length = p - normalized_locale; ++ cc = p + 1; ++ *p = '\0'; + } +- +- locale_suffixes[n_locale_suffixes++] = g_strndup (normalized_locale, length); + +- g_free (normalized_locale); ++ ll = locale; ++ ++ if (cc && codeset) ++ locale_suffixes[n_locale_suffixes++] = g_strconcat (ll, "_", cc, ".", codeset, NULL); ++ if (cc && normalized_codeset) ++ locale_suffixes[n_locale_suffixes++] = g_strconcat (ll, "_", cc, ".", normalized_codeset, NULL); ++ if (codeset) ++ locale_suffixes[n_locale_suffixes++] = g_strconcat (ll, ".", codeset, NULL); ++ if (normalized_codeset) ++ locale_suffixes[n_locale_suffixes++] = g_strconcat (ll, ".", normalized_codeset, NULL); ++ if (codeset) ++ locale_suffixes[n_locale_suffixes++] = g_strdup (codeset); ++ if (normalized_codeset) ++ locale_suffixes[n_locale_suffixes++] = g_strdup (normalized_codeset); ++ if (cc) ++ locale_suffixes[n_locale_suffixes++] = g_strconcat (ll, "_", cc, NULL); ++ locale_suffixes[n_locale_suffixes++] = g_strdup (ll); ++ ++ g_free (codeset); + } ++ ++ g_free (locale); + } + + i = 0; |