Browse Source

Cleanup of notebook page close

merge-requests/365/head
Ole Christian Eidheim 10 years ago
parent
commit
277e1a481e
  1. 22
      src/notebook.cc
  2. 2
      src/notebook.h
  3. 14
      src/window.cc

22
src/notebook.cc

@ -69,18 +69,6 @@ Notebook::Notebook() : Gtk::HPaned(), notebooks(2) {
if(on_switch_page)
on_switch_page();
});
notebook.signal_page_removed().connect([this](Gtk::Widget *widget, guint) {
if(on_page_removed) {
auto hbox=dynamic_cast<Gtk::HBox*>(widget);
for(size_t c=0;c<hboxes.size();++c) {
if(hboxes[c].get()==hbox) {
on_page_removed(source_views[c]);
return;
}
}
on_page_removed(nullptr);
}
});
notebook.signal_page_added().connect([this](Gtk::Widget* widget, guint) {
auto hbox=dynamic_cast<Gtk::HBox*>(widget);
for(size_t c=0;c<hboxes.size();++c) {
@ -356,11 +344,13 @@ bool Notebook::close(size_t index) {
source_maps.erase(source_maps.begin()+index);
#endif
auto source_view=source_views.at(index);
if(auto source_clang_view=dynamic_cast<Source::ClangView*>(source_view))
source_clang_view->async_delete();
if(on_close)
on_close(view);
if(auto clang_view=dynamic_cast<Source::ClangView*>(view))
clang_view->async_delete();
else
delete source_view;
delete view;
source_views.erase(source_views.begin()+index);
scrolled_windows.erase(scrolled_windows.begin()+index);
hboxes.erase(hboxes.begin()+index);

2
src/notebook.h

@ -48,7 +48,7 @@ public:
Gtk::Label status;
std::function<void()> on_switch_page;
std::function<void(Source::View*)> on_page_removed;
std::function<void(Source::View*)> on_close;
private:
size_t get_index(Source::View *view);
Source::View *get_view(size_t notebook_index, int page);

14
src/window.cc

@ -132,16 +132,16 @@ Window::Window() {
#endif
}
};
Notebook::get().on_page_removed=[](Source::View *removed_view) {
Notebook::get().on_close=[](Source::View *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()) {
if(Project::current && Project::debugging) {
auto iter=view->get_buffer()->begin();
while(view->get_source_buffer()->forward_iter_to_source_mark(iter, "debug_breakpoint") ||
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);
view->get_source_buffer()->remove_source_marks(iter, end_iter, "debug_breakpoint");
Project::current->debug_remove_breakpoint(view->file_path, iter.get_line()+1, view->get_buffer()->get_line_count()+1);
}
}
#endif

Loading…
Cancel
Save