$OpenBSD: patch-src_document_view_vala,v 1.3 2016/01/18 12:50:52 ajacoutot Exp $

From ecfa30f370d0f770095d7b0f1543fc1a305b689e Mon Sep 17 00:00:00 2001
From: Sebastien Wilmet <swilmet@gnome.org>
Date: Thu, 14 Jan 2016 11:46:37 +0100
Subject: spell: gspell update for NavigatorGtv -> NavigatorText

From 6c0c5f4f3616236cc9e1ee1cb8546635558331e4 Mon Sep 17 00:00:00 2001
From: Sebastien Wilmet <swilmet@gnome.org>
Date: Thu, 7 Jan 2016 15:47:39 +0100
Subject: DocumentView: rename set_*spell*_metadata() functions

From 306cc4fb6f0c9fa668758494aecc5ad41063280f Mon Sep 17 00:00:00 2001
From: Sebastien Wilmet <swilmet@gnome.org>
Date: Thu, 7 Jan 2016 14:12:38 +0100
Subject: spell: use GspellInlineCheckerText

From b9e732bfcc430afcff385c0d8fc9b9732e3125ef Mon Sep 17 00:00:00 2001
From: Sebastien Wilmet <swilmet@gnome.org>
Date: Thu, 31 Dec 2015 12:35:39 +0100
Subject: spell: update code to use GtkTextView support of gspell

From b5653da21aee532d60f92c1f79e6f5d4b5d55609 Mon Sep 17 00:00:00 2001
From: Sebastien Wilmet <swilmet@gnome.org>
Date: Tue, 29 Dec 2015 14:31:50 +0100
Subject: spell: use GtkTextBuffer support of gspell

From 7a4af7e94f1ccebe51c2aed73bc7740113eed45c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Wilmet?= <swilmet@gnome.org>
Date: Fri, 20 Nov 2015 18:40:37 +0100
Subject: Adapt code for GspellLanguageChooserDialog change

From 92e6b33fe0731009268292e201dd009a3f28fbf0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Wilmet?= <swilmet@gnome.org>
Date: Fri, 27 Nov 2015 18:35:48 +0100
Subject: Adapt code for GspellLanguage API changes

From 7141859a103aa5b64a99fd27113ff0110fac2c04 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Wilmet?= <swilmet@gnome.org>
Date: Sun, 13 Dec 2015 18:56:51 +0100
Subject: spell: update parameter type of gspell_inline_checker_gtv_new()

--- src/document_view.vala.orig	Sat Dec 19 17:37:05 2015
+++ src/document_view.vala	Mon Jan 18 13:43:48 2016
@@ -1,7 +1,7 @@
 /*
  * This file is part of LaTeXila.
  *
- * Copyright © 2010-2011 Sébastien Wilmet
+ * Copyright © 2010-2016 Sébastien Wilmet
  *
  * LaTeXila is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -27,32 +27,14 @@ public class DocumentView : Gtk.SourceView
         "metadata::latexila-spell-language";
     private static const string METADATA_ATTRIBUTE_INLINE_SPELL =
         "metadata::latexila-inline-spell";
-    private static const string INLINE_SPELL_ACTIVATED_STR = "1";
-    private static const string INLINE_SPELL_DEACTIVATED_STR = "0";
+    private static const string INLINE_SPELL_ENABLED_STR = "1";
+    private static const string INLINE_SPELL_DISABLED_STR = "0";
 
     private GLib.Settings _editor_settings;
     private Pango.FontDescription _font_desc;
 
-    private Gspell.Checker? _spell_checker = null;
-    private Gspell.InlineCheckerGtv? _inline_spell_checker = null;
     private static bool _no_spell_language_dialog_shown = false;
 
-    public bool highlight_misspelled_words
-    {
-        get
-        {
-            return _inline_spell_checker != null;
-        }
-
-        set
-        {
-            if (value)
-                this.activate_inline_spell_checker ();
-            else
-                this.deactivate_inline_spell_checker ();
-        }
-    }
-
     public DocumentView (Document doc)
     {
         this.buffer = doc;
@@ -225,20 +207,26 @@ public class DocumentView : Gtk.SourceView
 
     private void init_spell_checking ()
     {
-        _spell_checker = new Gspell.Checker (get_spell_language ());
+        Gspell.Checker spell_checker = new Gspell.Checker (get_spell_language ());
+        Gspell.text_buffer_set_spell_checker (this.buffer, spell_checker);
+
         setup_inline_spell_checker ();
 
+        Gspell.InlineCheckerText inline_checker =
+            Gspell.text_view_get_inline_checker (this as TextView);
+        inline_checker.notify["enabled"].connect (inline_checker_enabled_notify_cb);
+
         Document doc = get_buffer () as Document;
 
         doc.notify["location"].connect (() =>
         {
-            _spell_checker.set_language (get_spell_language ());
+            spell_checker.set_language (get_spell_language ());
             setup_inline_spell_checker ();
         });
 
         _editor_settings.changed["spell-checking-language"].connect (() =>
         {
-            _spell_checker.set_language (get_spell_language ());
+            spell_checker.set_language (get_spell_language ());
         });
 
         _editor_settings.changed["highlight-misspelled-words"].connect (() =>
@@ -251,41 +239,37 @@ public class DocumentView : Gtk.SourceView
     {
         Document doc = get_buffer () as Document;
 
-        string? lang_key = doc.get_metadata (METADATA_ATTRIBUTE_SPELL_LANGUAGE);
-        if (lang_key == null)
-            lang_key = _editor_settings.get_string ("spell-checking-language");
+        string? lang_code = doc.get_metadata (METADATA_ATTRIBUTE_SPELL_LANGUAGE);
+        if (lang_code == null)
+            lang_code = _editor_settings.get_string ("spell-checking-language");
 
-        if (lang_key[0] == '\0')
+        if (lang_code[0] == '\0')
             return null;
 
-        return Gspell.Language.from_key (lang_key);
+        return Gspell.Language.lookup (lang_code);
     }
 
     public void setup_inline_spell_checker ()
     {
         Document doc = get_buffer () as Document;
 
-        bool activate;
+        bool enabled;
 
         string? metadata = doc.get_metadata (METADATA_ATTRIBUTE_INLINE_SPELL);
         if (metadata != null)
-            activate = metadata == INLINE_SPELL_ACTIVATED_STR;
+            enabled = metadata == INLINE_SPELL_ENABLED_STR;
         else
-            activate = _editor_settings.get_boolean ("highlight-misspelled-words");
+            enabled = _editor_settings.get_boolean ("highlight-misspelled-words");
 
-        if (activate)
-            activate_inline_spell_checker ();
-        else
-            deactivate_inline_spell_checker ();
+        Gspell.InlineCheckerText inline_checker =
+            Gspell.text_view_get_inline_checker (this as TextView);
+        inline_checker.enabled = enabled;
     }
 
     public void launch_spell_checker_dialog ()
     {
-        return_if_fail (_spell_checker != null);
+        Gspell.Navigator navigator = Gspell.NavigatorText.new (this as TextView);
 
-        Gspell.Navigator navigator = Gspell.NavigatorGtv.new (this as TextView,
-            _spell_checker);
-
         Gspell.CheckerDialog dialog =
             new Gspell.CheckerDialog (this.get_toplevel () as Window, navigator);
 
@@ -295,69 +279,72 @@ public class DocumentView : Gtk.SourceView
 
     public void launch_spell_language_chooser_dialog ()
     {
-        return_if_fail (_spell_checker != null);
+        Gspell.Checker? spell_checker = Gspell.text_buffer_get_spell_checker (buffer);
+        return_if_fail (spell_checker != null);
 
         Gspell.LanguageChooserDialog dialog =
             new Gspell.LanguageChooserDialog (this.get_toplevel () as Window,
-                _spell_checker.get_language ());
+                spell_checker.get_language (),
+                DialogFlags.DESTROY_WITH_PARENT |
+                DialogFlags.MODAL |
+                DialogFlags.USE_HEADER_BAR);
 
         dialog.run ();
 
         unowned Gspell.Language? lang = dialog.get_language ();
-        _spell_checker.set_language (lang);
+        spell_checker.set_language (lang);
 
         dialog.destroy ();
     }
 
-    public void set_spell_language_metadata ()
+    public void save_spell_language_metadata ()
     {
-        return_if_fail (_spell_checker != null);
+        Gspell.Checker? spell_checker = Gspell.text_buffer_get_spell_checker (buffer);
+        return_if_fail (spell_checker != null);
 
         Document doc = get_buffer () as Document;
 
-        unowned Gspell.Language? lang = _spell_checker.get_language ();
+        unowned Gspell.Language? lang = spell_checker.get_language ();
         if (lang != null)
-            doc.set_metadata (METADATA_ATTRIBUTE_SPELL_LANGUAGE, lang.to_key ());
+            doc.set_metadata (METADATA_ATTRIBUTE_SPELL_LANGUAGE, lang.get_code ());
         else
             doc.set_metadata (METADATA_ATTRIBUTE_SPELL_LANGUAGE, null);
     }
 
-    public void set_inline_spell_metadata ()
+    public void save_inline_spell_metadata ()
     {
         Document doc = get_buffer () as Document;
 
-        if (this.highlight_misspelled_words)
+        Gspell.InlineCheckerText inline_checker =
+            Gspell.text_view_get_inline_checker (this as TextView);
+
+        if (inline_checker.enabled)
         {
             doc.set_metadata (METADATA_ATTRIBUTE_INLINE_SPELL,
-                INLINE_SPELL_ACTIVATED_STR);
+                INLINE_SPELL_ENABLED_STR);
         }
         else
         {
             doc.set_metadata (METADATA_ATTRIBUTE_INLINE_SPELL,
-                INLINE_SPELL_DEACTIVATED_STR);
+                INLINE_SPELL_DISABLED_STR);
         }
     }
 
-    private void activate_inline_spell_checker ()
+    private void inline_checker_enabled_notify_cb ()
     {
-        return_if_fail (_spell_checker != null);
+        Gspell.InlineCheckerText inline_checker =
+            Gspell.text_view_get_inline_checker (this as TextView);
+        if (! inline_checker.enabled)
+            return;
 
-        if (_spell_checker.get_language () != null)
-        {
-            if (_inline_spell_checker == null)
-            {
-                _inline_spell_checker =
-                    new Gspell.InlineCheckerGtv (this.buffer as Gtk.SourceBuffer,
-                        _spell_checker);
+        Gspell.Checker? spell_checker = Gspell.text_buffer_get_spell_checker (buffer);
+        return_if_fail (spell_checker != null);
 
-                _inline_spell_checker.attach_view (this);
-
-                notify_property ("highlight-misspelled-words");
-            }
-
+        if (spell_checker.get_language () != null)
             return;
-        }
 
+        inline_checker.enabled = false;
+
         if (_no_spell_language_dialog_shown)
             return;
 
@@ -389,15 +376,5 @@ public class DocumentView : Gtk.SourceView
         }
 
         dialog.destroy ();
-    }
-
-    private void deactivate_inline_spell_checker ()
-    {
-        if (_inline_spell_checker != null)
-        {
-            _inline_spell_checker.detach_view (this);
-            _inline_spell_checker = null;
-            notify_property ("highlight-misspelled-words");
-        }
     }
 }
