]> spindle.queued.net Git - midori/commitdiff
Only show Spell Check preferences if dictionaries are installed
authorChristian Dywan <christian@twotoasts.de>
Thu, 29 Oct 2009 22:46:47 +0000 (23:46 +0100)
committerChristian Dywan <christian@twotoasts.de>
Fri, 30 Oct 2009 00:13:14 +0000 (01:13 +0100)
midori/midori-preferences.c

index 0970a82e8505d2d8ad9152c3999ac3842a08a1be..561749ca61fc9c1f7edd76050316e537e8f9edac 100644 (file)
@@ -240,6 +240,47 @@ midori_preferences_add_toolbutton (GtkWidget*   toolbar,
 #endif
 }
 
+static void
+midori_preferences_list_dicts_cb (const gchar* lang_tag,
+                                  const gchar* provider_name,
+                                  const gchar* provider_desc,
+                                  const gchar* provider_file,
+                                  GList**      dicts)
+{
+    *dicts = g_list_prepend (*dicts, (gchar*)lang_tag);
+}
+
+static GList*
+midori_preferences_get_spell_languages (void)
+{
+    static gpointer (*enchant_broker_init) (void) = NULL;
+    static void (*enchant_broker_list_dicts) (gpointer, GCallback, gpointer) = NULL;
+    static void (*enchant_broker_free) (gpointer) = NULL;
+    gpointer broker;
+    GList* dicts = NULL;
+
+    if (!enchant_broker_list_dicts && g_module_supported ())
+    {
+        GModule* module;
+        if (!(module = g_module_open ("libenchant.so", G_MODULE_BIND_LOCAL)))
+            return NULL;
+        if (!g_module_symbol (module, "enchant_broker_init",
+                              (void*) &enchant_broker_init))
+            return NULL;
+        if (!g_module_symbol (module, "enchant_broker_list_dicts",
+                              (void*) &enchant_broker_list_dicts))
+            return NULL;
+        if (!g_module_symbol (module, "enchant_broker_free",
+                              (void*) &enchant_broker_free))
+            return NULL;
+    }
+
+    broker = enchant_broker_init ();
+    enchant_broker_list_dicts (broker, (GCallback)midori_preferences_list_dicts_cb, &dicts);
+    enchant_broker_free (broker);
+    return dicts;
+}
+
 /**
  * midori_preferences_set_settings:
  * @settings: the settings
@@ -261,6 +302,9 @@ midori_preferences_set_settings (MidoriPreferences* preferences,
     GtkWidget* label;
     GtkWidget* button;
     GtkWidget* entry;
+    #if WEBKIT_CHECK_VERSION (1, 1, 6)
+    GList* languages;
+    #endif
 
     g_return_if_fail (MIDORI_IS_PREFERENCES (preferences));
     g_return_if_fail (MIDORI_IS_WEB_SETTINGS (settings));
@@ -412,15 +456,20 @@ midori_preferences_set_settings (MidoriPreferences* preferences,
     button = katze_property_proxy (settings, "find-while-typing", NULL);
     SPANNED_ADD (button);
     #if WEBKIT_CHECK_VERSION (1, 1, 6)
-    FRAME_NEW (_("Spell Checking"));
-    button = katze_property_proxy (settings, "enable-spell-checking", NULL);
-    gtk_button_set_label (GTK_BUTTON (button), _("Enable Spell Checking"));
-    gtk_widget_set_tooltip_text (button, _("Enable spell checking while typing"));
-    INDENTED_ADD (button);
-    entry = katze_property_proxy (settings, "spell-checking-languages", NULL);
-    /* i18n: The example should be adjusted to contain a good local default */
-    gtk_widget_set_tooltip_text (entry, _("A comma separated list of languages to be used for spell checking, for example \"en_GB,de_DE\""));
-    SPANNED_ADD (entry);
+    if ((languages = midori_preferences_get_spell_languages ()))
+    {
+        FRAME_NEW (_("Spell Checking"));
+        button = katze_property_proxy (settings, "enable-spell-checking", NULL);
+        gtk_button_set_label (GTK_BUTTON (button), _("Enable Spell Checking"));
+        gtk_widget_set_tooltip_text (button, _("Enable spell checking while typing"));
+        INDENTED_ADD (button);
+        entry = katze_property_proxy (settings, "spell-checking-languages", NULL);
+        /* i18n: The example should be adjusted to contain a good local default */
+        gtk_widget_set_tooltip_text (entry, _("A comma separated list of "
+           "languages to be used for spell checking, for example \"en_GB,de_DE\""));
+        SPANNED_ADD (entry);
+        g_list_free (languages);
+    }
     #endif
 
     /* Page "Interface" */