diff options
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) | 
