Index: src/core/loader.cpp =================================================================== --- src/core/loader.cpp +++ src/core/loader.cpp @@ -52,7 +52,9 @@ QStringList languagesNameCache; QHash > spellerCache; + static bool defaultPluginIgnored; }; +bool LoaderPrivate::defaultPluginIgnored = false; Q_GLOBAL_STATIC(Loader, s_loader) @@ -107,7 +109,9 @@ bool unknown = !std::any_of(lClients.constBegin(), lClients.constEnd(), [backend] (const Client *client) { return client->name() == backend; }); if (unknown) { - qCWarning(SONNET_LOG_CORE) << "Default client" << backend << "doesn't support language:" << plang; + if (!d->defaultPluginIgnored) { + qCWarning(SONNET_LOG_CORE) << "Default client" << backend << "doesn't support language:" << plang; + } backend = QString(); } } @@ -329,6 +333,28 @@ plugin.unload(); // don't leave it in memory return; } + const auto backend = d->settings->defaultClient(); + QList< QPair > forceUseMap = { + {"SONNET_USE_ASPELL", QStringLiteral("ASpell")} + , {"SONNET_USE_ENCHANT", QStringLiteral("Enchant")} + , {"SONNET_USE_HSPELL", QStringLiteral("HSpell")} + , {"SONNET_USE_HUNSPELL", QStringLiteral("Hunspell")} +#ifdef Q_OS_MACOS + , {"SONNET_USE_NSSPELLCHECKER", QStringLiteral("NSSpellChecker")} +#endif + }; + for (const auto &forceUse : forceUseMap) { + if (qEnvironmentVariableIsSet(forceUse.first)) { + if (client->name() != forceUse.second) { + qCWarning(SONNET_LOG_CORE) << "Ignoring" << client->name(); + if (client->name() == backend) { + d->defaultPluginIgnored = true; + } + plugin.unload(); + return; + } + } + } #else Client *client = nullptr; if (pluginPath == QLatin1String("Hunspell")) {