[PATCH] Support GtkSpell-3
Yclept Nemo <[email protected]> Tue, 30 Apr 2013 21:44:56 -0400
| Newsgroups | gmane.comp.gnome.apps.pan.devel |
|---|---|
| Message-ID | <CALurfZUJhyO=G6ZMGGy_N4SS9Bc2zrGwHbyG8cO_agxc=a75Wg@mail.gmail.com> |
---
configure.in | 4 ++-
pan/gui/group-prefs-dialog.cc | 1 -
pan/gui/post-ui.cc | 63 ++++++++++++++++++++++++++++++++++---------
3 files changed, 54 insertions(+), 14 deletions(-)
diff --git a/configure.in b/configure.in
index e917432..6b038f0 100644
--- a/configure.in
+++ b/configure.in
@@ -131,10 +131,11 @@ if test "x$want_gtk3" = "xyes" ; then
AC_DEFINE(HAVE_GTK,[1],[GTK+ 3 support])]
)
if test "x$want_gtkspell" = "xyes" ; then
- PKG_CHECK_MODULES([GTKSPELL], [gtkspell-3.0 >=
$GTKSPELL3_REQUIRED enchant >= $ENCHANT_REQUIRED],
+ PKG_CHECK_MODULES([GTKSPELL], [gtkspell3-3.0 >=
$GTKSPELL3_REQUIRED enchant >= $ENCHANT_REQUIRED],
[
gtkspell_msg=yes
AC_DEFINE(HAVE_GTKSPELL,[1],[GtkSpell support
for spellchecking])
+ AC_DEFINE(GTKSPELL_VERSION,[3],[GtkSpell API version])
],
[
gtkspell_msg=no
@@ -148,6 +149,7 @@ else
[
gtkspell_msg=yes
AC_DEFINE(HAVE_GTKSPELL,[1],[GtkSpell support
for spellchecking])
+ AC_DEFINE(GTKSPELL_VERSION,[2],[GtkSpell API version])
],
[
gtkspell_msg=no
diff --git a/pan/gui/group-prefs-dialog.cc b/pan/gui/group-prefs-dialog.cc
index 3b98f53..df0aa32 100644
--- a/pan/gui/group-prefs-dialog.cc
+++ b/pan/gui/group-prefs-dialog.cc
@@ -23,7 +23,6 @@ extern "C" {
#include <glib.h>
#include "gtk-compat.h"
#ifdef HAVE_GTKSPELL
- #include <gtkspell/gtkspell.h>
#include <enchant/enchant.h>
#endif
}
diff --git a/pan/gui/post-ui.cc b/pan/gui/post-ui.cc
index c0f5c1c..e372502 100644
--- a/pan/gui/post-ui.cc
+++ b/pan/gui/post-ui.cc
@@ -255,30 +255,63 @@ PostUI :: set_spellcheck_enabled (bool enabled)
GtkTextView * view = GTK_TEXT_VIEW(_body_view);
GError * err (0);
- // set the language
- if(!_spellcheck_language.empty()) // some language was set
- {
- gtkspell_new_attach (view, _spellcheck_language.c_str(), &err);
// sets custom spell checker
+#if GTKSPELL_VERSION == 3
+ gboolean spell_attach = TRUE;
+ GtkSpellChecker* spell = gtk_spell_checker_new ();
+
+ // a language has been selected
+ if(!_spellcheck_language.empty()) {
+ // attempt to set the selected language
+ if (!gtk_spell_checker_set_language (spell,
_spellcheck_language.c_str(), &err)) {
+ Log::add_err_va (_("Error setting custom spellchecker: %s"),
err->message);
+ g_clear_error (&err);
+ // selected language failed, fall back upon the default system locale
+ if (!gtk_spell_checker_set_language (spell, NULL, &err)) {
+ Log::add_err_va (_("Error setting spellchecker: %s"), err->message);
+ g_clear_error (&err);
+ spell_attach = FALSE;
+ }
+ }
+ }
+ else {
+ if (!gtk_spell_checker_set_language (spell, NULL, &err)) {
+ Log::add_err_va (_("Error setting spellchecker: %s"), err->message);
+ g_clear_error (&err);
+ spell_attach = FALSE;
+ }
+ }
+
+ if (spell_attach) {
+ // sink the floating reference
+ gtk_spell_checker_attach (spell, view);
+ }
+ else {
+ // destroy the floating reference
+ g_object_ref_sink (spell);
+ g_object_unref (spell);
+ }
+#else // GTKSPELL_VERSION
+ if(!_spellcheck_language.empty()) {
+ gtkspell_new_attach (view, _spellcheck_language.c_str(), &err);
if (err) {
Log::add_err_va (_("Error setting custom spellchecker: %s"),
err->message);
g_clear_error (&err);
- // custom spellchecker failed. defaults to env spellchecker
- gtkspell_new_attach (view, NULL, &err); // tries default
env language
+ gtkspell_new_attach (view, NULL, &err);
if (err) {
Log::add_err_va (_("Error setting spellchecker: %s"), err->message);
g_clear_error (&err);
}
}
}
- else
- {
- gtkspell_new_attach (view, NULL, &err); // tries default env language
+ else {
+ gtkspell_new_attach (view, NULL, &err);
if (err) {
Log::add_err_va (_("Error setting spellchecker: %s"), err->message);
g_clear_error (&err);
}
}
-#else
+#endif // GTKSPELL_VERSION
+#else // HAVE_GTKSPELL
// disable this for now, it is annoying
// GtkWidget * w = gtk_message_dialog_new_with_markup (
// GTK_WINDOW(_root),
@@ -288,7 +321,7 @@ PostUI :: set_spellcheck_enabled (bool enabled)
// _("<b>Spellchecker not found!</b>\n \nWas this copy of Pan
compiled with GtkSpell enabled?"));
// g_signal_connect_swapped (w, "response", G_CALLBACK
(gtk_widget_destroy), w);
// gtk_widget_show_all (w);
-#endif
+#endif // HAVE_GTKSPELL
}
else // disable
{
@@ -296,11 +329,17 @@ PostUI :: set_spellcheck_enabled (bool enabled)
GtkTextView * view = GTK_TEXT_VIEW(_body_view);
if (view)
{
+#if GTKSPELL_VERSION == 3
+ GtkSpellChecker * spell = gtk_spell_checker_get_from_text_view (view);
+ if (spell)
+ gtk_spell_checker_detach (spell);
+#else // GTKSPELL_VERSION
GtkSpell * spell = gtkspell_get_from_text_view (view);
if (spell)
gtkspell_detach (spell);
+#endif // GTKSPELL_VERSION
}
-#endif
+#endif // HAVE_GTKSPELL
}
}
--
1.8.2.2
_______________________________________________
Pan-devel mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/pan-devel
0001-Support-GtkSpell-3.patch
(application/octet-stream, 5.5 KB)
From d298650ef171ae16f614b68017c40857c6a69b71 Mon Sep 17 00:00:00 2001 From: Yclept Nemo <[email protected]> Date: Tue, 30 Apr 2013 21:28:08 -0400 Subject: [PATCH] Support GtkSpell-3 --- configure.in | 4 ++- pan/gui/group-prefs-dialog.cc | 1 - pan/gui/post-ui.cc | 63 ++++++++++++++++++++++++++++++++++--------- 3 files changed, 54 insertions(+), 14 deletions(-) diff --git a/configure.in b/configure.in index e917432..6b038f0 100644 --- a/configure.in +++ b/configure.in @@ -131,10 +131,11 @@ if test "x$want_gtk3" = "xyes" ; then AC_DEFINE(HAVE_GTK,[1],[GTK+ 3 support])] ) if test "x$want_gtkspell" = "xyes" ; then - PKG_CHECK_MODULES([GTKSPELL], [gtkspell-3.0 >= $GTKSPELL3_REQUIRED enchant >= $ENCHANT_REQUIRED], + PKG_CHECK_MODULES([GTKSPELL], [gtkspell3-3.0 >= $GTKSPELL3_REQUIRED enchant >= $ENCHANT_REQUIRED], [ gtkspell_msg=yes AC_DEFINE(HAVE_GTKSPELL,[1],[GtkSpell support for spellchecking]) + AC_DEFINE(GTKSPELL_VERSION,[3],[GtkSpell API version]) ], [ gtkspell_msg=no @@ -148,6 +149,7 @@ else [ gtkspell_msg=yes AC_DEFINE(HAVE_GTKSPELL,[1],[GtkSpell support for spellchecking]) + AC_DEFINE(GTKSPELL_VERSION,[2],[GtkSpell API version]) ], [ gtkspell_msg=no diff --git a/pan/gui/group-prefs-dialog.cc b/pan/gui/group-prefs-dialog.cc index 3b98f53..df0aa32 100644 --- a/pan/gui/group-prefs-dialog.cc +++ b/pan/gui/group-prefs-dialog.cc @@ -23,7 +23,6 @@ extern "C" { #include <glib.h> #include "gtk-compat.h" #ifdef HAVE_GTKSPELL - #include <gtkspell/gtkspell.h> #include <enchant/enchant.h> #endif } diff --git a/pan/gui/post-ui.cc b/pan/gui/post-ui.cc index c0f5c1c..e372502 100644 --- a/pan/gui/post-ui.cc +++ b/pan/gui/post-ui.cc @@ -255,30 +255,63 @@ PostUI :: set_spellcheck_enabled (bool enabled) GtkTextView * view = GTK_TEXT_VIEW(_body_view); GError * err (0); - // set the language - if(!_spellcheck_language.empty()) // some language was set - { - gtkspell_new_attach (view, _spellcheck_language.c_str(), &err); // sets custom spell checker +#if GTKSPELL_VERSION == 3 + gboolean spell_attach = TRUE; + GtkSpellChecker* spell = gtk_spell_checker_new (); + + // a language has been selected + if(!_spellcheck_language.empty()) { + // attempt to set the selected language + if (!gtk_spell_checker_set_language (spell, _spellcheck_language.c_str(), &err)) { + Log::add_err_va (_("Error setting custom spellchecker: %s"), err->message); + g_clear_error (&err); + // selected language failed, fall back upon the default system locale + if (!gtk_spell_checker_set_language (spell, NULL, &err)) { + Log::add_err_va (_("Error setting spellchecker: %s"), err->message); + g_clear_error (&err); + spell_attach = FALSE; + } + } + } + else { + if (!gtk_spell_checker_set_language (spell, NULL, &err)) { + Log::add_err_va (_("Error setting spellchecker: %s"), err->message); + g_clear_error (&err); + spell_attach = FALSE; + } + } + + if (spell_attach) { + // sink the floating reference + gtk_spell_checker_attach (spell, view); + } + else { + // destroy the floating reference + g_object_ref_sink (spell); + g_object_unref (spell); + } +#else // GTKSPELL_VERSION + if(!_spellcheck_language.empty()) { + gtkspell_new_attach (view, _spellcheck_language.c_str(), &err); if (err) { Log::add_err_va (_("Error setting custom spellchecker: %s"), err->message); g_clear_error (&err); - // custom spellchecker failed. defaults to env spellchecker - gtkspell_new_attach (view, NULL, &err); // tries default env language + gtkspell_new_attach (view, NULL, &err); if (err) { Log::add_err_va (_("Error setting spellchecker: %s"), err->message); g_clear_error (&err); } } } - else - { - gtkspell_new_attach (view, NULL, &err); // tries default env language + else { + gtkspell_new_attach (view, NULL, &err); if (err) { Log::add_err_va (_("Error setting spellchecker: %s"), err->message); g_clear_error (&err); } } -#else +#endif // GTKSPELL_VERSION +#else // HAVE_GTKSPELL // disable this for now, it is annoying // GtkWidget * w = gtk_message_dialog_new_with_markup ( // GTK_WINDOW(_root), @@ -288,7 +321,7 @@ PostUI :: set_spellcheck_enabled (bool enabled) // _("<b>Spellchecker not found!</b>\n \nWas this copy of Pan compiled with GtkSpell enabled?")); // g_signal_connect_swapped (w, "response", G_CALLBACK (gtk_widget_destroy), w); // gtk_widget_show_all (w); -#endif +#endif // HAVE_GTKSPELL } else // disable { @@ -296,11 +329,17 @@ PostUI :: set_spellcheck_enabled (bool enabled) GtkTextView * view = GTK_TEXT_VIEW(_body_view); if (view) { +#if GTKSPELL_VERSION == 3 + GtkSpellChecker * spell = gtk_spell_checker_get_from_text_view (view); + if (spell) + gtk_spell_checker_detach (spell); +#else // GTKSPELL_VERSION GtkSpell * spell = gtkspell_get_from_text_view (view); if (spell) gtkspell_detach (spell); +#endif // GTKSPELL_VERSION } -#endif +#endif // HAVE_GTKSPELL } } -- 1.8.2.2