SF.net SVN: geany-plugins:[319] trunk/spellcheck

eht16 at users.sourceforge.net eht16 at xxxxx
Sun Nov 30 20:49:51 UTC 2008


Revision: 319
          http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=319&view=rev
Author:   eht16
Date:     2008-11-30 20:49:51 +0000 (Sun, 30 Nov 2008)

Log Message:
-----------
Show the 'Suggestions' sub menu in the editor menu also when we have a misspelled word but no suggestions.
If there is a selection use it instead of the current word when updating the editor menu.

Modified Paths:
--------------
    trunk/spellcheck/ChangeLog
    trunk/spellcheck/src/gui.c

Modified: trunk/spellcheck/ChangeLog
===================================================================
--- trunk/spellcheck/ChangeLog	2008-11-27 23:01:29 UTC (rev 318)
+++ trunk/spellcheck/ChangeLog	2008-11-30 20:49:51 UTC (rev 319)
@@ -1,3 +1,12 @@
+2008-11-30  Enrico Tröger  <enrico(dot)troeger(at)uvena(dot)de>
+
+ * src/gui.c:
+   Show the 'Suggestions' sub menu in the editor menu also when we
+   have a misspelled word but no suggestions.
+   If there is a selection use it instead of the current word when
+   updating the editor menu.
+
+
 2008-11-21  Enrico Tröger  <enrico(dot)troeger(at)uvena(dot)de>
 
  * src/scplugin.c, src/gui.c:

Modified: trunk/spellcheck/src/gui.c
===================================================================
--- trunk/spellcheck/src/gui.c	2008-11-27 23:01:29 UTC (rev 318)
+++ trunk/spellcheck/src/gui.c	2008-11-30 20:49:51 UTC (rev 319)
@@ -167,7 +167,7 @@
 		p_sci->get_selected_text(sci, word);
 
 		/* retrieve the new text */
-		sugg = gtk_label_get_text(GTK_LABEL(GTK_BIN(menuitem)->child));
+		sugg = gtk_label_get_text(GTK_LABEL(gtk_bin_get_child(GTK_BIN(menuitem))));
 
 		/* replace the misspelled word with the chosen suggestion */
 		p_sci->replace_sel(sci, sugg);
@@ -231,8 +231,7 @@
 void gui_update_editor_menu_cb(GObject *obj, const gchar *word, gint pos,
 							   GeanyDocument *doc, gpointer user_data)
 {
-	gsize n_suggs, i;
-	gchar **suggs;
+	gchar *search_word;
 
 	g_return_if_fail(doc != NULL && doc->is_valid);
 
@@ -240,27 +239,35 @@
 	gtk_widget_hide(sc->edit_menu);
 	gtk_widget_hide(sc->edit_menu_sep);
 
-	/* ignore numbers or words starting with digits */
-	if (isdigit(*word))
-		return;
+	/* if we have a selection, prefer it over the current word */
+	if (p_sci->has_selection(doc->editor->sci))
+	{
+		gint len = p_sci->get_selected_text_length(doc->editor->sci);
+		search_word = g_malloc(len + 1);
+		p_sci->get_selected_text(doc->editor->sci, search_word);
+	}
+	else
+		search_word = g_strdup(word);
 
-	/* ignore non-text */
-	if (! speller_is_text(doc, pos))
+	/* ignore numbers or words starting with digits and non-text */
+	if (! NZV(search_word) || isdigit(*search_word) || ! speller_is_text(doc, pos))
+	{
+		g_free(search_word);
 		return;
+	}
 
-	if (! NZV(word) || speller_dict_check(word) == 0)
-		return;
-
-	suggs = speller_dict_suggest(word, &n_suggs);
-
-	if (suggs != NULL)
+	if (speller_dict_check(search_word) != 0)
 	{
 		GtkWidget *menu_item, *menu;
 		gchar *label;
+		gsize n_suggs, i;
+		gchar **suggs;
 
+		suggs = speller_dict_suggest(search_word, &n_suggs);
+
 		clickinfo.pos = pos;
 		clickinfo.doc = doc;
-		setptr(clickinfo.word, g_strdup(word));
+		setptr(clickinfo.word, search_word);
 
 		if (sc->edit_menu_sub != NULL && GTK_IS_WIDGET(sc->edit_menu_sub))
 			gtk_widget_destroy(sc->edit_menu_sub);
@@ -288,10 +295,16 @@
 			g_signal_connect((gpointer) menu_item, "activate",
 				G_CALLBACK(menu_suggestion_item_activate_cb), NULL);
 		}
+		if (suggs == NULL)
+		{
+			menu_item = gtk_menu_item_new_with_label(_("(No Suggestions)"));
+			gtk_widget_set_sensitive(menu_item, FALSE);
+			gtk_container_add(GTK_CONTAINER(sc->edit_menu_sub), menu_item);
+		}
 		menu_item = gtk_separator_menu_item_new();
 		gtk_container_add(GTK_CONTAINER(sc->edit_menu_sub), menu_item);
 
-		label = g_strdup_printf(_("Add \"%s\" to Dictionary"), word);
+		label = g_strdup_printf(_("Add \"%s\" to Dictionary"), search_word);
 		menu_item = p_ui->image_menu_item_new(GTK_STOCK_ADD, label);
 		gtk_container_add(GTK_CONTAINER(sc->edit_menu_sub), menu_item);
 		g_signal_connect((gpointer) menu_item, "activate",
@@ -306,10 +319,15 @@
 		gtk_widget_show(sc->edit_menu_sep);
 		gtk_widget_show_all(sc->edit_menu_sub);
 
-		speller_dict_free_string_list(suggs);
+		if (suggs != NULL)
+			speller_dict_free_string_list(suggs);
 
 		g_free(label);
 	}
+	else
+	{
+		g_free(search_word);
+	}
 }
 
 


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