[gnote: 1/2] use gspell instead of gtkspell for spellchecking



commit 5f042aa146d62e4c5f47eeb28dcfd37f2bebc653
Author: Günther Wagner <info gunibert de>
Date:   Sun Jun 9 12:38:08 2019 +0200

    use gspell instead of gtkspell for spellchecking

 configure.ac              | 16 ++++++++--------
 src/Makefile.am           |  4 ++--
 src/contrast.cpp          |  1 -
 src/preferencesdialog.cpp |  2 +-
 src/watchers.cpp          | 24 +++++++++++++++---------
 src/watchers.hpp          | 10 +++++-----
 6 files changed, 31 insertions(+), 26 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 89f70dbd..987c8444 100644
--- a/configure.ac
+++ b/configure.ac
@@ -26,7 +26,7 @@ dnl if one is harcoded elsewhere, it is a bug
 GTK_VERSION=3.20
 LIBGLIBMM_VERSION=2.32
 LIBGTKMM_VERSION=3.18
-GTKSPELL_VERSION=3.0.0
+GSPELL_VERSION=1.8.0
 LIBSECRET_VERSION=0.8
 UNITTESTCPP_VERSION=1.5.1
 
@@ -74,13 +74,13 @@ PKG_CHECK_MODULES(LIBXML, [libxml-2.0])
 PKG_CHECK_MODULES(LIBXSLT, [libxslt])
 PKG_CHECK_MODULES(UUID, [uuid])
 
-PKG_CHECK_MODULES(GTKSPELL, gtkspell3-3.0 >= $GTKSPELL_VERSION,
-                           [FIXED_GTKSPELL="yes";AC_DEFINE([FIXED_GTKSPELL], [1], [Set if the GtkSpell 
library is recent enough.])
-                           ], FIXED_GTKSPELL="no")
-AC_SUBST(GTKSPELL_CFLAGS)
-AC_SUBST(GTKSPELL_LIBS)
-AM_CONDITIONAL(FIXED_GTKSPELL, test "$FIXED_GTKSPELL" = "yes")
+PKG_CHECK_MODULES(GSPELL, gspell-1  >= $GSPELL_VERSION,
+                         [ENABLE_GSPELL="yes";AC_DEFINE([ENABLE_GSPELL], [1], [Set if the GSpell library is 
recent enough.])
+                         ], ENABLE_GSPELL="no")
 
+AC_SUBST(GSPELL_CFLAGS)
+AC_SUBST(GSPELL_LIBS)
+AM_CONDITIONAL(ENABLE_GSPELL, test "$ENABLE_GSPELL" = "yes")
 
 PKG_CHECK_MODULES(LIBSECRET, [libsecret-1 >= $LIBSECRET_VERSION])
 
@@ -207,7 +207,7 @@ AC_OUTPUT
 echo "
 Options:
 
-  Spellchecking support:       ${FIXED_GTKSPELL}
+  Spellchecking support:       ${ENABLE_GSPELL}
   Unit test support:           ${HAVE_UNITTESTCPP}
 
 "
diff --git a/src/Makefile.am b/src/Makefile.am
index e132fb59..1af17b43 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -4,7 +4,7 @@ SUBDIRS = addins
 
 AM_CPPFLAGS= -I$(top_srcdir) @LIBGTKMM_CFLAGS@ @LIBGLIBMM_CFLAGS@ \
        @GTK_CFLAGS@ \
-       @GTKSPELL_CFLAGS@ @LIBXML_CFLAGS@ \
+       @GSPELL_CFLAGS@ @LIBXML_CFLAGS@ \
        @LIBXSLT_CFLAGS@ \
        @UUID_CFLAGS@ \
        @LIBSECRET_CFLAGS@ \
@@ -16,7 +16,7 @@ AM_LDFLAGS=-export-dynamic
 LIBGNOTE_LIBS = \
        @LIBGLIBMM_LIBS@ @LIBGTKMM_LIBS@ \
        @LIBXSLT_LIBS@ \
-       @GTKSPELL_LIBS@ @GTK_LIBS@ \
+       @GSPELL_LIBS@ @GTK_LIBS@ \
        @UUID_LIBS@ \
        @LIBSECRET_LIBS@
 GNOTE_LIBS = libgnote.la $(LIBGNOTE_LIBS)
diff --git a/src/contrast.cpp b/src/contrast.cpp
index 9d93a28c..81167f64 100644
--- a/src/contrast.cpp
+++ b/src/contrast.cpp
@@ -23,7 +23,6 @@
  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 
-#include <config.h>
 #include <math.h>
 #include "contrast.hpp"
 
diff --git a/src/preferencesdialog.cpp b/src/preferencesdialog.cpp
index be2b94a8..925d3305 100644
--- a/src/preferencesdialog.cpp
+++ b/src/preferencesdialog.cpp
@@ -243,7 +243,7 @@ namespace gnote {
 
       // Spell checking...
 
-#if FIXED_GTKSPELL
+#if ENABLE_GSPELL
       // TODO I'm not sure there is a proper reason to do that.
       // it is in or NOT. if not, disable the UI.
       if (NoteSpellChecker::gtk_spell_available()) {
diff --git a/src/watchers.cpp b/src/watchers.cpp
index 83c60558..848d6ba6 100644
--- a/src/watchers.cpp
+++ b/src/watchers.cpp
@@ -280,7 +280,7 @@ namespace gnote {
   }
 
 
-#if FIXED_GTKSPELL
+#if ENABLE_GSPELL
   const char *NoteSpellChecker::LANG_PREFIX = "spellchecklang:";
   const char *NoteSpellChecker::LANG_DISABLED = "disabled";
 
@@ -341,12 +341,15 @@ namespace gnote {
     Glib::ustring lang = get_language();
 
     if (!m_obj_ptr && lang != LANG_DISABLED) {
-      m_obj_ptr = gtk_spell_checker_new();
-      if(lang != "") {
-        gtk_spell_checker_set_language(m_obj_ptr, lang.c_str(), NULL);
-      }
-      g_signal_connect(G_OBJECT(m_obj_ptr), "language-changed", G_CALLBACK(language_changed), this);
-      gtk_spell_checker_attach(m_obj_ptr, get_window()->editor()->gobj());
+      const GspellLanguage *language = gspell_language_lookup(lang.c_str());
+      m_obj_ptr = gspell_checker_new(language);
+      g_signal_connect(G_OBJECT(m_obj_ptr), "notify::language", G_CALLBACK(language_changed), this);
+      Glib::RefPtr<Gtk::TextBuffer> buffer = get_window()->editor()->get_buffer();
+      GspellTextBuffer *gspell_buffer = gspell_text_buffer_get_from_gtk_text_buffer (buffer->gobj());
+      gspell_text_buffer_set_spell_checker (gspell_buffer, m_obj_ptr);
+      GspellTextView *gspell_view = gspell_text_view_get_from_gtk_text_view (get_window()->editor()->gobj());
+      gspell_text_view_set_inline_spell_checking (gspell_view, TRUE);
+      gspell_text_view_set_enable_language_menu (gspell_view, TRUE);
       m_enabled = true;
     }
     else {
@@ -368,7 +371,9 @@ namespace gnote {
     m_tag_applied_cid.disconnect();
     
     if(m_obj_ptr) {
-      gtk_spell_checker_detach(m_obj_ptr);
+      Glib::RefPtr<Gtk::TextBuffer> buffer = get_window()->editor()->get_buffer();
+      GspellTextBuffer *gspell_buffer = gspell_text_buffer_get_from_gtk_text_buffer (buffer->gobj());
+      gspell_text_buffer_set_spell_checker (gspell_buffer, NULL);
       m_obj_ptr = NULL;
     }
   }
@@ -422,9 +427,10 @@ namespace gnote {
     }
   }
 
-  void NoteSpellChecker::language_changed(GtkSpellChecker*, gchar *lang, NoteSpellChecker *checker)
+  void NoteSpellChecker::language_changed(GspellChecker* self, GParamSpec *pspec, NoteSpellChecker *checker)
   {
     try {
+      const gchar *lang = gspell_language_get_code (gspell_checker_get_language (self));
       checker->on_language_changed(lang);
     }
     catch(...) {
diff --git a/src/watchers.hpp b/src/watchers.hpp
index f6fe0982..cce0a5df 100644
--- a/src/watchers.hpp
+++ b/src/watchers.hpp
@@ -28,9 +28,9 @@
 #include <config.h>
 #endif
 
-#if FIXED_GTKSPELL
+#if ENABLE_GSPELL
 extern "C" {
-#include <gtkspell/gtkspell.h>
+#include <gspell/gspell.h>
 }
 #endif
 
@@ -84,7 +84,7 @@ namespace gnote {
     utils::HIGMessageDialog   *m_title_taken_dialog;
   };
 
-#if FIXED_GTKSPELL
+#if ENABLE_GSPELL
   class NoteSpellChecker 
     : public NoteAddin
   {
@@ -105,7 +105,7 @@ namespace gnote {
   private:
     static const char *LANG_PREFIX;
     static const char *LANG_DISABLED;
-    static void language_changed(GtkSpellChecker*, gchar *lang, NoteSpellChecker *checker);
+    static void language_changed(GspellChecker*, GParamSpec *pspec, NoteSpellChecker *checker);
     void attach();
     void attach_checker();
     void detach();
@@ -120,7 +120,7 @@ namespace gnote {
     void on_note_window_backgrounded();
     void on_spell_check_enable_action(const Glib::VariantBase & state);
 
-    GtkSpellChecker *m_obj_ptr;
+    GspellChecker *m_obj_ptr;
     sigc::connection  m_tag_applied_cid;
     sigc::connection m_enable_cid;
     bool m_enabled;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]