aboutsummaryrefslogtreecommitdiffstats
path: root/embed
diff options
context:
space:
mode:
Diffstat (limited to 'embed')
-rw-r--r--embed/mozilla/mozilla-notifiers.cpp115
1 files changed, 21 insertions, 94 deletions
diff --git a/embed/mozilla/mozilla-notifiers.cpp b/embed/mozilla/mozilla-notifiers.cpp
index f8c324f2d..9bc057f14 100644
--- a/embed/mozilla/mozilla-notifiers.cpp
+++ b/embed/mozilla/mozilla-notifiers.cpp
@@ -33,6 +33,7 @@
#include "ephy-langs.h"
#include "ephy-debug.h"
+#include <glib/gi18n.h>
#include <stdio.h>
#include <string.h>
#include <locale.h>
@@ -44,8 +45,6 @@
#include <nsEmbedString.h>
#include <nsIPrefService.h>
#include <nsIServiceManager.h>
-/* we don't use glib/gi18n.h here because we need gnome_i18n_get_language_list() */
-#include <libgnome/gnome-i18n.h>
#ifdef ALLOW_PRIVATE_API
#include <nsIProtocolProxyService.h>
@@ -696,118 +695,46 @@ mozilla_allow_popups_notifier(GConfClient *client,
mozilla_prefs_set_boolean ("dom.disable_open_during_load", !value);
}
-static char *
-get_system_language ()
-{
- const GList *sys_langs;
- const char *lang;
-
- /**
- * This is a comma separated list of language ranges, as specified
- * by RFC 2616, 14.4.
- * Always include the basic language code last.
- *
- * Examples:
- * "pt" translation: "pt"
- * "pt_BR" translation: "pt-br,pt"
- * "zh_CN" translation: "zh-cn,zh"
- * "zh_HK" translation: "zh-hk,zh" or maybe "zh-hk,zh-tw,zh"
- */
- lang = _("system-language");
-
- if (strncmp (lang, "system-language", 15) != 0)
- {
- /* the l10n has it */
- return g_strdup (lang);
- }
-
- sys_langs = gnome_i18n_get_language_list ("LC_MESSAGES");
-
- if (sys_langs)
- {
- lang = (char *)sys_langs->data;
-
- /* FIXME this probably need to be smarter */
- /* FIXME this can be up to 8 chars, not just 2 */
- if (strcmp (lang, "C") != 0)
- {
- return g_strndup (lang, 2);
- }
- }
-
- /* fallback to english */
- return g_strdup ("en");
-}
-
static void
mozilla_language_notifier(GConfClient *client,
guint cnxn_id,
GConfEntry *entry,
EphyEmbedSingle *single)
{
- GSList *languages, *l, *ulist = NULL;
- GString *result;
+ GArray *array;
+ GSList *languages, *l;
+ char **langs;
+ char *list;
languages = eel_gconf_get_string_list (CONF_RENDERING_LANGUAGE);
- result = g_string_new ("");
-
- /* substitute the system language */
- l = g_slist_find_custom (languages, "system", (GCompareFunc) strcmp);
- if (l != NULL)
- {
- char *sys_lang;
- int index;
-
- index = g_slist_position (languages, l);
- g_free (l->data);
- languages = g_slist_delete_link (languages, l);
+ array = g_array_new (TRUE, FALSE, sizeof (char *));
- sys_lang = get_system_language ();
-
- if (sys_lang)
- {
- char **s;
- int i = 0;
-
- s = g_strsplit (sys_lang, ",", -1);
- while (s[i] != NULL)
- {
- languages = g_slist_insert (languages, g_strdup (s[i]), index);
-
- index ++;
- i++;
- }
-
- g_strfreev (s);
- g_free (sys_lang);
- }
- }
-
- /* now make a list of unique entries */
for (l = languages; l != NULL; l = l->next)
{
- if (g_slist_find_custom (ulist, l->data, (GCompareFunc) strcmp) == NULL)
+ if (strcmp ((char *) l->data, "system") == 0)
+ {
+ ephy_langs_append_languages (array);
+ g_free (l->data);
+ }
+ else
{
- ulist = g_slist_prepend (ulist, l->data);
+ g_array_append_val (array, l->data);
}
}
- ulist = g_slist_reverse (ulist);
- for (l = ulist; l != NULL; l = l->next)
- {
- g_string_append (result, (char *)l->data);
+ g_slist_free (languages);
- if (l->next) g_string_append (result, ",");
- }
+ ephy_langs_sanitise (array);
- mozilla_prefs_set_string ("intl.accept_languages", result->str);
+ langs = (char **) g_array_free (array, FALSE);
- g_string_free (result, TRUE);
+ list = g_strjoinv (",", langs);
- g_slist_foreach (languages, (GFunc) g_free, NULL);
- g_slist_free (languages);
- g_slist_free (ulist);
+ mozilla_prefs_set_string ("intl.accept_languages", list);
+
+ g_strfreev (langs);
+ g_free (list);
}
static void