diff --git a/src/source.cc b/src/source.cc index 8ecc21f..4f005a9 100644 --- a/src/source.cc +++ b/src/source.cc @@ -132,6 +132,9 @@ Source::View::View(const boost::filesystem::path &file_path, const Glib::RefPtr< //TODO: (gtkmm's Gtk::Object has connect_property_changed, so subclassing this might be an idea) g_signal_connect(search_context, "notify::occurrences-count", G_CALLBACK(search_occurrences_updated), this); + similar_symbol_tag=get_buffer()->create_tag(); + similar_symbol_tag->property_weight()=Pango::WEIGHT_ULTRAHEAVY; + get_buffer()->create_tag("def:warning"); get_buffer()->create_tag("def:warning_underline"); get_buffer()->create_tag("def:error"); @@ -537,6 +540,7 @@ void Source::View::setup_tooltip_and_dialog_events() { if(mark->get_name()=="insert") { hide_tooltips(); + delayed_tooltips_connection.disconnect(); delayed_tooltips_connection=Glib::signal_timeout().connect([this]() { Tooltips::init(); Gdk::Rectangle rectangle; @@ -1157,7 +1161,6 @@ void Source::View::paste() { void Source::View::hide_tooltips() { delayed_tooltips_connection.disconnect(); - delayed_tag_similar_symbols_connection.disconnect(); type_tooltips.hide(); diagnostic_tooltips.hide(); } diff --git a/src/source.h b/src/source.h index a49133e..9e6b562 100644 --- a/src/source.h +++ b/src/source.h @@ -103,6 +103,7 @@ namespace Source { Tooltips diagnostic_tooltips; Tooltips type_tooltips; sigc::connection delayed_tooltips_connection; + Glib::RefPtr similar_symbol_tag; sigc::connection delayed_tag_similar_symbols_connection; virtual void show_diagnostic_tooltips(const Gdk::Rectangle &rectangle) { diagnostic_tooltips.show(rectangle); } void add_diagnostic_tooltip(const Gtk::TextIter &start, const Gtk::TextIter &end, std::string spelling, bool error); diff --git a/src/source_clang.cc b/src/source_clang.cc index 81c5357..1bff414 100644 --- a/src/source_clang.cc +++ b/src/source_clang.cc @@ -818,17 +818,9 @@ const std::unordered_map &Source::ClangViewAutocomplet Source::ClangViewRefactor::ClangViewRefactor(const boost::filesystem::path &file_path, const Glib::RefPtr &language) : BaseView(file_path, language), Source::ClangViewParse(file_path, language) { - similar_identifiers_tag=get_buffer()->create_tag(); - similar_identifiers_tag->property_weight()=Pango::WEIGHT_ULTRAHEAVY; - get_buffer()->signal_changed().connect([this]() { if(last_tagged_identifier) { - for(auto &mark: similar_identifiers_marks) { - get_buffer()->remove_tag(similar_identifiers_tag, mark.first->get_iter(), mark.second->get_iter()); - get_buffer()->delete_mark(mark.first); - get_buffer()->delete_mark(mark.second); - } - similar_identifiers_marks.clear(); + get_buffer()->remove_tag(similar_symbol_tag, get_buffer()->begin(), get_buffer()->end()); last_tagged_identifier=Identifier(); } }); @@ -1722,29 +1714,18 @@ void Source::ClangViewRefactor::wait_parsing() { void Source::ClangViewRefactor::tag_similar_identifiers(const Identifier &identifier) { if(parsed) { if(identifier && last_tagged_identifier!=identifier) { - for(auto &mark: similar_identifiers_marks) { - get_buffer()->remove_tag(similar_identifiers_tag, mark.first->get_iter(), mark.second->get_iter()); - get_buffer()->delete_mark(mark.first); - get_buffer()->delete_mark(mark.second); - } - similar_identifiers_marks.clear(); + get_buffer()->remove_tag(similar_symbol_tag, get_buffer()->begin(), get_buffer()->end()); auto offsets=clang_tokens->get_similar_token_offsets(identifier.kind, identifier.spelling, identifier.cursor.get_all_usr_extended()); for(auto &offset: offsets) { auto start_iter=get_buffer()->get_iter_at_line_index(offset.first.line-1, offset.first.index-1); auto end_iter=get_buffer()->get_iter_at_line_index(offset.second.line-1, offset.second.index-1); - get_buffer()->apply_tag(similar_identifiers_tag, start_iter, end_iter); - similar_identifiers_marks.emplace_back(get_buffer()->create_mark(start_iter), get_buffer()->create_mark(end_iter)); + get_buffer()->apply_tag(similar_symbol_tag, start_iter, end_iter); } last_tagged_identifier=identifier; } } if(!identifier && last_tagged_identifier) { - for(auto &mark: similar_identifiers_marks) { - get_buffer()->remove_tag(similar_identifiers_tag, mark.first->get_iter(), mark.second->get_iter()); - get_buffer()->delete_mark(mark.first); - get_buffer()->delete_mark(mark.second); - } - similar_identifiers_marks.clear(); + get_buffer()->remove_tag(similar_symbol_tag, get_buffer()->begin(), get_buffer()->end()); last_tagged_identifier=Identifier(); } } diff --git a/src/source_clang.h b/src/source_clang.h index 3aca95e..b4aaf80 100644 --- a/src/source_clang.h +++ b/src/source_clang.h @@ -89,9 +89,7 @@ namespace Source { Identifier get_identifier(); void wait_parsing(); - std::list, Glib::RefPtr > > similar_identifiers_marks; void tag_similar_identifiers(const Identifier &identifier); - Glib::RefPtr similar_identifiers_tag; Identifier last_tagged_identifier; }; diff --git a/src/source_language_protocol.cc b/src/source_language_protocol.cc index 3057c51..2064d29 100644 --- a/src/source_language_protocol.cc +++ b/src/source_language_protocol.cc @@ -323,9 +323,6 @@ Source::LanguageProtocolView::LanguageProtocolView(const boost::filesystem::path get_source_buffer()->set_language(language); get_source_buffer()->set_highlight_syntax(true); - similar_symbol_tag=get_buffer()->create_tag(); - similar_symbol_tag->property_weight()=Pango::WEIGHT_ULTRAHEAVY; - status_state="initializing..."; if(update_status_state) update_status_state(this); diff --git a/src/source_language_protocol.h b/src/source_language_protocol.h index 0c647bc..e5d5e1d 100644 --- a/src/source_language_protocol.h +++ b/src/source_language_protocol.h @@ -113,7 +113,6 @@ namespace Source { void escape_text(std::string &text); void unescape_text(std::string &text); - Glib::RefPtr similar_symbol_tag; void tag_similar_symbols(); Offset get_declaration(const Gtk::TextIter &iter);