aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/languageclient/languageclientmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/languageclient/languageclientmanager.cpp')
-rw-r--r--src/plugins/languageclient/languageclientmanager.cpp39
1 files changed, 16 insertions, 23 deletions
diff --git a/src/plugins/languageclient/languageclientmanager.cpp b/src/plugins/languageclient/languageclientmanager.cpp
index 7e42c5c070d..d0740056950 100644
--- a/src/plugins/languageclient/languageclientmanager.cpp
+++ b/src/plugins/languageclient/languageclientmanager.cpp
@@ -245,11 +245,8 @@ void LanguageClientManager::applySettings()
}
if (!documents.isEmpty()) {
Client *client = startClient(setting);
- for (TextEditor::TextDocument *document : documents) {
- if (managerInstance->m_clientForDocument.value(document).isNull())
- managerInstance->m_clientForDocument[document] = client;
+ for (TextEditor::TextDocument *document : documents)
client->openDocument(document);
- }
}
break;
}
@@ -332,13 +329,21 @@ Client *LanguageClientManager::clientForUri(const DocumentUri &uri)
return clientForFilePath(uri.toFilePath());
}
-void LanguageClientManager::reOpenDocumentWithClient(TextEditor::TextDocument *document, Client *client)
+void LanguageClientManager::openDocumentWithClient(TextEditor::TextDocument *document, Client *client)
{
- Utils::ExecuteOnDestruction outlineUpdater(&TextEditor::IOutlineWidgetFactory::updateOutline);
- if (Client *currentClient = clientForDocument(document))
+ Client *currentClient = clientForDocument(document);
+ if (client == currentClient)
+ return;
+ if (currentClient)
currentClient->deactivateDocument(document);
managerInstance->m_clientForDocument[document] = client;
- client->activateDocument(document);
+ if (client) {
+ if (!client->documentOpen(document))
+ client->openDocument(document);
+ else
+ client->activateDocument(document);
+ }
+ TextEditor::IOutlineWidgetFactory::updateOutline();
}
void LanguageClientManager::logBaseMessage(const LspLogMessage::MessageSender sender,
@@ -458,22 +463,12 @@ void LanguageClientManager::documentOpened(Core::IDocument *document)
} else if (setting->m_startBehavior == BaseSettings::RequiresFile && clients.isEmpty()) {
clients << startClient(setting);
}
- for (auto client : clients) {
- if (!m_clientForDocument.contains(textDocument))
- m_clientForDocument[textDocument] = client;
- openDocumentWithClient(textDocument, client);
- }
+ for (auto client : clients)
+ client->openDocument(textDocument);
}
}
}
-void LanguageClientManager::openDocumentWithClient(TextEditor::TextDocument *document,
- Client *client)
-{
- if (client && client->state() != Client::Error)
- client->openDocument(document);
-}
-
void LanguageClientManager::documentClosed(Core::IDocument *document)
{
if (auto textDocument = qobject_cast<TextEditor::TextDocument *>(document)) {
@@ -629,9 +624,7 @@ void LanguageClientManager::updateProject(ProjectExplorer::Project *project)
newClient = startClient(setting, project);
if (!newClient)
break;
- openDocumentWithClient(textDoc, newClient);
- if (m_clientForDocument.value(textDoc) == nullptr)
- m_clientForDocument[textDoc] = newClient;
+ newClient->openDocument(textDoc);
}
}
}