diff options
author | Alex Merry <alex.merry@kde.org> | 2015-11-08 19:23:22 +0000 |
---|---|---|
committer | Alex Merry <alex.merry@kde.org> | 2015-11-08 19:29:44 +0000 |
commit | 6745bd7e4796560959bb67e33b7c7f86f96a5a94 (patch) | |
tree | d2b8b878f05873ca9588d658bdf1fb3b7ba32df0 /modules | |
parent | c58a8eefb05d0749bb4cc26a6cd74dee34e1f4be (diff) | |
download | extra-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')
-rw-r--r-- | modules/ECMPoQmTools.cmake | 15 | ||||
-rw-r--r-- | modules/ECMQmLoader.cpp.in | 88 |
2 files changed, 28 insertions, 75 deletions
diff --git a/modules/ECMPoQmTools.cmake b/modules/ECMPoQmTools.cmake index 22258dc8..12bcf6b6 100644 --- a/modules/ECMPoQmTools.cmake +++ b/modules/ECMPoQmTools.cmake @@ -99,20 +99,9 @@ endfunction() function(ecm_create_qm_loader out_var catalog_name) - set(loader_cpp ${CMAKE_CURRENT_BINARY_DIR}/ECMQmLoader.cpp) - set(loader_moc ${CMAKE_CURRENT_BINARY_DIR}/ECMQmLoader.moc) - # catalog_name is used in ECMQmLoader.cpp.in - configure_file(${ECM_MODULE_DIR}/ECMQmLoader.cpp.in "${loader_cpp}" @ONLY) - set(${out_var} "${${out_var}}" "${loader_cpp}" "${loader_moc}" PARENT_SCOPE) - - # can't assume target has AUTOMOC turned on - if(NOT Qt5Core_FOUND) - find_package(Qt5Core) - endif() - if(Qt5Core_FOUND) - qt5_generate_moc("${loader_cpp}" "${loader_moc}") - endif() + configure_file(${ECM_MODULE_DIR}/ECMQmLoader.cpp.in ECMQmLoader.cpp @ONLY) + set(${out_var} ${${out_var}} ${CMAKE_CURRENT_BINARY_DIR}/ECMQmLoader.cpp PARENT_SCOPE) endfunction() 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) |