Re: [PATCH] Support GtkSpell-3
"Heinrich Müller" <heinrich.mueller82-gM/[email protected]> Wed, 01 May 2013 21:18:36 +0200
| Newsgroups | gmane.comp.gnome.apps.pan.devel |
|---|---|
| Message-ID | <[email protected]> |
Am 01.05.2013 03:44, schrieb Yclept Nemo:
> ---
> 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
Thanks a lot, much appreciated.
_______________________________________________
Pan-devel mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/pan-devel