aboutsummaryrefslogtreecommitdiff
path: root/modules/ECMQmLoader.cpp.in
diff options
context:
space:
mode:
authorAlex Merry <alex.merry@kde.org>2015-11-08 19:23:22 +0000
committerAlex Merry <alex.merry@kde.org>2015-11-08 19:29:44 +0000
commit6745bd7e4796560959bb67e33b7c7f86f96a5a94 (patch)
treed2b8b878f05873ca9588d658bdf1fb3b7ba32df0 /modules/ECMQmLoader.cpp.in
parentc58a8eefb05d0749bb4cc26a6cd74dee34e1f4be (diff)
downloadextra-cmake-modules-6745bd7e4796560959bb67e33b7c7f86f96a5a94.tar.gz
extra-cmake-modules-6745bd7e4796560959bb67e33b7c7f86f96a5a94.tar.bz2
Revert "Make sure we load translations on the main thread."
This broke the build for projects which used ecm_create_qm_loader in unusual ways. A better approach is coming, but won't be in e-c-m 5.16. This reverts commit 009c480413910e8c1a18f4d1420f4a517ea606e6. CCBUG: 346188 CCMAIL: release-team@kde.org CCMAIL: kde-buildsystem@kde.org
Diffstat (limited to 'modules/ECMQmLoader.cpp.in')
-rw-r--r--modules/ECMQmLoader.cpp.in88
1 files changed, 26 insertions, 62 deletions
diff --git a/modules/ECMQmLoader.cpp.in b/modules/ECMQmLoader.cpp.in
index fc667ba2..423d1c93 100644
--- a/modules/ECMQmLoader.cpp.in
+++ b/modules/ECMQmLoader.cpp.in
@@ -32,77 +32,41 @@
*/
#include <QCoreApplication>
#include <QLocale>
-#include <QMetaObject>
#include <QStandardPaths>
-#include <QThread>
#include <QTranslator>
-namespace {
+#include <QDebug>
- bool loadTranslation(const QString &localeDirName)
- {
- QString subPath = QStringLiteral("locale/") + localeDirName + QStringLiteral("/LC_MESSAGES/@catalog_name@.qm");
- QString fullPath = QStandardPaths::locate(QStandardPaths::GenericDataLocation, subPath);
- if (fullPath.isEmpty()) {
- return false;
- }
- QTranslator *translator = new QTranslator(QCoreApplication::instance());
- if (!translator->load(fullPath)) {
- delete translator;
- return false;
- }
- QCoreApplication::instance()->installTranslator(translator);
- return true;
+static bool loadTranslation(const QString &localeDirName)
+{
+ QString subPath = QStringLiteral("locale/") + localeDirName + QStringLiteral("/LC_MESSAGES/@catalog_name@.qm");
+ QString fullPath = QStandardPaths::locate(QStandardPaths::GenericDataLocation, subPath);
+ if (fullPath.isEmpty()) {
+ return false;
}
-
- void load()
- {
- // The way Qt translation system handles plural forms makes it necessary to
- // have a translation file which contains only plural forms for `en`. That's
- // why we load the `en` translation unconditionally, then load the
- // translation for the current locale to overload it.
- loadTranslation(QStringLiteral("en"));
-
- QLocale locale = QLocale::system();
- if (locale.name() != QStringLiteral("en")) {
- if (!loadTranslation(locale.name())) {
- loadTranslation(locale.bcp47Name());
- }
- }
+ QTranslator *translator = new QTranslator(QCoreApplication::instance());
+ if (!translator->load(fullPath)) {
+ delete translator;
+ return false;
}
+ QCoreApplication::instance()->installTranslator(translator);
+ return true;
+}
- // helper to call load() on the correct thread
- class Loader : public QObject
- {
- Q_OBJECT
-
- public Q_SLOTS:
- void callLoadAndDeleteSelf()
- {
- load();
- this->deleteLater();
- }
- };
+static void load()
+{
+ // The way Qt translation system handles plural forms makes it necessary to
+ // have a translation file which contains only plural forms for `en`. That's
+ // why we load the `en` translation unconditionally, then load the
+ // translation for the current locale to overload it.
+ loadTranslation(QStringLiteral("en"));
- void loadOnMainThread()
- {
- // If this library is loaded after the QCoreApplication instance is created
- // (eg: because it is brought in by a plugin), there is no guarantee this
- // function will be called on the main thread.
- // QCoreApplication::installTranslator needs to be called on the main
- // thread, because it uses QCoreApplication::sendEvent.
- if (QThread::currentThread() == QCoreApplication::instance()->thread()) {
- load();
- } else {
- // QObjects inherit their parent object's thread
- Loader *loader = new Loader();
- loader->moveToThread(QCoreApplication::instance()->thread());
- QMetaObject::invokeMethod(loader, "callLoadAndDeleteSelf", Qt::AutoConnection);
+ QLocale locale = QLocale::system();
+ if (locale.name() != QStringLiteral("en")) {
+ if (!loadTranslation(locale.name())) {
+ loadTranslation(locale.bcp47Name());
}
}
-
}
-Q_COREAPP_STARTUP_FUNCTION(loadOnMainThread)
-
-#include "ECMQmLoader.moc"
+Q_COREAPP_STARTUP_FUNCTION(load)