diff options
author | Rohan McGovern <rohan.mcgovern@nokia.com> | 2012-02-29 09:18:59 +1000 |
---|---|---|
committer | Rohan McGovern <rohan.mcgovern@nokia.com> | 2012-02-29 09:23:14 +1000 |
commit | 98dd1781d9256f68025d2a2db408f4f5947f3214 (patch) | |
tree | dbe1424abd90014edb5546c920ca585ed62b46e3 /src/corelib/kernel/qeventloop.cpp | |
parent | 6c1bdc1854a7700c2b3a345b95f6a2fdca84037d (diff) | |
parent | fa1b9070af66edb81b2a3735c1951f78b22bd666 (diff) |
Merge master -> api_changes
Includes fixes for tst_qfiledialog2, tst_qtextedit autotests on mac.
Change-Id: I49cac26894d31291a8339ccc1eb80b6a940f0827
Diffstat (limited to 'src/corelib/kernel/qeventloop.cpp')
-rw-r--r-- | src/corelib/kernel/qeventloop.cpp | 41 |
1 files changed, 35 insertions, 6 deletions
diff --git a/src/corelib/kernel/qeventloop.cpp b/src/corelib/kernel/qeventloop.cpp index 8b0ec85679..dfdd178c35 100644 --- a/src/corelib/kernel/qeventloop.cpp +++ b/src/corelib/kernel/qeventloop.cpp @@ -322,28 +322,51 @@ class QEventLoopLockerPrivate { public: explicit QEventLoopLockerPrivate(QEventLoopPrivate *loop) - : loop(loop), app(0) + : loop(loop), type(EventLoop) { loop->ref(); } + explicit QEventLoopLockerPrivate(QThreadPrivate *thread) + : thread(thread), type(Thread) + { + thread->ref(); + } + explicit QEventLoopLockerPrivate(QCoreApplicationPrivate *app) - : loop(0), app(app) + : app(app), type(Application) { app->ref(); } ~QEventLoopLockerPrivate() { - if (loop) + switch (type) + { + case EventLoop: loop->deref(); - else + break; + case Thread: + thread->deref(); + break; + default: app->deref(); + break; + } } private: - QEventLoopPrivate *loop; - QCoreApplicationPrivate *app; + union { + QEventLoopPrivate * loop; + QThreadPrivate * thread; + QCoreApplicationPrivate * app; + }; + enum Type { + EventLoop, + Thread, + Application + }; + const Type type; }; /*! @@ -390,6 +413,12 @@ QEventLoopLocker::QEventLoopLocker(QEventLoop *loop) } +QEventLoopLocker::QEventLoopLocker(QThread *thread) + : d_ptr(new QEventLoopLockerPrivate(static_cast<QThreadPrivate*>(QObjectPrivate::get(thread)))) +{ + +} + /*! Destroys this event loop locker object */ |