Revision: 957 http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=957&view=rev Author: eht16 Date: 2009-09-27 17:39:02 +0000 (Sun, 27 Sep 2009)
Log Message: ----------- Add an option to the preference dialog to select a custom directory to look for additional dictionary files.
Modified Paths: -------------- trunk/geany-plugins/spellcheck/ChangeLog trunk/geany-plugins/spellcheck/src/scplugin.c trunk/geany-plugins/spellcheck/src/scplugin.h trunk/geany-plugins/spellcheck/src/speller.c
Modified: trunk/geany-plugins/spellcheck/ChangeLog =================================================================== --- trunk/geany-plugins/spellcheck/ChangeLog 2009-09-26 10:22:56 UTC (rev 956) +++ trunk/geany-plugins/spellcheck/ChangeLog 2009-09-27 17:39:02 UTC (rev 957) @@ -1,3 +1,10 @@ +2009-09-27 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> + + * src/scplugin.c, src/speller.c, src/scplugin.h: + Add an option to the preference dialog to select a custom + directory to look for additional dictionary files. + + 2009-09-20 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
* src/scplugin.c:
Modified: trunk/geany-plugins/spellcheck/src/scplugin.c =================================================================== --- trunk/geany-plugins/spellcheck/src/scplugin.c 2009-09-26 10:22:56 UTC (rev 956) +++ trunk/geany-plugins/spellcheck/src/scplugin.c 2009-09-27 17:39:02 UTC (rev 957) @@ -74,6 +74,8 @@
setptr(sc_info->default_language, gtk_combo_box_get_active_text(GTK_COMBO_BOX( g_object_get_data(G_OBJECT(dialog), "combo")))); + setptr(sc_info->dictionary_dir, g_strdup(gtk_entry_get_text(GTK_ENTRY( + g_object_get_data(G_OBJECT(dialog), "dict_dir"))))); sc_speller_reinit_enchant_dict();
sc_info->check_while_typing = (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( @@ -91,6 +93,7 @@ g_key_file_set_boolean(config, "spellcheck", "check_while_typing", sc_info->check_while_typing); g_key_file_set_boolean(config, "spellcheck", "use_msgwin", sc_info->use_msgwin); g_key_file_set_boolean(config, "spellcheck", "show_toolbar_item", sc_info->show_toolbar_item); + g_key_file_set_string(config, "spellcheck", "dictionary_dir", sc_info->dictionary_dir);
sc_gui_update_toolbar(); sc_gui_update_menu(); @@ -131,6 +134,8 @@ "spellcheck", "check_while_typing", FALSE); sc_info->show_toolbar_item = utils_get_setting_boolean(config, "spellcheck", "show_toolbar_item", TRUE); + sc_info->dictionary_dir = utils_get_setting_string(config, + "spellcheck", "dictionary_dir", NULL); sc_info->use_msgwin = utils_get_setting_boolean(config, "spellcheck", "use_msgwin", FALSE); g_key_file_free(config); g_free(default_lang); @@ -161,9 +166,47 @@ }
+#ifdef HAVE_ENCHANT_1_5 +static void dictionary_dir_button_clicked_cb(GtkButton *button, gpointer item) +{ + GtkWidget *dialog; + gchar *text; + + /* initialize the dialog */ + dialog = gtk_file_chooser_dialog_new(_("Select Directory"), NULL, + GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); + + text = utils_get_locale_from_utf8(gtk_entry_get_text(GTK_ENTRY(item))); + if (NZV(text)) + gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), text); + + /* run it */ + if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) + { + gchar *utf8_filename, *tmp; + + tmp = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); + utf8_filename = utils_get_utf8_from_locale(tmp); + + gtk_entry_set_text(GTK_ENTRY(item), utf8_filename); + + g_free(utf8_filename); + g_free(tmp); + } + + gtk_widget_destroy(dialog); +} +#endif + + GtkWidget *plugin_configure(GtkDialog *dialog) { GtkWidget *label, *vbox, *combo, *check_type, *check_msgwin, *check_toolbar; +#ifdef HAVE_ENCHANT_1_5 + GtkWidget *entry_dir, *hbox, *button, *image; +#endif guint i;
vbox = gtk_vbox_new(FALSE, 6); @@ -204,7 +247,35 @@ gtk_combo_box_set_wrap_width(GTK_COMBO_BOX(combo), 2); gtk_box_pack_start(GTK_BOX(vbox), combo, FALSE, FALSE, 6);
+#ifdef HAVE_ENCHANT_1_5 + label = gtk_label_new_with_mnemonic(_("_Directory to look for dictionary files:")); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); + gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); + + entry_dir = gtk_entry_new(); + gtk_label_set_mnemonic_widget(GTK_LABEL(label), entry_dir); + ui_widget_set_tooltip_text(entry_dir, + _("Read additional dictionary files from this directory. " + "For now, this only works with myspell dictionaries.")); + if (NZV(sc_info->dictionary_dir)) + gtk_entry_set_text(GTK_ENTRY(entry_dir), sc_info->dictionary_dir); + + button = gtk_button_new(); + g_signal_connect(button, "clicked", + G_CALLBACK(dictionary_dir_button_clicked_cb), entry_dir); + + image = gtk_image_new_from_stock("gtk-open", GTK_ICON_SIZE_BUTTON); + gtk_container_add(GTK_CONTAINER(button), image); + + hbox = gtk_hbox_new(FALSE, 6); + gtk_box_pack_start_defaults(GTK_BOX(hbox), entry_dir); + gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); + + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); +#endif + g_object_set_data(G_OBJECT(dialog), "combo", combo); + g_object_set_data(G_OBJECT(dialog), "dict_dir", entry_dir); g_object_set_data(G_OBJECT(dialog), "check_type", check_type); g_object_set_data(G_OBJECT(dialog), "check_msgwin", check_msgwin); g_object_set_data(G_OBJECT(dialog), "check_toolbar", check_toolbar); @@ -255,6 +326,7 @@ sc_gui_free(); sc_speller_free();
+ g_free(sc_info->dictionary_dir); g_free(sc_info->default_language); g_free(sc_info->config_file); gtk_widget_destroy(sc_info->menu_item);
Modified: trunk/geany-plugins/spellcheck/src/scplugin.h =================================================================== --- trunk/geany-plugins/spellcheck/src/scplugin.h 2009-09-26 10:22:56 UTC (rev 956) +++ trunk/geany-plugins/spellcheck/src/scplugin.h 2009-09-27 17:39:02 UTC (rev 957) @@ -32,6 +32,7 @@ { gchar *config_file; gchar *default_language; + gchar *dictionary_dir; gboolean use_msgwin; gboolean check_while_typing; gboolean show_toolbar_item;
Modified: trunk/geany-plugins/spellcheck/src/speller.c =================================================================== --- trunk/geany-plugins/spellcheck/src/speller.c 2009-09-26 10:22:56 UTC (rev 956) +++ trunk/geany-plugins/spellcheck/src/speller.c 2009-09-27 17:39:02 UTC (rev 957) @@ -396,27 +396,6 @@ }
-#ifdef HAVE_ENCHANT_1_5 -/* TODO make this configurable */ -static gchar *get_dictionary_directory(void) -{ -#ifdef G_OS_WIN32 - gchar *path, *result; -# if GLIB_CHECK_VERSION(2, 16, 0) - path = g_win32_get_package_installation_directory_of_module(NULL); -# else - path = g_win32_get_package_installation_directory(NULL, NULL); -# endif - result = g_build_filename(path, "dict", NULL); - g_free(path); - return result; -#else - return g_build_filename(geany->app->datadir, "dict", NULL); -#endif -} -#endif - - void sc_speller_init(void) { const gchar *old_path; @@ -425,7 +404,7 @@ sc_speller_broker = enchant_broker_init(); #if HAVE_ENCHANT_1_5 /* add custom dictionary path for myspell (primarily used on Windows) */ - dict_dir = get_dictionary_directory(); + dict_dir = sc_info->dictionary_dir; old_path = enchant_broker_get_param(sc_speller_broker, "enchant.myspell.dictionary.path"); if (old_path != NULL) new_path = g_strconcat(old_path, G_SEARCHPATH_SEPARATOR_S, dict_dir, NULL); @@ -434,8 +413,7 @@
enchant_broker_set_param(sc_speller_broker, "enchant.myspell.dictionary.path", new_path); if (new_path != dict_dir) - g_free(dict_dir); - g_free(new_path); + g_free(new_path); #endif create_dicts_array();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.