SF.net SVN: geany-plugins:[969] trunk/geany-plugins/spellcheck
eht16 at users.sourceforge.net
eht16 at xxxxx
Wed Sep 30 19:26:07 UTC 2009
Revision: 969
http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=969&view=rev
Author: eht16
Date: 2009-09-30 19:26:03 +0000 (Wed, 30 Sep 2009)
Log Message:
-----------
Allow setting a custom dictionary directory without reloading the plugin.
Minor fixes.
Modified Paths:
--------------
trunk/geany-plugins/spellcheck/ChangeLog
trunk/geany-plugins/spellcheck/src/gui.c
trunk/geany-plugins/spellcheck/src/gui.h
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-30 19:16:56 UTC (rev 968)
+++ trunk/geany-plugins/spellcheck/ChangeLog 2009-09-30 19:26:03 UTC (rev 969)
@@ -1,3 +1,11 @@
+2009-09-30 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
+
+ * src/scplugin.c, src/scplugin.h, src/gui.c, src/gui.h, src/speller.c:
+ Allow setting a custom dictionary directory without reloading
+ the plugin.
+ Minor fixes.
+
+
2009-09-27 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
* src/scplugin.c, src/speller.c, src/scplugin.h:
Modified: trunk/geany-plugins/spellcheck/src/gui.c
===================================================================
--- trunk/geany-plugins/spellcheck/src/gui.c 2009-09-30 19:16:56 UTC (rev 968)
+++ trunk/geany-plugins/spellcheck/src/gui.c 2009-09-30 19:26:03 UTC (rev 969)
@@ -142,7 +142,7 @@
}
-static void menu_addword_item_activate_cd(GtkMenuItem *menuitem, gpointer gdata)
+static void menu_addword_item_activate_cb(GtkMenuItem *menuitem, gpointer gdata)
{
gint startword, endword, i, doc_len;
ScintillaObject *sci;
@@ -282,12 +282,12 @@
menu_item = image_menu_item_new(GTK_STOCK_ADD, label);
gtk_container_add(GTK_CONTAINER(sc_info->edit_menu_sub), menu_item);
g_signal_connect(menu_item, "activate",
- G_CALLBACK(menu_addword_item_activate_cd), GINT_TO_POINTER(0));
+ G_CALLBACK(menu_addword_item_activate_cb), GINT_TO_POINTER(0));
menu_item = image_menu_item_new(GTK_STOCK_REMOVE, _("Ignore All"));
gtk_container_add(GTK_CONTAINER(sc_info->edit_menu_sub), menu_item);
g_signal_connect(menu_item, "activate",
- G_CALLBACK(menu_addword_item_activate_cd), GINT_TO_POINTER(1));
+ G_CALLBACK(menu_addword_item_activate_cb), GINT_TO_POINTER(1));
gtk_widget_show(sc_info->edit_menu);
gtk_widget_show(sc_info->edit_menu_sep);
@@ -443,6 +443,7 @@
{
setptr(sc_info->default_language, g_strdup(gdata));
sc_speller_reinit_enchant_dict();
+ sc_gui_update_menu();
update_labels();
}
@@ -489,48 +490,33 @@
void sc_gui_update_menu(void)
{
- GtkWidget *child, *menu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(sc_info->menu_item));
- GList *l, *children = gtk_container_get_children(GTK_CONTAINER(menu));
-
- sc_ignore_callback = TRUE;
- for (l = children; l != NULL; l = g_list_next(l))
- {
- if ((child = GTK_BIN(l->data)->child) != NULL)
- {
- if (GTK_IS_LABEL(child))
- {
- if (utils_str_equal(sc_info->default_language, gtk_label_get_text(GTK_LABEL(child))))
- gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(l->data), TRUE);
- }
- }
- }
- sc_ignore_callback = FALSE;
-
- update_labels();
-}
-
-
-void sc_gui_create_menu(GtkWidget *sp_item)
-{
- GtkWidget *menu, *menu_item;
+ GtkWidget *menu_item;
guint i;
+ static gboolean need_init = TRUE;
GSList *group = NULL;
gchar *label;
- gtk_container_add(GTK_CONTAINER(geany->main_widgets->tools_menu), sp_item);
+ if (need_init)
+ {
+ gtk_container_add(GTK_CONTAINER(geany->main_widgets->tools_menu), sc_info->menu_item);
+ need_init = FALSE;
+ }
- menu = gtk_menu_new();
- gtk_menu_item_set_submenu(GTK_MENU_ITEM(sp_item), menu);
+ if (sc_info->main_menu != NULL)
+ gtk_widget_destroy(sc_info->main_menu);
+ sc_info->main_menu = gtk_menu_new();
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(sc_info->menu_item), sc_info->main_menu);
+
sc_info->submenu_item_default = gtk_menu_item_new_with_label(NULL);
- gtk_container_add(GTK_CONTAINER(menu), sc_info->submenu_item_default);
+ gtk_container_add(GTK_CONTAINER(sc_info->main_menu), sc_info->submenu_item_default);
g_signal_connect(sc_info->submenu_item_default, "activate",
G_CALLBACK(menu_item_toggled_cb), NULL);
update_labels();
menu_item = gtk_separator_menu_item_new();
- gtk_container_add(GTK_CONTAINER(menu), menu_item);
+ gtk_container_add(GTK_CONTAINER(sc_info->main_menu), menu_item);
sc_ignore_callback = TRUE;
for (i = 0; i < sc_info->dicts->len; i++)
@@ -540,10 +526,11 @@
group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menu_item));
if (utils_str_equal(sc_info->default_language, label))
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_item), TRUE);
- gtk_container_add(GTK_CONTAINER(menu), menu_item);
+ gtk_container_add(GTK_CONTAINER(sc_info->main_menu), menu_item);
g_signal_connect(menu_item, "toggled", G_CALLBACK(menu_item_toggled_cb), label);
}
sc_ignore_callback = FALSE;
+ gtk_widget_show_all(sc_info->main_menu);
}
Modified: trunk/geany-plugins/spellcheck/src/gui.h
===================================================================
--- trunk/geany-plugins/spellcheck/src/gui.h 2009-09-30 19:16:56 UTC (rev 968)
+++ trunk/geany-plugins/spellcheck/src/gui.h 2009-09-30 19:26:03 UTC (rev 969)
@@ -38,14 +38,12 @@
void sc_gui_create_edit_menu(void);
-void sc_gui_create_menu(GtkWidget *sp_item);
-
void sc_gui_update_editor_menu_cb(GObject *obj, const gchar *word, gint pos,
GeanyDocument *doc, gpointer user_data);
void sc_gui_update_toolbar(void);
-void sc_gui_update_menu(void);
+void sc_gui_update_menu();
void sc_gui_init(void);
Modified: trunk/geany-plugins/spellcheck/src/scplugin.c
===================================================================
--- trunk/geany-plugins/spellcheck/src/scplugin.c 2009-09-30 19:16:56 UTC (rev 968)
+++ trunk/geany-plugins/spellcheck/src/scplugin.c 2009-09-30 19:26:03 UTC (rev 969)
@@ -64,6 +64,25 @@
};
+static void populate_dict_combo(GtkComboBox *combo)
+{
+ guint i;
+ GtkTreeModel *model = gtk_combo_box_get_model(combo);
+
+ gtk_list_store_clear(GTK_LIST_STORE(model));
+ for (i = 0; i < sc_info->dicts->len; i++)
+ {
+ gtk_combo_box_append_text(GTK_COMBO_BOX(combo), g_ptr_array_index(sc_info->dicts, i));
+
+ if (utils_str_equal(g_ptr_array_index(sc_info->dicts, i), sc_info->default_language))
+ gtk_combo_box_set_active(GTK_COMBO_BOX(combo), i);
+ }
+ /* if the default language couldn't be selected, select the first available language */
+ if (gtk_combo_box_get_active(GTK_COMBO_BOX(combo)) == -1)
+ gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 0);
+}
+
+
static void configure_response_cb(GtkDialog *dialog, gint response, gpointer user_data)
{
if (response == GTK_RESPONSE_OK || response == GTK_RESPONSE_APPLY)
@@ -71,11 +90,13 @@
GKeyFile *config = g_key_file_new();
gchar *data;
gchar *config_dir = g_path_get_dirname(sc_info->config_file);
+ GtkComboBox *combo = GTK_COMBO_BOX(g_object_get_data(G_OBJECT(dialog), "combo"));
- 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->default_language, gtk_combo_box_get_active_text(combo));
+#ifdef HAVE_ENCHANT_1_5
setptr(sc_info->dictionary_dir, g_strdup(gtk_entry_get_text(GTK_ENTRY(
g_object_get_data(G_OBJECT(dialog), "dict_dir")))));
+#endif
sc_speller_reinit_enchant_dict();
sc_info->check_while_typing = (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(
@@ -97,6 +118,7 @@
sc_gui_update_toolbar();
sc_gui_update_menu();
+ populate_dict_combo(combo);
if (! g_file_test(config_dir, G_FILE_TEST_IS_DIR) && utils_mkdir(config_dir, TRUE) != 0)
{
@@ -151,7 +173,7 @@
sc_speller_init();
sc_gui_create_edit_menu();
- sc_gui_create_menu(sc_info->menu_item);
+ sc_gui_update_menu();
gtk_widget_show_all(sc_info->menu_item);
sc_info->signal_id = g_signal_connect(geany->main_widgets->window,
@@ -207,7 +229,6 @@
#ifdef HAVE_ENCHANT_1_5
GtkWidget *entry_dir, *hbox, *button, *image;
#endif
- guint i;
vbox = gtk_vbox_new(FALSE, 6);
@@ -229,18 +250,8 @@
gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 3);
combo = gtk_combo_box_new_text();
+ populate_dict_combo(GTK_COMBO_BOX(combo));
- for (i = 0; i < sc_info->dicts->len; i++)
- {
- gtk_combo_box_append_text(GTK_COMBO_BOX(combo), g_ptr_array_index(sc_info->dicts, i));
-
- if (utils_str_equal(g_ptr_array_index(sc_info->dicts, i), sc_info->default_language))
- gtk_combo_box_set_active(GTK_COMBO_BOX(combo), i);
- }
- /* if the default language couldn't be selected, select the first available language */
- if (gtk_combo_box_get_active(GTK_COMBO_BOX(combo)) == -1)
- gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 0);
-
if (sc_info->dicts->len > 20)
gtk_combo_box_set_wrap_width(GTK_COMBO_BOX(combo), 3);
else if (sc_info->dicts->len > 10)
@@ -253,6 +264,7 @@
gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
entry_dir = gtk_entry_new();
+ ui_entry_add_clear_icon(GTK_ENTRY(entry_dir));
gtk_label_set_mnemonic_widget(GTK_LABEL(label), entry_dir);
ui_widget_set_tooltip_text(entry_dir,
_("Read additional dictionary files from this directory. "
@@ -308,14 +320,6 @@
void plugin_cleanup(void)
{
- guint i;
-
- for (i = 0; i < sc_info->dicts->len; i++)
- {
- g_free(g_ptr_array_index(sc_info->dicts, i));
- }
- g_ptr_array_free(sc_info->dicts, TRUE);
-
g_signal_handler_disconnect(geany->main_widgets->window, sc_info->signal_id);
gtk_widget_destroy(sc_info->edit_menu);
Modified: trunk/geany-plugins/spellcheck/src/scplugin.h
===================================================================
--- trunk/geany-plugins/spellcheck/src/scplugin.h 2009-09-30 19:16:56 UTC (rev 968)
+++ trunk/geany-plugins/spellcheck/src/scplugin.h 2009-09-30 19:26:03 UTC (rev 969)
@@ -38,6 +38,7 @@
gboolean show_toolbar_item;
gulong signal_id;
GPtrArray *dicts;
+ GtkWidget *main_menu;
GtkWidget *menu_item;
GtkWidget *submenu_item_default;
GtkWidget *edit_menu;
Modified: trunk/geany-plugins/spellcheck/src/speller.c
===================================================================
--- trunk/geany-plugins/spellcheck/src/speller.c 2009-09-30 19:16:56 UTC (rev 968)
+++ trunk/geany-plugins/spellcheck/src/speller.c 2009-09-30 19:26:03 UTC (rev 969)
@@ -242,42 +242,6 @@
}
-void sc_speller_reinit_enchant_dict(void)
-{
- gchar *lang = sc_info->default_language;
-
- /* Release a previous dict object */
- if (sc_speller_dict != NULL)
- enchant_broker_free_dict(sc_speller_broker, sc_speller_dict);
-
- /* Check if the stored default dictionary is (still) avaiable, fall back to the first
- * one in the list if not */
- if (! check_default_lang())
- {
- if (sc_info->dicts->len > 0)
- {
- lang = g_ptr_array_index(sc_info->dicts, 0);
- g_warning("Stored language ('%s') could not be loaded. Falling back to '%s'",
- sc_info->default_language, lang);
- }
- else
- g_warning("Stored language ('%s') could not be loaded.", sc_info->default_language);
- }
-
- /* Request new dict object */
- sc_speller_dict = enchant_broker_request_dict(sc_speller_broker, lang);
- if (sc_speller_dict == NULL)
- {
- broker_init_failed();
- gtk_widget_set_sensitive(sc_info->menu_item, FALSE);
- }
- else
- {
- gtk_widget_set_sensitive(sc_info->menu_item, TRUE);
- }
-}
-
-
gchar *sc_speller_get_default_lang(void)
{
const gchar *lang = g_getenv("LANG");
@@ -333,8 +297,24 @@
}
+static void sc_speller_dicts_free(void)
+{
+ guint i;
+ if (sc_info->dicts != NULL)
+ {
+ for (i = 0; i < sc_info->dicts->len; i++)
+ {
+ g_free(g_ptr_array_index(sc_info->dicts, i));
+ }
+ g_ptr_array_free(sc_info->dicts, TRUE);
+ }
+}
+
+
static void create_dicts_array(void)
{
+ sc_speller_dicts_free();
+
sc_info->dicts = g_ptr_array_new();
enchant_broker_list_dicts(sc_speller_broker, add_dict_array, sc_info->dicts);
@@ -396,35 +376,73 @@
}
-void sc_speller_init(void)
+void sc_speller_reinit_enchant_dict(void)
{
- sc_speller_broker = enchant_broker_init();
+ gchar *lang = sc_info->default_language;
+
+ /* Release a previous dict object */
+ if (sc_speller_dict != NULL)
+ enchant_broker_free_dict(sc_speller_broker, sc_speller_dict);
+
#if HAVE_ENCHANT_1_5
{
const gchar *old_path;
- gchar *new_path, *dict_dir;
+ gchar *new_path;
/* add custom dictionary path for myspell (primarily used on Windows) */
- 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);
+ new_path = g_strconcat(
+ old_path, G_SEARCHPATH_SEPARATOR_S, sc_info->dictionary_dir, NULL);
else
- new_path = dict_dir;
+ new_path = sc_info->dictionary_dir;
enchant_broker_set_param(sc_speller_broker, "enchant.myspell.dictionary.path", new_path);
- if (new_path != dict_dir)
+ if (new_path != sc_info->dictionary_dir)
g_free(new_path);
}
#endif
create_dicts_array();
+ /* Check if the stored default dictionary is (still) avaiable, fall back to the first
+ * one in the list if not */
+ if (! check_default_lang())
+ {
+ if (sc_info->dicts->len > 0)
+ {
+ lang = g_ptr_array_index(sc_info->dicts, 0);
+ g_warning("Stored language ('%s') could not be loaded. Falling back to '%s'",
+ sc_info->default_language, lang);
+ }
+ else
+ g_warning("Stored language ('%s') could not be loaded.", sc_info->default_language);
+ }
+
+ /* Request new dict object */
+ sc_speller_dict = enchant_broker_request_dict(sc_speller_broker, lang);
+ if (sc_speller_dict == NULL)
+ {
+ broker_init_failed();
+ gtk_widget_set_sensitive(sc_info->menu_item, FALSE);
+ }
+ else
+ {
+ gtk_widget_set_sensitive(sc_info->menu_item, TRUE);
+ }
+}
+
+
+void sc_speller_init(void)
+{
+ sc_speller_broker = enchant_broker_init();
+
sc_speller_reinit_enchant_dict();
}
void sc_speller_free(void)
{
+ sc_speller_dicts_free();
if (sc_speller_dict != NULL)
enchant_broker_free_dict(sc_speller_broker, sc_speller_dict);
enchant_broker_free(sc_speller_broker);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Plugins-Commits
mailing list