diff --git a/src/source.cc b/src/source.cc index a855861..a6354ef 100644 --- a/src/source.cc +++ b/src/source.cc @@ -4,6 +4,7 @@ #include "terminal.h" #include "info.h" #include "directories.h" +#include "project.h" #include #include #include @@ -144,6 +145,15 @@ Source::View::View(const boost::filesystem::path &file_path, Glib::RefPtrget_renderer_at_pos(30, 0); + if(render) + render->signal_activate().connect([this](const Gtk::TextIter& iter, const Gdk::Rectangle&, GdkEvent*) { + Source::View::toggle_breakpoint(iter.get_line()); + }); + }); + set_tooltip_and_dialog_events(); if(language && (language->get_id()=="chdr" || language->get_id()=="cpphdr" || language->get_id()=="c" || @@ -522,6 +532,21 @@ void Source::View::configure() { } } +void Source::View::toggle_breakpoint(int line_nr){ + if(get_source_buffer()->get_source_marks_at_line(line_nr, "debug_breakpoint").size()>0) { + auto start_iter=get_buffer()->get_iter_at_line(line_nr); + auto end_iter=get_iter_at_line_end(line_nr); + get_source_buffer()->remove_source_marks(start_iter, end_iter, "debug_breakpoint"); + if(Project::current && Project::debugging) + Project::current->debug_remove_breakpoint(file_path, line_nr+1, get_buffer()->get_line_count()+1); + } + else { + get_source_buffer()->create_source_mark("debug_breakpoint", get_buffer()->get_iter_at_line(line_nr)); + if(Project::current && Project::debugging) + Project::current->debug_add_breakpoint(file_path, line_nr+1); + } +} + void Source::View::set_tooltip_and_dialog_events() { get_buffer()->signal_changed().connect([this] { hide_tooltips(); diff --git a/src/source.h b/src/source.h index 4091003..4ad3938 100644 --- a/src/source.h +++ b/src/source.h @@ -46,6 +46,8 @@ namespace Source { virtual bool save(const std::vector &views); void configure() override; + void toggle_breakpoint(int line_nr); + void search_highlight(const std::string &text, bool case_sensitive, bool regex); std::function update_search_occurrences; void search_forward(); diff --git a/src/source_diff.cc b/src/source_diff.cc index 0b1e0c4..89016f9 100644 --- a/src/source_diff.cc +++ b/src/source_diff.cc @@ -53,7 +53,7 @@ Source::DiffView::DiffView(const boost::filesystem::path &file_path) : Gsv::View renderer->tag_removed=get_buffer()->create_tag("git_removed"); renderer->tag_removed_below=get_buffer()->create_tag(); renderer->tag_removed_above=get_buffer()->create_tag(); - + configure(); }