summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Schulz <david.schulz@qt.io>2019-09-20 07:41:21 +0200
committerDavid Schulz <david.schulz@qt.io>2019-09-23 08:51:46 +0000
commit20e6e84b1af26134eb9481ae93f1ca21ea858a90 (patch)
tree076c53863b7fccf8e583c181c2d37e235bc98e26
parent17f2def68c553ea94112e75fca78b07d81b509ba (diff)
downloadqt-creator-20e6e84b1af26134eb9481ae93f1ca21ea858a90.tar.gz
LanguageClient: Add already open documents to starting client
After settings are applied in the manager make sure to assign all open documents to the newly created clients if the document filter accepts them. Change-Id: I30e06e37bc4fde0bc7bab34a2de564a7df043edf Reviewed-by: Christian Stenger <christian.stenger@qt.io>
-rw-r--r--src/plugins/languageclient/languageclientmanager.cpp25
1 files changed, 17 insertions, 8 deletions
diff --git a/src/plugins/languageclient/languageclientmanager.cpp b/src/plugins/languageclient/languageclientmanager.cpp
index 923b521bfd..959f3150b9 100644
--- a/src/plugins/languageclient/languageclientmanager.cpp
+++ b/src/plugins/languageclient/languageclientmanager.cpp
@@ -224,6 +224,8 @@ void LanguageClientManager::applySettings()
documents << managerInstance->m_clientForDocument.keys(client);
shutdownClient(client);
}
+ for (auto document : documents)
+ managerInstance->m_clientForDocument.remove(document);
if (!setting->isValid() || !setting->m_enabled)
continue;
switch (setting->m_startBehavior) {
@@ -234,13 +236,19 @@ void LanguageClientManager::applySettings()
break;
}
case BaseSettings::RequiresFile: {
- if (Utils::anyOf(Core::DocumentModel::openedDocuments(),
- [filter = setting->m_languageFilter](Core::IDocument *doc) {
- return filter.isSupported(doc);
- })) {
+ for (Core::IDocument *document : Core::DocumentModel::openedDocuments()) {
+ if (auto textDocument = qobject_cast<TextEditor::TextDocument *>(document)) {
+ if (setting->m_languageFilter.isSupported(document))
+ documents << textDocument;
+ }
+ }
+ if (!documents.isEmpty()) {
Client *client = startClient(setting);
- for (TextEditor::TextDocument *document : documents)
- managerInstance->m_clientForDocument[document] = client;
+ for (TextEditor::TextDocument *document : documents) {
+ if (managerInstance->m_clientForDocument.value(document).isNull())
+ managerInstance->m_clientForDocument[document] = client;
+ client->openDocument(document);
+ }
}
break;
}
@@ -295,7 +303,8 @@ const BaseSettings *LanguageClientManager::settingForClient(Client *client)
Client *LanguageClientManager::clientForDocument(TextEditor::TextDocument *document)
{
QTC_ASSERT(managerInstance, return nullptr);
- return document == nullptr ? nullptr : managerInstance->m_clientForDocument[document].data();
+ return document == nullptr ? nullptr
+ : managerInstance->m_clientForDocument.value(document).data();
}
Client *LanguageClientManager::clientForFilePath(const Utils::FilePath &filePath)
@@ -419,7 +428,7 @@ void LanguageClientManager::documentOpened(Core::IDocument *document)
}
for (auto client : clients) {
openDocumentWithClient(textDocument, client);
- if (m_clientForDocument.value(textDocument).isNull())
+ if (!m_clientForDocument.contains(textDocument))
m_clientForDocument[textDocument] = client;
}
}