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) if(on_switch_page)
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) { notebook.signal_page_added().connect([this](Gtk::Widget* widget, guint) {
auto hbox=dynamic_cast<Gtk::HBox*>(widget); auto hbox=dynamic_cast<Gtk::HBox*>(widget);
for(size_t c=0;c<hboxes.size();++c) { 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); source_maps.erase(source_maps.begin()+index);
#endif #endif
auto source_view=source_views.at(index); if(on_close)
if(auto source_clang_view=dynamic_cast<Source::ClangView*>(source_view)) on_close(view);
source_clang_view->async_delete();
if(auto clang_view=dynamic_cast<Source::ClangView*>(view))
clang_view->async_delete();
else else
delete source_view; delete view;
source_views.erase(source_views.begin()+index); source_views.erase(source_views.begin()+index);
scrolled_windows.erase(scrolled_windows.begin()+index); scrolled_windows.erase(scrolled_windows.begin()+index);
hboxes.erase(hboxes.begin()+index); hboxes.erase(hboxes.begin()+index);

2
src/notebook.h

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

14
src/window.cc

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

Loading…
Cancel
Save