static void testWebContextSpellChecker(Test* test, gconstpointer) { WebKitWebContext* webContext = test->m_webContext.get(); // Check what happens if no spell checking language has been set. const gchar* const* currentLanguage = webkit_web_context_get_spell_checking_languages(webContext); g_assert(!currentLanguage); // Set the language to a specific one. GRefPtr<GPtrArray> languages = adoptGRef(g_ptr_array_new()); g_ptr_array_add(languages.get(), const_cast<gpointer>(static_cast<const void*>("en_US"))); g_ptr_array_add(languages.get(), 0); webkit_web_context_set_spell_checking_languages(webContext, reinterpret_cast<const char* const*>(languages->pdata)); currentLanguage = webkit_web_context_get_spell_checking_languages(webContext); g_assert_cmpuint(g_strv_length(const_cast<char**>(currentLanguage)), ==, 1); g_assert_cmpstr(currentLanguage[0], ==, "en_US"); // Set the language string to list of valid languages. g_ptr_array_remove_index_fast(languages.get(), languages->len - 1); g_ptr_array_add(languages.get(), const_cast<gpointer>(static_cast<const void*>("en_GB"))); g_ptr_array_add(languages.get(), 0); webkit_web_context_set_spell_checking_languages(webContext, reinterpret_cast<const char* const*>(languages->pdata)); currentLanguage = webkit_web_context_get_spell_checking_languages(webContext); g_assert_cmpuint(g_strv_length(const_cast<char**>(currentLanguage)), ==, 2); g_assert_cmpstr(currentLanguage[0], ==, "en_US"); g_assert_cmpstr(currentLanguage[1], ==, "en_GB"); // Try passing a wrong language along with good ones. g_ptr_array_remove_index_fast(languages.get(), languages->len - 1); g_ptr_array_add(languages.get(), const_cast<gpointer>(static_cast<const void*>("bd_WR"))); g_ptr_array_add(languages.get(), 0); webkit_web_context_set_spell_checking_languages(webContext, reinterpret_cast<const char* const*>(languages->pdata)); currentLanguage = webkit_web_context_get_spell_checking_languages(webContext); g_assert_cmpuint(g_strv_length(const_cast<char**>(currentLanguage)), ==, 2); g_assert_cmpstr(currentLanguage[0], ==, "en_US"); g_assert_cmpstr(currentLanguage[1], ==, "en_GB"); // Try passing a list with only wrong languages. languages = adoptGRef(g_ptr_array_new()); g_ptr_array_add(languages.get(), const_cast<gpointer>(static_cast<const void*>("bd_WR"))); g_ptr_array_add(languages.get(), const_cast<gpointer>(static_cast<const void*>("wr_BD"))); g_ptr_array_add(languages.get(), 0); webkit_web_context_set_spell_checking_languages(webContext, reinterpret_cast<const char* const*>(languages->pdata)); currentLanguage = webkit_web_context_get_spell_checking_languages(webContext); g_assert(!currentLanguage); // Check disabling and re-enabling spell checking. webkit_web_context_set_spell_checking_enabled(webContext, FALSE); g_assert(!webkit_web_context_get_spell_checking_enabled(webContext)); webkit_web_context_set_spell_checking_enabled(webContext, TRUE); g_assert(webkit_web_context_get_spell_checking_enabled(webContext)); }
static int webkit_spell_checking_language(Client *c, const char *name, DataType type, void *value, void *data) { char **languages = g_strsplit((char*)value, ",", -1); webkit_web_context_set_spell_checking_languages( webkit_web_context_get_default(), (const char * const *)languages); g_strfreev(languages); return CMD_SUCCESS; }
/* Based on Christian Persch's code from gecko backend of epiphany (old transform_accept_languages_list() function) */ static void webkit_pref_callback_accept_languages (GSettings *settings, const char *key, gpointer data) { GArray *array; char **languages; guint i; EphyEmbedShell *shell = ephy_embed_shell_get_default (); WebKitWebContext *web_context = ephy_embed_shell_get_web_context (shell); languages = g_settings_get_strv (settings, key); array = g_array_new (TRUE, FALSE, sizeof (char *)); for (i = 0; languages[i]; i++) { if (!g_strcmp0 (languages[i], "system")) { ephy_langs_append_languages (array); } else if (languages[i][0] != '\0') { char *str = g_ascii_strdown (languages[i], -1); g_array_append_val (array, str); } } g_strfreev (languages); ephy_langs_sanitise (array); webkit_web_context_set_preferred_languages (web_context, (const char * const *)(void *)array->data); /* Used by the Firefox Sync web view in prefs-dialog.c. */ g_object_set_data_full (G_OBJECT (web_context), "preferred-languages", g_strdupv ((char **)(void *)array->data), (GDestroyNotify)g_strfreev); if (g_settings_get_boolean (EPHY_SETTINGS_WEB, EPHY_PREFS_WEB_ENABLE_SPELL_CHECKING)) { char **normalized = normalize_languages ((char **)(void *)array->data); webkit_web_context_set_spell_checking_languages (web_context, (const char * const *)normalized); g_strfreev (normalized); } for (i = 0; i < array->len; i++) g_free (g_array_index (array, char *, i)); g_array_free (array, TRUE); }
static void webkit_pref_callback_enable_spell_checking (GSettings *settings, const char *key, gpointer data) { WebKitWebContext *web_context; gboolean value = FALSE; EphyEmbedShell *shell = ephy_embed_shell_get_default (); web_context = ephy_embed_shell_get_web_context (shell); value = g_settings_get_boolean (settings, key); webkit_web_context_set_spell_checking_enabled (web_context, value); if (value) { char **languages = g_settings_get_strv (settings, EPHY_PREFS_WEB_LANGUAGE); char **normalized = normalize_languages (languages); webkit_web_context_set_spell_checking_languages (web_context, (const char * const *)normalized); g_strfreev (languages); g_strfreev (normalized); } }