From 0c9b4bb68f2068a46436a34b606e9ff1171c4d1c Mon Sep 17 00:00:00 2001 From: eidheim Date: Sat, 19 Sep 2015 12:05:44 +0200 Subject: [PATCH] Fixed spellcheck after return key. --- src/source.cc | 24 ++++++++++++++++++++++-- src/source.h | 3 ++- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/source.cc b/src/source.cc index 880b5c9..1abec3b 100644 --- a/src/source.cc +++ b/src/source.cc @@ -106,10 +106,21 @@ Source::View::View(const boost::filesystem::path &file_path, Glib::RefPtriter_has_context_class(context_iter, "no-spell-check")) || get_source_buffer()->iter_has_context_class(context_iter, "comment") || get_source_buffer()->iter_has_context_class(context_iter, "string")) { - if(!is_word_iter(iter)) { //Might have used space or - to split two words + if(!is_word_iter(iter) || last_keyval_is_return) { //Might have used space or - to split two words auto first=iter; auto second=iter; - if(first.backward_char() && second.forward_char() && !second.starts_line()) { + if(last_keyval_is_return) { + while(first && !first.ends_line()) + first.backward_char(); + if(first.backward_char() && second.forward_char()) { + get_buffer()->remove_tag_by_name("spellcheck_error", first, second); + auto word=spellcheck_get_word(first); + spellcheck_word(word.first, word.second); + word=spellcheck_get_word(second); + spellcheck_word(word.first, word.second); + } + } + else if(first.backward_char() && second.forward_char() && !second.starts_line()) { get_buffer()->remove_tag_by_name("spellcheck_error", first, second); auto word=spellcheck_get_word(first); spellcheck_word(word.first, word.second); @@ -786,6 +797,10 @@ bool Source::View::on_key_press_event(GdkEventKey* key) { last_keyval_is_backspace=true; else last_keyval_is_backspace=false; + if(key->keyval==GDK_KEY_Return) + last_keyval_is_return=true; + else + last_keyval_is_return=false; get_source_buffer()->begin_user_action(); //Indent as in next or previous line @@ -1463,6 +1478,11 @@ bool Source::ClangViewParse::on_key_press_event(GdkEventKey* key) { return true; } + if(key->keyval==GDK_KEY_Return) + last_keyval_is_return=true; + else + last_keyval_is_return=false; + if(get_buffer()->get_has_selection()) { return Source::View::on_key_press_event(key); } diff --git a/src/source.h b/src/source.h index 3dfb0f5..143265e 100644 --- a/src/source.h +++ b/src/source.h @@ -119,6 +119,8 @@ namespace Source { bool spellcheck_all=false; std::unique_ptr spellcheck_suggestions_dialog; bool spellcheck_suggestions_dialog_shown=false; + bool last_keyval_is_backspace=false; + bool last_keyval_is_return=false; private: GtkSourceSearchContext *search_context; GtkSourceSearchSettings *search_settings; @@ -133,7 +135,6 @@ namespace Source { std::vector spellcheck_get_suggestions(const Gtk::TextIter& start, const Gtk::TextIter& end); sigc::connection delayed_spellcheck_suggestions_connection; sigc::connection delayed_spellcheck_error_clear; - bool last_keyval_is_backspace=false; }; class GenericView : public View {