aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThibaut Girka <thib@sitedethib.com>2018-03-22 16:10:52 +0100
committerfiaxh <git@lightrise.org>2021-01-21 15:31:12 +0100
commit830eba3a06506fd5ac527a74c8ce4ad5ba39cbf0 (patch)
tree022b90b826667940499c49f39506e19e4c7ad213
parentf94d8f56c79b0fe792b471a2423edb7beb4abd89 (diff)
downloaddino-830eba3a06506fd5ac527a74c8ce4ad5ba39cbf0.tar.gz
dino-830eba3a06506fd5ac527a74c8ce4ad5ba39cbf0.zip
Add spell-checking using Gspell
-rw-r--r--cmake/FindGspell.cmake14
-rw-r--r--main/CMakeLists.txt2
-rw-r--r--main/src/ui/chat_input/chat_text_view.vala3
-rw-r--r--main/src/ui/chat_input/spell_checker.vala35
4 files changed, 54 insertions, 0 deletions
diff --git a/cmake/FindGspell.cmake b/cmake/FindGspell.cmake
new file mode 100644
index 00000000..51c33c7e
--- /dev/null
+++ b/cmake/FindGspell.cmake
@@ -0,0 +1,14 @@
+include(PkgConfigWithFallback)
+find_pkg_config_with_fallback(Gspell
+ PKG_CONFIG_NAME gspell-1
+ LIB_NAMES gspell-1
+ INCLUDE_NAMES gspell.h
+ INCLUDE_DIR_SUFFIXES gspell-1 gspell-1/gspell
+ DEPENDS Gtk
+)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Gspell
+ REQUIRED_VARS Gspell_LIBRARY
+ VERSION_VAR Gspell_VERSION)
+
diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt
index 5975da8b..5169e8ae 100644
--- a/main/CMakeLists.txt
+++ b/main/CMakeLists.txt
@@ -10,6 +10,7 @@ find_packages(MAIN_PACKAGES REQUIRED
GObject
GTK3
ICU
+ Gspell
)
set(RESOURCE_LIST
@@ -129,6 +130,7 @@ SOURCES
src/ui/chat_input/encryption_button.vala
src/ui/chat_input/occupants_tab_completer.vala
src/ui/chat_input/smiley_converter.vala
+ src/ui/chat_input/spell_checker.vala
src/ui/chat_input/view.vala
src/ui/contact_details/blocking_provider.vala
diff --git a/main/src/ui/chat_input/chat_text_view.vala b/main/src/ui/chat_input/chat_text_view.vala
index 8d5cb7a1..2f8393d2 100644
--- a/main/src/ui/chat_input/chat_text_view.vala
+++ b/main/src/ui/chat_input/chat_text_view.vala
@@ -39,6 +39,7 @@ public class ChatTextView : ScrolledWindow {
private int vscrollbar_min_height;
private SmileyConverter smiley_converter;
public EditHistory edit_history;
+ private SpellChecker spell_checker;
construct {
max_content_height = 300;
@@ -47,6 +48,7 @@ public class ChatTextView : ScrolledWindow {
smiley_converter = new SmileyConverter(text_view);
edit_history = new EditHistory(text_view);
+ spell_checker = new SpellChecker(text_view);
this.get_vscrollbar().get_preferred_height(out vscrollbar_min_height, null);
this.vadjustment.notify["upper"].connect_after(on_upper_notify);
@@ -57,6 +59,7 @@ public class ChatTextView : ScrolledWindow {
public void initialize_for_conversation(Conversation conversation) {
edit_history.initialize_for_conversation(conversation);
+ spell_checker.initialize_for_conversation(conversation);
}
public override void get_preferred_height(out int min_height, out int nat_height) {
diff --git a/main/src/ui/chat_input/spell_checker.vala b/main/src/ui/chat_input/spell_checker.vala
new file mode 100644
index 00000000..a05d9251
--- /dev/null
+++ b/main/src/ui/chat_input/spell_checker.vala
@@ -0,0 +1,35 @@
+using Gdk;
+using Gee;
+using Gspell;
+
+using Dino.Entities;
+
+namespace Dino.Ui {
+
+public class SpellChecker {
+
+ private Conversation? conversation;
+ private TextView gspell_view;
+ private HashMap<Conversation, Language> language_cache = new HashMap<Conversation, Language>(Conversation.hash_func, Conversation.equals_func);
+
+ public SpellChecker(Gtk.TextView text_input) {
+ this.gspell_view = TextView.get_from_gtk_text_view(text_input);
+ gspell_view.basic_setup();
+ }
+
+ public void initialize_for_conversation(Conversation conversation) {
+ Checker spell_checker = TextBuffer.get_from_gtk_text_buffer(gspell_view.view.buffer).spell_checker;
+
+ if (this.conversation != null) language_cache[this.conversation] = spell_checker.language;
+
+ this.conversation = conversation;
+
+ if (language_cache.has_key(this.conversation)) {
+ spell_checker.language = language_cache[conversation];
+ } else {
+ spell_checker.language = null;
+ }
+ }
+}
+
+}