diff --git a/src/core/loader.cpp b/src/core/loader.cpp --- a/src/core/loader.cpp +++ b/src/core/loader.cpp @@ -89,13 +89,18 @@ if (plang.isEmpty()) { plang = d->settings->defaultLanguage(); } - const QVector lClients = d->languageClients[plang]; - if (lClients.isEmpty()) { + // make sure plang is one of languages(), otherwise calling + // d->languageClients[plang] will create a default-constructed value + // for it and it doesn't have any dictionaries to begin with + if (!languages().contains(plang)) { qCWarning(SONNET_LOG_CORE) << "No language dictionaries for the language:" << plang; + emit loadingDictionaryFailed(plang); return nullptr; } + const QVector lClients = d->languageClients[plang]; + if (backend.isEmpty()) { backend = d->settings->defaultClient(); if (!backend.isEmpty()) { diff --git a/src/core/loader_p.h b/src/core/loader_p.h --- a/src/core/loader_p.h +++ b/src/core/loader_p.h @@ -127,6 +127,14 @@ */ void configurationChanged(); + /** + * Emitted when loading a dictionary fails, so that Ui parts can + * display an appropriate error message informing the user about + * the issue. + * @since 5.55 + */ + void loadingDictionaryFailed(const QString &lang) const; + protected: friend class Settings; void changed();