diff --git a/src/plugins/languageclient/languageclientmanager.cpp b/src/plugins/languageclient/languageclientmanager.cpp index 11ce6b4618e..3022ba527d9 100644 --- a/src/plugins/languageclient/languageclientmanager.cpp +++ b/src/plugins/languageclient/languageclientmanager.cpp @@ -275,13 +275,14 @@ LanguageClientManager *LanguageClientManager::instance() return managerInstance; } -QList LanguageClientManager::clientsSupportingDocument(const TextEditor::TextDocument *doc) +QList LanguageClientManager::clientsSupportingDocument( + const TextEditor::TextDocument *doc, bool onlyReachable) { QTC_ASSERT(managerInstance, return {}); QTC_ASSERT(doc, return {};); - return Utils::filtered(managerInstance->reachableClients(), [doc](Client *client) { - return client->isSupportedDocument(doc); - }); + return Utils::filtered( + onlyReachable ? managerInstance->reachableClients() : managerInstance->m_clients, + [doc](Client *client) { return client->isSupportedDocument(doc); }); } void LanguageClientManager::applySettings() diff --git a/src/plugins/languageclient/languageclientmanager.h b/src/plugins/languageclient/languageclientmanager.h index 12bef4f6fe4..a970ef66d27 100644 --- a/src/plugins/languageclient/languageclientmanager.h +++ b/src/plugins/languageclient/languageclientmanager.h @@ -48,7 +48,8 @@ public: static LanguageClientManager *instance(); - static QList clientsSupportingDocument(const TextEditor::TextDocument *doc); + static QList clientsSupportingDocument( + const TextEditor::TextDocument *doc, bool onlyReachable = true); static void applySettings(); static QList currentSettings(); diff --git a/src/plugins/languageclient/languageclientutils.cpp b/src/plugins/languageclient/languageclientutils.cpp index f7b52fdc9b8..bd950004f91 100644 --- a/src/plugins/languageclient/languageclientutils.cpp +++ b/src/plugins/languageclient/languageclientutils.cpp @@ -256,7 +256,7 @@ void updateEditorToolBar(Core::IEditor *editor) auto menu = new QMenu; auto clientsGroup = new QActionGroup(menu); clientsGroup->setExclusive(true); - for (auto client : LanguageClientManager::clientsSupportingDocument(document)) { + for (auto client : LanguageClientManager::clientsSupportingDocument(document, false)) { auto action = clientsGroup->addAction(client->name()); auto reopen = [action, client = QPointer(client), document] { if (!client) @@ -266,6 +266,10 @@ void updateEditorToolBar(Core::IEditor *editor) }; action->setCheckable(true); action->setChecked(client == LanguageClientManager::clientForDocument(document)); + action->setEnabled(client->reachable()); + QObject::connect(client, &Client::stateChanged, action, [action, client] { + action->setEnabled(client->reachable()); + }); QObject::connect(action, &QAction::triggered, reopen); } menu->addActions(clientsGroup->actions());