forked from qt-creator/qt-creator
LanguageClient: show unreachable servers in the lsp menu
Task-number: QTCREATORBUG-31125 Change-Id: I6526955fe4e3d65c6d83b88876eb47692d694955 Reviewed-by: Sami Shalayel <sami.shalayel@qt.io> Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -275,13 +275,14 @@ LanguageClientManager *LanguageClientManager::instance()
|
|||||||
return managerInstance;
|
return managerInstance;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<Client *> LanguageClientManager::clientsSupportingDocument(const TextEditor::TextDocument *doc)
|
QList<Client *> LanguageClientManager::clientsSupportingDocument(
|
||||||
|
const TextEditor::TextDocument *doc, bool onlyReachable)
|
||||||
{
|
{
|
||||||
QTC_ASSERT(managerInstance, return {});
|
QTC_ASSERT(managerInstance, return {});
|
||||||
QTC_ASSERT(doc, return {};);
|
QTC_ASSERT(doc, return {};);
|
||||||
return Utils::filtered(managerInstance->reachableClients(), [doc](Client *client) {
|
return Utils::filtered(
|
||||||
return client->isSupportedDocument(doc);
|
onlyReachable ? managerInstance->reachableClients() : managerInstance->m_clients,
|
||||||
});
|
[doc](Client *client) { return client->isSupportedDocument(doc); });
|
||||||
}
|
}
|
||||||
|
|
||||||
void LanguageClientManager::applySettings()
|
void LanguageClientManager::applySettings()
|
||||||
|
@@ -48,7 +48,8 @@ public:
|
|||||||
|
|
||||||
static LanguageClientManager *instance();
|
static LanguageClientManager *instance();
|
||||||
|
|
||||||
static QList<Client *> clientsSupportingDocument(const TextEditor::TextDocument *doc);
|
static QList<Client *> clientsSupportingDocument(
|
||||||
|
const TextEditor::TextDocument *doc, bool onlyReachable = true);
|
||||||
|
|
||||||
static void applySettings();
|
static void applySettings();
|
||||||
static QList<BaseSettings *> currentSettings();
|
static QList<BaseSettings *> currentSettings();
|
||||||
|
@@ -256,7 +256,7 @@ void updateEditorToolBar(Core::IEditor *editor)
|
|||||||
auto menu = new QMenu;
|
auto menu = new QMenu;
|
||||||
auto clientsGroup = new QActionGroup(menu);
|
auto clientsGroup = new QActionGroup(menu);
|
||||||
clientsGroup->setExclusive(true);
|
clientsGroup->setExclusive(true);
|
||||||
for (auto client : LanguageClientManager::clientsSupportingDocument(document)) {
|
for (auto client : LanguageClientManager::clientsSupportingDocument(document, false)) {
|
||||||
auto action = clientsGroup->addAction(client->name());
|
auto action = clientsGroup->addAction(client->name());
|
||||||
auto reopen = [action, client = QPointer(client), document] {
|
auto reopen = [action, client = QPointer(client), document] {
|
||||||
if (!client)
|
if (!client)
|
||||||
@@ -266,6 +266,10 @@ void updateEditorToolBar(Core::IEditor *editor)
|
|||||||
};
|
};
|
||||||
action->setCheckable(true);
|
action->setCheckable(true);
|
||||||
action->setChecked(client == LanguageClientManager::clientForDocument(document));
|
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);
|
QObject::connect(action, &QAction::triggered, reopen);
|
||||||
}
|
}
|
||||||
menu->addActions(clientsGroup->actions());
|
menu->addActions(clientsGroup->actions());
|
||||||
|
Reference in New Issue
Block a user