diff --git a/src/source.cc b/src/source.cc index 98cb8ff..f985777 100644 --- a/src/source.cc +++ b/src/source.cc @@ -220,22 +220,32 @@ Source::View::View(const boost::filesystem::path &file_path, Glib::RefPtrproperty_name()=="spellcheck_error") { - has_spellcheck_error=true; - break; - } - } - if(has_spellcheck_error) { - auto word=spellcheck_get_word(iter); - get_buffer()->remove_tag_by_name("spellcheck_error", word.first, word.second); - } - } } } + delayed_spellcheck_error_clear.disconnect(); + delayed_spellcheck_error_clear=Glib::signal_timeout().connect([this]() { + auto iter=get_buffer()->begin(); + bool spell_check=get_source_buffer()->iter_has_context_class(iter, "string") || get_source_buffer()->iter_has_context_class(iter, "comment"); + Gtk::TextIter begin_no_spellcheck_iter; + if(!spell_check) + begin_no_spellcheck_iter=iter; + while(iter!=get_buffer()->end()) { + auto iter1=iter; + auto iter2=iter; + get_source_buffer()->iter_forward_to_context_class_toggle(iter1, "string"); + get_source_buffer()->iter_forward_to_context_class_toggle(iter2, "comment"); + if(iter2remove_tag_by_name("spellcheck_error", begin_no_spellcheck_iter, iter); + } + return false; + }, 1000); }); get_buffer()->signal_mark_set().connect([this](const Gtk::TextBuffer::iterator& iter, const Glib::RefPtr& mark) { @@ -253,12 +263,6 @@ Source::View::View(const boost::filesystem::path &file_path, Glib::RefPtrget_insert()->get_iter(); - if(!((spellcheck_all && !get_source_buffer()->iter_has_context_class(iter, "no-spell-check")) || get_source_buffer()->iter_has_context_class(iter, "comment") || get_source_buffer()->iter_has_context_class(iter, "string"))) { - auto word=spellcheck_get_word(iter); - get_buffer()->remove_tag_by_name("spellcheck_error", word.first, word.second); - return false; - } spellcheck_suggestions_dialog=std::unique_ptr(new SelectionDialog(*this, get_buffer()->create_mark(get_buffer()->get_insert()->get_iter()), false)); spellcheck_suggestions_dialog->on_hide=[this](){ spellcheck_suggestions_dialog_shown=false; diff --git a/src/source.h b/src/source.h index 8fd6409..d607dbd 100644 --- a/src/source.h +++ b/src/source.h @@ -126,6 +126,7 @@ namespace Source { void spellcheck_word(const Gtk::TextIter& start, const Gtk::TextIter& end); 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; };