diff options
author | David Schulz <david.schulz@qt.io> | 2019-09-20 07:41:21 +0200 |
---|---|---|
committer | David Schulz <david.schulz@qt.io> | 2019-09-23 08:51:46 +0000 |
commit | 20e6e84b1af26134eb9481ae93f1ca21ea858a90 (patch) | |
tree | 076c53863b7fccf8e583c181c2d37e235bc98e26 | |
parent | 17f2def68c553ea94112e75fca78b07d81b509ba (diff) | |
download | qt-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.cpp | 25 |
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; } } |