diff --git a/include/eepp/ui/uicodeeditor.hpp b/include/eepp/ui/uicodeeditor.hpp index a8c0e5f06..d9ee8edee 100644 --- a/include/eepp/ui/uicodeeditor.hpp +++ b/include/eepp/ui/uicodeeditor.hpp @@ -867,6 +867,8 @@ class EE_API UICodeEditor : public UIWidget, public TextDocument::Client { virtual void onDocumentLoaded( TextDocument* doc ); + virtual void onDocumentReloaded( TextDocument* doc ); + virtual void onDocumentLoaded(); virtual void onDocumentChanged(); diff --git a/src/eepp/system/sys.cpp b/src/eepp/system/sys.cpp index f747bd9e0..62de25bd5 100644 --- a/src/eepp/system/sys.cpp +++ b/src/eepp/system/sys.cpp @@ -1230,4 +1230,5 @@ std::string Sys::getProcessFilePath() { return std::string( exename ); #endif } + }} // namespace EE::System diff --git a/src/eepp/ui/uicodeeditor.cpp b/src/eepp/ui/uicodeeditor.cpp index 4f0ec9844..31ae3e6de 100644 --- a/src/eepp/ui/uicodeeditor.cpp +++ b/src/eepp/ui/uicodeeditor.cpp @@ -443,7 +443,7 @@ TextDocument::LoadStatus UICodeEditor::loadFromFile( const std::string& path ) { invalidateEditor(); updateLongestLineWidth(); invalidateDraw(); - onDocumentLoaded( mDoc.get() ); + onDocumentLoaded(); } return ret; } @@ -577,6 +577,11 @@ void UICodeEditor::onFontStyleChanged() { void UICodeEditor::onDocumentLoaded( TextDocument* ) {} +void UICodeEditor::onDocumentReloaded( TextDocument* ) { + onDocumentClosed( mDoc.get() ); + onDocumentLoaded(); +} + void UICodeEditor::onDocumentLoaded() { DocEvent event( this, mDoc.get(), Event::OnDocumentLoaded ); sendEvent( &event ); diff --git a/src/tools/ecode/ecode.cpp b/src/tools/ecode/ecode.cpp index 045c1d824..933d9b02d 100644 --- a/src/tools/ecode/ecode.cpp +++ b/src/tools/ecode/ecode.cpp @@ -2423,6 +2423,8 @@ void App::onCodeEditorCreated( UICodeEditor* editor, TextDocument& doc ) { } ); auto docChanged = [this]( const Event* event ) { + if ( !Engine::isRunninMainThread() ) + return; const DocEvent* synEvent = static_cast( event ); UICodeEditor* editor = event->getNode()->asType(); UIIcon* icon = mUISceneNode->findIcon( diff --git a/src/tools/ecode/plugins/autocomplete/autocompleteplugin.cpp b/src/tools/ecode/plugins/autocomplete/autocompleteplugin.cpp index 2edfe1c2a..20ae17e9d 100644 --- a/src/tools/ecode/plugins/autocomplete/autocompleteplugin.cpp +++ b/src/tools/ecode/plugins/autocomplete/autocompleteplugin.cpp @@ -104,6 +104,8 @@ void AutoCompletePlugin::onRegister( UICodeEditor* editor ) { listeners.push_back( editor->addEventListener( Event::OnDocumentLoaded, [&, editor]( const Event* ) { mDirty = true; + mDocs.insert( editor->getDocumentRef().get() ); + mEditorDocs[editor] = editor->getDocumentRef().get(); tryRequestCapabilities( editor ); } ) ); diff --git a/src/tools/ecode/plugins/linter/linterplugin.cpp b/src/tools/ecode/plugins/linter/linterplugin.cpp index bad0ad81f..8e0d80189 100644 --- a/src/tools/ecode/plugins/linter/linterplugin.cpp +++ b/src/tools/ecode/plugins/linter/linterplugin.cpp @@ -590,9 +590,11 @@ void LinterPlugin::onRegister( UICodeEditor* editor ) { std::vector listeners; listeners.push_back( - editor->addEventListener( Event::OnDocumentLoaded, [this]( const Event* event ) { + editor->addEventListener( Event::OnDocumentLoaded, [this, editor]( const Event* event ) { Lock l( mDocMutex ); const DocEvent* docEvent = static_cast( event ); + mDocs.insert( docEvent->getDoc() ); + mEditorDocs[editor] = docEvent->getDoc(); setDocDirty( docEvent->getDoc() ); } ) ); @@ -615,6 +617,7 @@ void LinterPlugin::onRegister( UICodeEditor* editor ) { mDocs.erase( oldDoc ); mDirtyDoc.erase( oldDoc ); mEditorDocs[editor] = newDoc; + mDocs.insert( newDoc ); Lock matchesLock( mMatchesMutex ); mMatches.erase( oldDoc ); } ) ); diff --git a/src/tools/ecode/plugins/pluginmanager.cpp b/src/tools/ecode/plugins/pluginmanager.cpp index 0eddace5f..0750f6e63 100644 --- a/src/tools/ecode/plugins/pluginmanager.cpp +++ b/src/tools/ecode/plugins/pluginmanager.cpp @@ -572,9 +572,11 @@ void PluginBase::onRegister( UICodeEditor* editor ) { std::vector listeners; listeners.push_back( - editor->addEventListener( Event::OnDocumentLoaded, [this]( const Event* event ) { + editor->addEventListener( Event::OnDocumentLoaded, [this, editor]( const Event* event ) { Lock l( mMutex ); const DocEvent* docEvent = static_cast( event ); + mDocs.insert( docEvent->getDoc() ); + mEditorDocs[editor] = docEvent->getDoc(); onDocumentLoaded( docEvent->getDoc() ); } ) ); @@ -596,6 +598,7 @@ void PluginBase::onRegister( UICodeEditor* editor ) { TextDocument* newDoc = editor->getDocumentRef().get(); Lock l( mMutex ); mDocs.erase( oldDoc ); + mDocs.insert( newDoc ); mEditorDocs[editor] = newDoc; onDocumentChanged( editor, oldDoc ); } ) );