Index: src/callback.h =================================================================== --- src/callback.h (revision 24715) +++ src/callback.h (working copy) @@ -48,6 +48,12 @@ void cb_search_jump_to(StructData *sd); void cb_option_font(StructData *sd); void cb_option_word_wrap(StructData *sd, guint action, GtkWidget *widget); + +#ifdef USE_GTKSPELL +void cb_option_spell_check(StructData *sd, guint action, GtkWidget *widget); +void cb_option_spell_recheck (StructData *sd); +#endif /* USE_GTKSPELL */ + void cb_option_line_numbers(StructData *sd, guint action, GtkWidget *widget); void cb_option_auto_indent(StructData *sd, guint action, GtkWidget *widget); void cb_help_about(StructData *sd); Index: src/menu.c =================================================================== --- src/menu.c (revision 24715) +++ src/menu.c (working copy) @@ -106,6 +106,10 @@ NULL, 0, "" }, { N_("/Edit/Select _All"), "A", G_CALLBACK(cb_edit_select_all), 0 }, +#ifdef USE_GTKSPELL + { N_("/Edit/Recheck _Spelling"), "F7", + G_CALLBACK(cb_option_spell_recheck), 0, "", GTK_STOCK_SPELL_CHECK }, +#endif /* USE_GTKSPELL */ { N_("/_Search"), NULL, NULL, 0, "" }, { N_("/Search/_Find..."), "F", @@ -128,6 +132,10 @@ G_CALLBACK(cb_option_word_wrap), 0, "" }, { N_("/Options/_Line Numbers"), NULL, G_CALLBACK(cb_option_line_numbers), 0, "" }, +#ifdef USE_GTKSPELL + { N_("/Options/_Spell Check"), NULL, + G_CALLBACK(cb_option_spell_check), 0, "" }, +#endif /* USE_GTKSPELL */ { "/Options/---", NULL, NULL, 0, "" }, { N_("/Options/_Auto Indent"), NULL, @@ -188,7 +196,10 @@ gtk_widget_set_sensitive( gtk_item_factory_get_widget(ifactory, "/Search/Find Previous"), FALSE); - + gtk_widget_set_sensitive( + gtk_item_factory_get_widget(ifactory, "/Edit/Recheck Spelling"), + FALSE); + cut_menu_item = gtk_item_factory_get_widget(ifactory, "/Edit/Cut"); copy_menu_item = gtk_item_factory_get_widget(ifactory, "/Edit/Copy"); paste_menu_item = gtk_item_factory_get_widget(ifactory, "/Edit/Paste"); Index: src/mousepad.h =================================================================== --- src/mousepad.h (revision 24715) +++ src/mousepad.h (working copy) @@ -42,6 +42,10 @@ #include #include +#ifdef USE_GTKSPELL +#include +#endif /* USE_GTKSPELL */ + /* Original Functions */ #include "selector.h" #include "file.h" @@ -61,6 +65,9 @@ GtkWidget *menubar; GtkWidget *textview; GtkTextBuffer *textbuffer; +#ifdef USE_GTKSPELL + GtkSpell *spell; +#endif /* USE_GTKSPELL */ } MainWindow; typedef struct { @@ -74,6 +81,10 @@ gchar *fontname; gboolean wordwrap; gboolean linenumbers; +#ifdef USE_GTKSPELL + gboolean spellcheck; + gchar *language; +#endif /* USE_GTKSPELL */ gboolean autoindent; gchar *charset; } conf; Index: src/main.c =================================================================== --- src/main.c (revision 24715) +++ src/main.c (working copy) @@ -35,6 +35,10 @@ sd->conf.fontname = g_strdup("Monospace 12"); sd->conf.wordwrap = FALSE; sd->conf.linenumbers = FALSE; +#ifdef USE_GTKSPELL + sd->conf.spellcheck = FALSE; + sd->conf.language = g_strdup("en"); +#endif /* USE_GTKSPELL */ sd->conf.autoindent = FALSE; sd->conf.charset = NULL; @@ -95,6 +99,13 @@ else return -1; +#ifdef USE_GTKSPELL + fgets(buf, sizeof(buf), fp); + sd->conf.spellcheck = atoi(buf); + fgets(buf, sizeof(buf), fp); + sd->conf.language = g_strdup(buf); +#endif /* USE_GTKSPELL */ + if (!fgets(buf, sizeof(buf), fp)) return -1; if (buf[0] >= '0' && buf[0] <= '1') sd->conf.autoindent = atoi(buf); @@ -120,6 +131,9 @@ gint width, height; gchar *fontname; gboolean wordwrap, linenumbers, autoindent; +#ifdef USE_GTKSPELL + gboolean spellcheck; +#endif /* USE_GTKSPELL */ gtk_window_get_size(GTK_WINDOW(sd->mainwin->window), &width, &height); fontname = get_font_name_from_widget(sd->mainwin->textview); @@ -128,6 +142,10 @@ GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item(ifactory, "/Options/Word Wrap"))); linenumbers = gtk_check_menu_item_get_active( GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item(ifactory, "/Options/Line Numbers"))); +#ifdef USE_GTKSPELL + spellcheck = gtk_check_menu_item_get_active( + GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item(ifactory, "/Options/Spell Check"))); +#endif /* USE_GTKSPELL */ autoindent = gtk_check_menu_item_get_active( GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item(ifactory, "/Options/Auto Indent"))); @@ -149,6 +167,10 @@ fprintf(fp, "%s\n", fontname); fprintf(fp, "%d\n", wordwrap); fprintf(fp, "%d\n", linenumbers); +#ifdef USE_GTKSPELL + fprintf(fp, "%d\n", spellcheck); + fprintf(fp, "%s\n", sd->conf.language); +#endif /* USE_GTKSPELL */ fprintf(fp, "%d\n", autoindent); if (sd->fi->manual_charset) fprintf(fp, "%s", sd->fi->manual_charset); @@ -179,6 +201,11 @@ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM( gtk_item_factory_get_widget(ifactory, "
/Options/Line Numbers")), sd->conf.linenumbers); +#ifdef USE_GTKSPELL + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM( + gtk_item_factory_get_widget(ifactory, "
/Options/Spell Check")), + sd->conf.spellcheck); +#endif /* USE_GTKSPELL */ indent_refresh_tab_width(sd->mainwin->textview); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM( gtk_item_factory_get_widget(ifactory, "
/Options/Auto Indent")), Index: src/Makefile.am =================================================================== --- src/Makefile.am (revision 24715) +++ src/Makefile.am (working copy) @@ -48,6 +48,7 @@ mousepad_CFLAGS = \ $(GTK_CFLAGS) \ $(LIBXFCEGUI4_CFLAGS) \ + $(GTKSPELL_CFLAGS) \ $(PLATFORM_CFLAGS) mousepad_LDFLAGS = \ @@ -55,6 +56,7 @@ mousepad_LDADD = \ $(GTK_LIBS) \ - $(LIBXFCEGUI4_LIBS) + $(LIBXFCEGUI4_LIBS) \ + $(GTKSPELL_LIBS) # vi:set ts=8 sw=8 noet ai nocindent: Index: src/callback.c =================================================================== --- src/callback.c (revision 24715) +++ src/callback.c (working copy) @@ -378,6 +378,41 @@ show_line_numbers(sd->mainwin->textview, state); } +#ifdef USE_GTKSPELL +void cb_option_spell_check(StructData *sd, guint action, GtkWidget *widget) +{ + GtkItemFactory *ifactory; + gboolean check; + GtkWidget *recheck_menu_item; + + ifactory = gtk_item_factory_from_widget(widget); + check = gtk_check_menu_item_get_active( + GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item(ifactory, "/Options/Spell Check"))); + + recheck_menu_item = gtk_item_factory_get_widget(ifactory, "/Edit/Recheck Spelling"); + + if (check) + { + gtk_widget_set_sensitive(recheck_menu_item, TRUE); + sd->mainwin->spell = gtkspell_new_attach(GTK_TEXT_VIEW(sd->mainwin->textview), NULL, NULL); + + if (!gtkspell_set_language (sd->mainwin->spell, sd->conf.language, NULL)) + g_warning ("Language not supported: %s", sd->conf.language); + } + else + { + gtk_widget_set_sensitive(recheck_menu_item, FALSE); + gtkspell_detach (sd->mainwin->spell); + } +} + +void cb_option_spell_recheck (StructData *sd) +{ + if (sd->mainwin->spell) + gtkspell_recheck_all (sd->mainwin->spell); +} +#endif /* USE_GTKSPELL */ + void cb_option_auto_indent(StructData *sd, guint action, GtkWidget *widget) { GtkItemFactory *ifactory; Index: configure.in.in =================================================================== --- configure.in.in (revision 24715) +++ configure.in.in (working copy) @@ -57,6 +57,21 @@ XDT_CHECK_PACKAGE([GTK], [gtk+-2.0], [2.6.0]) dnl *********************************** +dnl *** Check for gtkspell support *** +dnl *********************************** +AC_ARG_ENABLE([gtkspell], [AC_HELP_STRING([--enable-gtkspell], [Compile Mousepad with GtkSpell spell checking [default=no]])],, [enable_gtkspell]) + +dnl Check for GtkSpell +if test "$enable_gtkspell" = yes ; then + PKG_CHECK_MODULES(GTKSPELL, gtkspell-2.0 >= 2.0.2, , enable_gtkspell=no) + if test "$enable_gtkspell" = "yes" ; then + AC_SUBST(GTKSPELL_CFLAGS) + AC_SUBST(GTKSPELL_LIBS) + AC_DEFINE(USE_GTKSPELL,,[Use GtkSpell]) + fi +fi + +dnl *********************************** dnl *** Check for debugging support *** dnl *********************************** AC_ARG_ENABLE([debug],