Fix memory leak with spell checker

- Dont shadow widgets destroy()
- Dont bind spell checker to class attribute, this prevents its finalize

Fixes #8822
This commit is contained in:
Philipp Hörist 2019-04-08 22:43:09 +02:00
parent 5f562fb0ab
commit bf804f18d4
2 changed files with 3 additions and 9 deletions

View File

@ -323,7 +323,6 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
self.set_emoticon_popover() self.set_emoticon_popover()
# Attach speller # Attach speller
self.spell_checker = None
self.set_speller() self.set_speller()
self.conv_textview.tv.show() self.conv_textview.tv.show()
@ -474,15 +473,15 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
if gspell_lang is None: if gspell_lang is None:
return return
self.spell_checker = Gspell.Checker.new(gspell_lang) spell_checker = Gspell.Checker.new(gspell_lang)
spell_buffer = Gspell.TextBuffer.get_from_gtk_text_buffer( spell_buffer = Gspell.TextBuffer.get_from_gtk_text_buffer(
self.msg_textview.get_buffer()) self.msg_textview.get_buffer())
spell_buffer.set_spell_checker(self.spell_checker) spell_buffer.set_spell_checker(spell_checker)
spell_view = Gspell.TextView.get_from_gtk_text_view(self.msg_textview) spell_view = Gspell.TextView.get_from_gtk_text_view(self.msg_textview)
spell_view.set_inline_spell_checking(False) spell_view.set_inline_spell_checking(False)
spell_view.set_enable_language_menu(True) spell_view.set_enable_language_menu(True)
self.spell_checker.connect('notify::language', self.on_language_changed) spell_checker.connect('notify::language', self.on_language_changed)
def get_speller_language(self): def get_speller_language(self):
per_type = 'contacts' per_type = 'contacts'

View File

@ -17,8 +17,6 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with Gajim. If not, see <http://www.gnu.org/licenses/>. # along with Gajim. If not, see <http://www.gnu.org/licenses/>.
import gc
from gi.repository import Gtk from gi.repository import Gtk
from gi.repository import GLib from gi.repository import GLib
from gi.repository import GObject from gi.repository import GObject
@ -408,9 +406,6 @@ class MessageTextView(Gtk.TextView):
self.add_child_at_anchor(image, anchor) self.add_child_at_anchor(image, anchor)
buffer_.insert_at_cursor(' ') buffer_.insert_at_cursor(' ')
def destroy(self):
GLib.idle_add(gc.collect)
def clear(self, widget=None): def clear(self, widget=None):
""" """
Clear text in the textview Clear text in the textview