Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlovetox <philipp@hoerist.com>2022-08-16 00:55:45 +0300
committerlovetox <philipp@hoerist.com>2022-08-16 00:56:47 +0300
commit97d06fc036c4ec554cf5ed8746f4e26ab26a918a (patch)
treebc8b54ecd05cc9f4eb78ddde33c9f1b0e84e01ad
parent02cf35e7bc163b6b3fc63bced2ea8dc0d1737fb7 (diff)
refactor: SpellChecker: Move code into MessageInput and simplify
-rw-r--r--gajim/gtk/message_actions_box.py70
-rw-r--r--gajim/gtk/message_input.py76
-rw-r--r--gajim/gtk/preferences.py20
3 files changed, 70 insertions, 96 deletions
diff --git a/gajim/gtk/message_actions_box.py b/gajim/gtk/message_actions_box.py
index 6d9e71fcf..bdeb2510b 100644
--- a/gajim/gtk/message_actions_box.py
+++ b/gajim/gtk/message_actions_box.py
@@ -36,7 +36,6 @@ from nbxmpp.protocol import JID
from gajim.common import app
from gajim.common import events
-from gajim.common import i18n
from gajim.common import ged
from gajim.common.commands import ArgumentParserError
from gajim.common.commands import CommandError
@@ -63,8 +62,6 @@ from .menus import get_self_contact_menu
from .menus import get_singlechat_menu
from .message_input import MessageInputTextView
-if app.is_installed('GSPELL'):
- from gi.repository import Gspell # pylint: disable=ungrouped-imports
log = logging.getLogger('gajim.gui.messageactionsbox')
@@ -122,9 +119,6 @@ class MessageActionsBox(Gtk.Grid, ged.EventHelper):
self._ui.quick_invite_button.set_action_name('win.muc-invite')
self._init_emoticon_popover()
- # TODO init spellchecker uses a contact on callback, contact might
- # be None
- self._language_handler_id = self._init_spell_checker()
self.show_all()
self._ui.connect_signals(self)
@@ -237,7 +231,6 @@ class MessageActionsBox(Gtk.Grid, ged.EventHelper):
self._set_encryption_state(encryption)
self._set_encryption_details(encryption)
- self._set_spell_checker_language(contact)
self._set_chatstate(True)
self.msg_textview.switch_contact(contact)
@@ -427,69 +420,6 @@ class MessageActionsBox(Gtk.Grid, ged.EventHelper):
else:
self.msg_textview.emit('insert-emoji')
- def _init_spell_checker(self) -> int:
- if not app.is_installed('GSPELL'):
- return 0
-
- checker = Gspell.Checker.new(Gspell.language_get_default())
-
- buffer = Gspell.TextBuffer.get_from_gtk_text_buffer(
- self.msg_textview.get_buffer())
- buffer.set_spell_checker(checker)
-
- use_spell_check = app.settings.get('use_speller')
- view = Gspell.TextView.get_from_gtk_text_view(self.msg_textview)
- view.set_inline_spell_checking(use_spell_check)
- view.set_enable_language_menu(True)
-
- return checker.connect('notify::language', self._on_language_changed)
-
- def toggle_spell_checker(self) -> None:
- if not app.is_installed('GSPELL'):
- return
- use_spell_check = app.settings.get('use_speller')
- view = Gspell.TextView.get_from_gtk_text_view(self.msg_textview)
- view.set_inline_spell_checking(use_spell_check)
-
- def _set_spell_checker_language(self, contact: ChatContactT) -> None:
- if not app.is_installed('GSPELL'):
- return
-
- buffer = Gspell.TextBuffer.get_from_gtk_text_buffer(
- self.msg_textview.get_buffer())
- checker = buffer.get_spell_checker()
- assert checker is not None
- lang = self._get_spell_checker_language(contact)
-
- with checker.handler_block(self._language_handler_id):
- checker.set_language(lang)
-
- def _get_spell_checker_language(self,
- contact: ChatContactT
- ) -> Optional[Gspell.Language]:
-
- lang = contact.settings.get('speller_language')
- if not lang:
- # use the default one
- lang = app.settings.get('speller_language')
- if not lang:
- lang = i18n.LANG
-
- assert isinstance(lang, str)
- lang = Gspell.language_lookup(lang)
- if lang is None:
- lang = Gspell.language_get_default()
- return lang
-
- def _on_language_changed(self,
- checker: Gspell.Checker,
- _param: Any) -> None:
-
- gspell_lang = checker.get_language()
- if gspell_lang is not None:
- contact = self.get_current_contact()
- contact.settings.set('speller_language', gspell_lang.get_code())
-
def _on_send_file_enabled_changed(self,
action: Gio.SimpleAction,
_param: GObject.ParamSpec) -> None:
diff --git a/gajim/gtk/message_input.py b/gajim/gtk/message_input.py
index f77ef632f..e8e86daf8 100644
--- a/gajim/gtk/message_input.py
+++ b/gajim/gtk/message_input.py
@@ -33,6 +33,7 @@ from gi.repository import Pango
from nbxmpp.protocol import JID
from gajim.common import app
+from gajim.common.i18n import LANG
from gajim.common.i18n import _
from gajim.common.styling import process
from gajim.common.styling import PlainBlock
@@ -93,8 +94,66 @@ class MessageInputTextView(Gtk.TextView):
self.connect('destroy', self._on_destroy)
self.connect('populate-popup', self._on_populate_popup)
+ self._language_handler_id = self._init_spell_checker()
+ app.settings.connect_signal('use_speller', self._on_toggle_spell_check)
+
app.plugin_manager.gui_extension_point('message_input', self)
+ def _init_spell_checker(self) -> int:
+ if not app.is_installed('GSPELL'):
+ return 0
+
+ checker = Gspell.Checker.new(Gspell.language_get_default())
+
+ buffer = Gspell.TextBuffer.get_from_gtk_text_buffer(self.get_buffer())
+ buffer.set_spell_checker(checker)
+
+ view = Gspell.TextView.get_from_gtk_text_view(self)
+ view.set_enable_language_menu(True)
+
+ self._on_toggle_spell_check()
+
+ return checker.connect('notify::language', self._on_language_changed)
+
+ def _set_spell_checker_language(self, contact: ChatContactT) -> None:
+ if not app.is_installed('GSPELL'):
+ return
+
+ buffer = Gspell.TextBuffer.get_from_gtk_text_buffer(self.get_buffer())
+ checker = buffer.get_spell_checker()
+ assert checker is not None
+ lang = self._get_spell_checker_language(contact)
+
+ with checker.handler_block(self._language_handler_id):
+ checker.set_language(lang)
+
+ def _get_spell_checker_language(self,
+ contact: ChatContactT
+ ) -> Optional[Gspell.Language]:
+
+ lang = contact.settings.get('speller_language')
+ if not lang:
+ # use the default one
+ lang = app.settings.get('speller_language')
+ if not lang:
+ lang = LANG
+
+ assert isinstance(lang, str)
+ lang = Gspell.language_lookup(lang)
+ if lang is None:
+ lang = Gspell.language_get_default()
+ return lang
+
+ def _on_language_changed(self,
+ checker: Gspell.Checker,
+ _param: Any) -> None:
+
+ gspell_lang = checker.get_language()
+ if gspell_lang is not None:
+ assert self._contact is not None
+ self._contact.settings.set('speller_language',
+ gspell_lang.get_code())
+
def switch_contact(self, contact: ChatContactT) -> None:
if self._contact is not None:
account = self._contact.account
@@ -111,6 +170,7 @@ class MessageInputTextView(Gtk.TextView):
self._contact = contact
self._chat_action_processor.switch_contact(contact)
+ self._set_spell_checker_language(contact)
def _on_destroy(self, _widget: Gtk.Widget) -> None:
# We restore the TextView’s drag destination to avoid a GTK warning
@@ -129,7 +189,7 @@ class MessageInputTextView(Gtk.TextView):
_widget: Gtk.Widget,
_event: Gdk.EventFocus
) -> bool:
- self.toggle_speller(True)
+
scrolled = self.get_parent()
assert scrolled
scrolled.get_style_context().add_class('message-input-focus')
@@ -139,11 +199,10 @@ class MessageInputTextView(Gtk.TextView):
_widget: Gtk.Widget,
_event: Gdk.EventFocus
) -> bool:
+
scrolled = self.get_parent()
assert scrolled
scrolled.get_style_context().remove_class('message-input-focus')
- if not self.has_text:
- self.toggle_speller(False)
return False
def _clear_tags(self) -> None:
@@ -210,10 +269,13 @@ class MessageInputTextView(Gtk.TextView):
def get_draft(self, account: str, jid: JID) -> Optional[str]:
return self._drafts.get((account, jid))
- def toggle_speller(self, activate: bool) -> None:
- if app.is_installed('GSPELL') and app.settings.get('use_speller'):
- spell_view = Gspell.TextView.get_from_gtk_text_view(self)
- spell_view.set_inline_spell_checking(activate)
+ def _on_toggle_spell_check(self, *args: Any) -> None:
+ if not app.is_installed('GSPELL'):
+ return
+
+ use_spell_check = app.settings.get('use_speller')
+ spell_view = Gspell.TextView.get_from_gtk_text_view(self)
+ spell_view.set_inline_spell_checking(use_spell_check)
@staticmethod
def _after_paste_clipboard(textview: Gtk.TextView) -> None:
diff --git a/gajim/gtk/preferences.py b/gajim/gtk/preferences.py
index 66066a612..9d4107d3f 100644
--- a/gajim/gtk/preferences.py
+++ b/gajim/gtk/preferences.py
@@ -271,8 +271,7 @@ class Chats(PreferenceBox):
SettingType.CONFIG,
'use_speller',
desc=speller_desc,
- enabled_func=self._speller_available,
- callback=self._on_use_speller),
+ enabled_func=self._speller_available),
Setting(SettingKind.SWITCH,
_('Message Receipts (✔)'),
@@ -318,23 +317,6 @@ class Chats(PreferenceBox):
return app.is_installed('GSPELL')
@staticmethod
- def _on_use_speller(value: bool, *args: Any) -> None:
- # TODO
- # if not value:
- # return
-
- # lang = app.settings.get('speller_language')
- # gspell_lang = Gspell.language_lookup(lang)
- # if gspell_lang is None:
- # gspell_lang = Gspell.language_get_default()
- # if gspell_lang is None:
- # return
- # app.settings.set('speller_language', gspell_lang.get_code())
- # for ctrl in app.window.get_controls():
- # ctrl.set_speller()
- pass
-
- @staticmethod
def _on_show_send_message_button(show_button: bool, *args: Any) -> None:
# Bind to send_on_ctrl_enter to make this setting user-friendly
# This way, users can press Enter to insert a new line, then click Send