From 7755b4d148d8de9ed01ef593a48852dd2f9845d6 Mon Sep 17 00:00:00 2001 From: eidheim Date: Fri, 3 Jun 2016 10:55:14 +0200 Subject: [PATCH] Debug: now removes breakpoints in a file that is closed --- src/notebook.cc | 14 +++++++++++--- src/notebook.h | 2 +- src/window.cc | 14 +++++++++++++- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/notebook.cc b/src/notebook.cc index 264c68e..febf58f 100644 --- a/src/notebook.cc +++ b/src/notebook.cc @@ -69,9 +69,17 @@ Notebook::Notebook() : Gtk::HPaned(), notebooks(2) { if(on_switch_page) on_switch_page(); }); - notebook.signal_page_removed().connect([this](Gtk::Widget*, guint) { - if(on_page_removed) - on_page_removed(); + notebook.signal_page_removed().connect([this](Gtk::Widget *widget, guint) { + if(on_page_removed) { + auto hbox=dynamic_cast(widget); + for(size_t c=0;c(widget); diff --git a/src/notebook.h b/src/notebook.h index fb00f4b..fdfdfff 100644 --- a/src/notebook.h +++ b/src/notebook.h @@ -48,7 +48,7 @@ public: Gtk::Label status; std::function on_switch_page; - std::function on_page_removed; + std::function on_page_removed; private: size_t get_index(Source::View *view); Source::View *get_view(size_t notebook_index, int page); diff --git a/src/window.cc b/src/window.cc index eb5613a..1ca0775 100644 --- a/src/window.cc +++ b/src/window.cc @@ -132,7 +132,19 @@ Window::Window() { #endif } }; - Notebook::get().on_page_removed=[] { + Notebook::get().on_page_removed=[](Source::View *removed_view) { +#ifdef JUCI_ENABLE_DEBUG + if(Project::current && Project::debugging && removed_view) { + auto iter=removed_view->get_buffer()->begin(); + while(removed_view->get_source_buffer()->forward_iter_to_source_mark(iter, "debug_breakpoint") || + removed_view->get_source_buffer()->get_source_marks_at_iter(iter, "debug_breakpoint").size()) { + auto end_iter=iter; + while(!end_iter.ends_line() && end_iter.forward_char()) {} + removed_view->get_source_buffer()->remove_source_marks(iter, end_iter, "debug_breakpoint"); + Project::current->debug_remove_breakpoint(removed_view->file_path, iter.get_line()+1, removed_view->get_buffer()->get_line_count()+1); + } + } +#endif EntryBox::get().hide(); };