summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimm Bäder <mail@baedert.org>2020-12-29 08:35:36 +0100
committerTimm Bäder <mail@baedert.org>2020-12-29 09:12:29 +0100
commitb3a8c0acbceb4bc327f17fb26b4ea0afd883e831 (patch)
treede5f0dab62538caec2a1a47bf3c654994fb3ae46
parentefcbf1f137325ae2ab6c9b7dafb6e5ae3ad6eb5d (diff)
downloadglib-wip/baedert/keyfile.tar.gz
keyfile: Delay calling g_get_language_names() until it's neededwip/baedert/keyfile
The g_get_languages() call is quite costly and often unneeded.
-rw-r--r--glib/gkeyfile.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/glib/gkeyfile.c b/glib/gkeyfile.c
index bbe638b74..1b85077a4 100644
--- a/glib/gkeyfile.c
+++ b/glib/gkeyfile.c
@@ -510,6 +510,7 @@ struct _GKeyFile
GKeyFileFlags flags;
+ guint checked_locales: 1;
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)