diff options
author | Alex Merry <alex.merry@kde.org> | 2015-10-14 12:18:40 +0100 |
---|---|---|
committer | Alex Merry <alex.merry@kde.org> | 2015-11-03 10:22:34 +0000 |
commit | 009c480413910e8c1a18f4d1420f4a517ea606e6 (patch) | |
tree | c8a41523992eac3cadcfe18c11b956d84b397c5b /tests/ECMPoQmToolsTest/tr_thread_test.cpp | |
parent | fb7b8eea7d91772f989d5b060c86df20f2ebdb66 (diff) | |
download | extra-cmake-modules-009c480413910e8c1a18f4d1420f4a517ea606e6.tar.gz extra-cmake-modules-009c480413910e8c1a18f4d1420f4a517ea606e6.tar.bz2 |
Make sure we load translations on the main thread.
BUG: 346188
REVIEW: 123726
Diffstat (limited to 'tests/ECMPoQmToolsTest/tr_thread_test.cpp')
-rw-r--r-- | tests/ECMPoQmToolsTest/tr_thread_test.cpp | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/tests/ECMPoQmToolsTest/tr_thread_test.cpp b/tests/ECMPoQmToolsTest/tr_thread_test.cpp new file mode 100644 index 00000000..3ed30ee1 --- /dev/null +++ b/tests/ECMPoQmToolsTest/tr_thread_test.cpp @@ -0,0 +1,68 @@ +#include <QCoreApplication> +#include <QLibrary> +#include <QMetaObject> +#include <QThread> + +class Thread : public QThread +{ + Q_OBJECT + + QLibrary *m_lib; + +public: + Thread() + : m_lib(0) + {} + ~Thread() + { + delete m_lib; + } + +Q_SIGNALS: + void libraryLoaded(); + +public Q_SLOTS: + void printStrings() + { + // NB: this will run on the *main* event loop. + QFunctionPointer print_strings = m_lib->resolve("print_strings"); + if (print_strings) { + print_strings(); + } else { + qFatal("Could not resolve print_strings: %s", m_lib->errorString().toUtf8().data()); + } + + QCoreApplication::instance()->quit(); + } +protected: + void run() + { + m_lib = new QLibrary(MODULE_PATH); + + if (!m_lib->load()) { + qFatal("Could not load module: %s", m_lib->errorString().toUtf8().data()); + } + + // Queue a call to printStrings() on the main event loop (giving the + // translations a chance to be loaded). + QMetaObject::invokeMethod(this, "printStrings", Qt::QueuedConnection); + } +}; + +int main(int argc, char** argv) +{ + QCoreApplication app(argc, argv); + + Thread thread; + + // Start the thread *after* QCoreApplication is started (otherwise the + // plugin's startup function won't be run on the Thread, and we won't test + // what we wanted to test). + QMetaObject::invokeMethod(&thread, "start", Qt::QueuedConnection); + + app.exec(); + + return 0; +} + +#include "tr_thread_test.moc" |