diff --git a/juci/notebook.cc b/juci/notebook.cc index 0f55682..d00c298 100644 --- a/juci/notebook.cc +++ b/juci/notebook.cc @@ -306,6 +306,7 @@ void Notebook::Controller::OnNewPage(std::string name) { Notebook().set_current_page(Pages()-1); Notebook().set_focus_child(text_vec_.at(Pages()-1)->view); text_vec_.back()->on_new_empty_file(); + set_source_handlers(*text_vec_.back()); } void Notebook::Controller::OnOpenFile(std::string path) { @@ -320,6 +321,7 @@ void Notebook::Controller::OnOpenFile(std::string path) { Notebook().set_current_page(Pages()-1); Notebook().set_focus_child(text_vec_.back()->view); text_vec_.back()->on_open_file(path); + set_source_handlers(*text_vec_.back()); } void Notebook::Controller::OnCreatePage() { @@ -329,24 +331,12 @@ void Notebook::Controller::OnCreatePage() { editor_vec_.push_back(new Gtk::HBox()); scrolledtext_vec_.back()->add(text_vec_.back()->view); editor_vec_.back()->pack_start(*scrolledtext_vec_.back(), true, true); - TextViewHandlers(text_vec_.back()->view); - //Add star on tab label when the page is not saved: - text_vec_.back()->signal_buffer_changed=[this](bool was_saved) { - if(was_saved) { - std::string path=text_vec_.at(CurrentPage())->parser.file_path; - size_t pos = path.find_last_of("/\\"); - std::string filename=path; - if(pos!=std::string::npos) - filename=path.substr(pos+1); - Notebook().set_tab_label_text(*(Notebook().get_nth_page(CurrentPage())), filename+"*"); - } - }; } void Notebook::Controller::OnCloseCurrentPage() { INFO("Notebook close page"); if (Pages() != 0) { - if(!text_vec_.back()->is_saved){ + if(!text_vec_.at(CurrentPage())->is_saved){ AskToSaveDialog(); } int page = CurrentPage(); @@ -493,12 +483,25 @@ void Notebook::Controller::BufferChangeHandler(Glib::RefPtr }); } -void Notebook::Controller::TextViewHandlers(Gtk::TextView& textview) { - textview.signal_button_release_event(). +void Notebook::Controller::set_source_handlers(Source::Controller& controller) { + controller.view.signal_button_release_event(). connect(sigc::mem_fun(*this, &Notebook::Controller::OnMouseRelease), false); - textview.signal_key_release_event(). + controller.view.signal_key_release_event(). connect(sigc::mem_fun(*this, &Notebook::Controller::OnKeyRelease), false); + + //Add star on tab label when the page is not saved: + controller.buffer()->signal_changed().connect([this]() { + if(text_vec_.at(CurrentPage())->is_saved) { + std::string path=text_vec_.at(CurrentPage())->parser.file_path; + size_t pos = path.find_last_of("/\\"); + std::string filename=path; + if(pos!=std::string::npos) + filename=path.substr(pos+1); + Notebook().set_tab_label_text(*(Notebook().get_nth_page(CurrentPage())), filename+"*"); + } + text_vec_.at(CurrentPage())->is_saved=false; + }); } void Notebook::Controller::PopupSelectHandler(Gtk::Dialog &popup, diff --git a/juci/notebook.h b/juci/notebook.h index 8361dd8..e9305b2 100644 --- a/juci/notebook.h +++ b/juci/notebook.h @@ -74,7 +74,7 @@ namespace Notebook { bool LegalExtension(std::string extension); protected: - void TextViewHandlers(Gtk::TextView& textview); + void set_source_handlers(Source::Controller& controller); void PopupSelectHandler(Gtk::Dialog &popup, Gtk::ListViewText &listview, std::map diff --git a/juci/source.cc b/juci/source.cc index d8442e7..44b0e7b 100644 --- a/juci/source.cc +++ b/juci/source.cc @@ -233,9 +233,6 @@ void Source::Controller::update_syntax(const std::vector &ranges) void Source::Controller::set_handlers() { buffer()->signal_changed().connect([this]() { - if(signal_buffer_changed) - signal_buffer_changed(is_saved); - is_saved=false; parse_thread_mapped=false; parse_thread_go=true; }); diff --git a/juci/source.h b/juci/source.h index 6469915..927af94 100644 --- a/juci/source.h +++ b/juci/source.h @@ -118,8 +118,6 @@ namespace Source { Parser parser; View view; - std::function signal_buffer_changed; - private: Glib::Dispatcher parse_done; Glib::Dispatcher parse_start;