diff options
author | Timm Bäder <mail@baedert.org> | 2020-12-29 08:35:36 +0100 |
---|---|---|
committer | Timm Bäder <mail@baedert.org> | 2020-12-30 12:39:14 +0100 |
commit | 037f1ce672a54c0ad62bd0dd72a64663c93c7f61 (patch) | |
tree | 44dc977cb4b7fc1fe01c88da4ca80ee23b51b19c /glib/gkeyfile.c | |
parent | efcbf1f137325ae2ab6c9b7dafb6e5ae3ad6eb5d (diff) | |
download | glib-037f1ce672a54c0ad62bd0dd72a64663c93c7f61.tar.gz |
keyfile: Delay calling g_get_language_names() until it's needed
The g_get_languages() call is quite costly and often unneeded.
Diffstat (limited to 'glib/gkeyfile.c')
-rw-r--r-- | glib/gkeyfile.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/glib/gkeyfile.c b/glib/gkeyfile.c index bbe638b74..8fc0322e8 100644 --- a/glib/gkeyfile.c +++ b/glib/gkeyfile.c @@ -510,6 +510,7 @@ struct _GKeyFile GKeyFileFlags flags; + gboolean checked_locales; gchar **locales; gint ref_count; /* (atomic) */ @@ -635,7 +636,6 @@ g_key_file_init (GKeyFile *key_file) key_file->parse_buffer = g_string_sized_new (128); key_file->list_separator = ';'; key_file->flags = 0; - key_file->locales = g_strdupv ((gchar **)g_get_language_names ()); } static void @@ -1232,6 +1232,12 @@ g_key_file_locale_is_interesting (GKeyFile *key_file, if (key_file->flags & G_KEY_FILE_KEEP_TRANSLATIONS) return TRUE; + if (!key_file->checked_locales && !key_file->locales) + { + key_file->locales = g_strdupv ((gchar **)g_get_language_names ()); + key_file->checked_locales = TRUE; + } + for (i = 0; key_file->locales[i] != NULL; i++) { if (g_ascii_strcasecmp (key_file->locales[i], locale) == 0) |