Browse Source

Cleanup of similar symbol tags

merge-requests/382/head
eidheim 8 years ago
parent
commit
acd71ec3ac
  1. 5
      src/source.cc
  2. 1
      src/source.h
  3. 27
      src/source_clang.cc
  4. 2
      src/source_clang.h
  5. 3
      src/source_language_protocol.cc
  6. 1
      src/source_language_protocol.h

5
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();
}

1
src/source.h

@ -103,6 +103,7 @@ namespace Source {
Tooltips diagnostic_tooltips;
Tooltips type_tooltips;
sigc::connection delayed_tooltips_connection;
Glib::RefPtr<Gtk::TextTag> 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);

27
src/source_clang.cc

@ -818,17 +818,9 @@ const std::unordered_map<std::string, std::string> &Source::ClangViewAutocomplet
Source::ClangViewRefactor::ClangViewRefactor(const boost::filesystem::path &file_path, const Glib::RefPtr<Gsv::Language> &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();
}
}

2
src/source_clang.h

@ -89,9 +89,7 @@ namespace Source {
Identifier get_identifier();
void wait_parsing();
std::list<std::pair<Glib::RefPtr<Gtk::TextMark>, Glib::RefPtr<Gtk::TextMark> > > similar_identifiers_marks;
void tag_similar_identifiers(const Identifier &identifier);
Glib::RefPtr<Gtk::TextTag> similar_identifiers_tag;
Identifier last_tagged_identifier;
};

3
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);

1
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<Gtk::TextTag> similar_symbol_tag;
void tag_similar_symbols();
Offset get_declaration(const Gtk::TextIter &iter);

Loading…
Cancel
Save