On Sat, 14 Jan 2017 at 23:24:25 +0000, James Clarke wrote:
> I'm not sure why it's working for me and not you.

Ah, that would be because I have reportbug configured to use mutt to write
the actual bug report, and that disables the Gtk editor.

Your change looks fine. I also needed to use the attached.

    S
>From dd64cbfb2d8f8b4c816cffdd43d9be41c1aedfa3 Mon Sep 17 00:00:00 2001
From: Simon McVittie <s...@debian.org>
Date: Sat, 14 Jan 2017 23:48:12 +0000
Subject: [PATCH 7/8] gtk2_ui: lazily import gtkspellcheck from the UI thread

If we import it globally (in the reportbug thread), we get:

sqlite3.ProgrammingError: SQLite objects created in a thread can only be
used in that same thread. The object was created in thread id
<some large number> and this is thread id <some other large number>
---
 reportbug/ui/gtk2_ui.py | 21 ++++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)

diff --git a/reportbug/ui/gtk2_ui.py b/reportbug/ui/gtk2_ui.py
index 5a5e92c..ca89eaf 100644
--- a/reportbug/ui/gtk2_ui.py
+++ b/reportbug/ui/gtk2_ui.py
@@ -47,11 +47,7 @@ except ImportError:
 
 global Vte
 
-try:
-    import gtkspellcheck
-    has_spell = True
-except:
-    has_spell = False
+gtkspellcheck = None
 
 #gtk.set_interactive(0)
 Gdk.threads_init()
@@ -1309,7 +1305,18 @@ class EditorPage(Page):
         self.view = Gtk.TextView()
         self.view.modify_font(Pango.FontDescription("Monospace"))
         self.view.set_wrap_mode(Gtk.WrapMode.WORD)
-        if has_spell:
+
+        # We have to do the import in the UI thread, because it loads a
+        # SQLite database at import time, and the Python SQLite bindings
+        # don't allow transferring a SQLite handle between threads.
+        global gtkspellcheck
+        if gtkspellcheck is None:
+            try:
+                import gtkspellcheck
+            except:
+                gtkspellcheck = NotImplemented
+
+        if gtkspellcheck is not NotImplemented:
             gtkspellcheck.SpellChecker(self.view)
         self.info_buffer = self.view.get_buffer()
         scrolled = create_scrollable(self.view)
@@ -1323,7 +1330,7 @@ class EditorPage(Page):
         expander.add(scrolled)
         vbox.pack_start(expander, False, True, 0)
 
-        if not has_spell:
+        if gtkspellcheck is NotImplemented:
             box = Gtk.EventBox()
             label = Gtk.Label("Please install <b>python-gtkspellcheck</b> to enable spell checking")
             label.set_use_markup(True)
-- 
2.11.0

Reply via email to