diff --git a/src/files.h b/src/files.h index 78d8abb..50476c7 100644 --- a/src/files.h +++ b/src/files.h @@ -30,7 +30,6 @@ const std::string configjson = " \"45\": \"def:type\",\n" " \"46\": \"def:identifier\",\n" " \"109\": \"def:string\",\n" -" \"500\": \"def:preprocessor\",\n" " \"702\": \"def:statement\",\n" " \"705\": \"def:comment\"\n" " },\n" diff --git a/src/notebook.cc b/src/notebook.cc index ad329ab..f8f6feb 100644 --- a/src/notebook.cc +++ b/src/notebook.cc @@ -113,6 +113,15 @@ bool Notebook::save(int page) { auto view=get_view(page); if (view->file_path != "" && view->get_buffer()->get_modified()) { if(juci::filesystem::write(view->file_path, view->get_buffer())) { + if(auto clang_view=dynamic_cast(view)) { + for(auto a_view: source_views) { + if(auto a_clang_view=dynamic_cast(a_view)) { + if(clang_view!=a_clang_view) + a_clang_view->start_reparse_needed=true; + } + } + } + view->get_buffer()->set_modified(false); Singleton::terminal()->print("File saved to: " +view->file_path.string()+"\n"); diff --git a/src/source.cc b/src/source.cc index e89914f..a9f76de 100644 --- a/src/source.cc +++ b/src/source.cc @@ -320,7 +320,8 @@ Source::View::~View() { g_clear_object(&search_context); g_clear_object(&search_settings); - delete_aspell_speller(spellcheck_checker); + if(spellcheck_checker!=NULL) + delete_aspell_speller(spellcheck_checker); } void Source::View::search_highlight(const std::string &text, bool case_sensitive, bool regex) { @@ -962,10 +963,12 @@ void Source::ClangViewParse::update_syntax() { auto kind=(int)token.get_cursor().get_kind(); if(kind==101 || kind==102) kind=(int)token.get_cursor().get_referenced().get_kind(); - ranges.emplace_back(token.offsets, kind); //TODO: Need to get type of referenced token if any + if(kind!=500) + ranges.emplace_back(token.offsets, kind); } - else if(token.get_kind()==3) // LiteralToken + else if(token.get_kind()==3) { // LiteralToken ranges.emplace_back(token.offsets, 109); + } else if(token.get_kind()==4) // CommentToken ranges.emplace_back(token.offsets, 705); } @@ -1330,6 +1333,8 @@ void Source::ClangViewAutocomplete::autocomplete() { get_source_buffer()->begin_user_action(); completion_dialog->show(); } + else + start_reparse(); } else { set_status(""); @@ -1542,7 +1547,7 @@ Source::ClangViewAutocomplete(file_path, project_path) { Source::ClangView::ClangView(const boost::filesystem::path &file_path, const boost::filesystem::path& project_path, Glib::RefPtr language): ClangViewRefactor(file_path, project_path) { if(language) { - get_source_buffer()->set_highlight_syntax(false); + get_source_buffer()->set_highlight_syntax(true); get_source_buffer()->set_language(language); } diff --git a/src/source.h b/src/source.h index 32bdb0d..3abf39b 100644 --- a/src/source.h +++ b/src/source.h @@ -126,6 +126,7 @@ namespace Source { ClangViewParse(const boost::filesystem::path &file_path, const boost::filesystem::path& project_path); boost::filesystem::path project_path; void start_reparse(); + bool start_reparse_needed=false; protected: void init_parse(); bool on_key_press_event(GdkEventKey* key); diff --git a/src/window.cc b/src/window.cc index 9b91fac..3fd573e 100644 --- a/src/window.cc +++ b/src/window.cc @@ -93,8 +93,12 @@ Window::Window() : box(Gtk::ORIENTATION_VERTICAL), notebook(directories), compil directories.select(notebook.get_current_view()->file_path); - if(auto source_view=dynamic_cast(notebook.get_current_view())) - source_view->start_reparse(); + if(auto source_view=dynamic_cast(notebook.get_current_view())) { + if(source_view->start_reparse_needed) { + source_view->start_reparse(); + source_view->start_reparse_needed=false; + } + } Singleton::status()->set_text(notebook.get_current_view()->status); }