Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qqmlthread_stub.cpp
Go to the documentation of this file.
1// Copyright (C) 2024 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant
4
5#include "qqmlthread_p.h"
6
7#include <private/qfieldlist_p.h>
8#include <private/qtqmlglobal_p.h>
9
10#include <QtCore/qcoreapplication.h>
11#include <QtCore/qcoreevent.h>
12#include <QtCore/qthread.h>
13
14#if QT_CONFIG(qml_type_loader_thread)
15#error "The QQmlThread stub is for the case of !qml_type_loader_thread"
16#endif
17
19
20class QQmlThreadPrivate : public QObject
21{
22public:
24
25 QQmlThreadPrivate(QQmlThread *q) : q(q) { setObjectName(QStringLiteral("QQmlThread")); }
26
27 bool event(QEvent *e) override
28 {
29 if (e->type() == QEvent::User) {
30 m_processing = true;
31
32 while (!m_messages.isEmpty()) {
33 QQmlThread::Message *message = m_messages.takeFirst();
34 message->call(q);
35 delete message;
36 }
37
38 m_processing = false;
39 }
40 return QObject::event(e);
41 }
42
44 QQmlThread *q = nullptr;
45
46 bool m_processing = false; // Set when processing messages
47};
48
50QQmlThread::~QQmlThread() { delete d; }
51
52void QQmlThread::startup() {}
53void QQmlThread::shutdown() {}
54
55void QQmlThread::lock() {}
56void QQmlThread::unlock() {}
57void QQmlThread::wakeOne() {}
58void QQmlThread::wait() {}
59
60QThread *QQmlThread::thread() const
61{
62 return d->thread();
63}
64
66{
67 return d;
68}
69
70bool QQmlThread::isThisThread() const
71{
72 return d->thread()->isCurrentThread();
73}
74
75bool QQmlThread::isParentThread() const
76{
77 return d->thread()->isCurrentThread();
78}
79
80void QQmlThread::internalCallMethodInThread(Message *message)
81{
82 internalCallMethodInMain(message);
83}
84
85void QQmlThread::internalCallMethodInMain(Message *message)
86{
87 message->call(this);
88 delete message;
89}
90
91void QQmlThread::internalPostMethodToThread(Message *message)
92{
93 internalPostMethodToMain(message);
94}
95
96void QQmlThread::internalPostMethodToMain(Message *message)
97{
98 const bool wasEmpty = d->m_messages.isEmpty();
99 d->m_messages.append(message);
100 if (wasEmpty && !d->m_processing)
101 QCoreApplication::postEvent(d, new QEvent(QEvent::User));
102}
103
105
107{
108 while (!d->m_messages.isEmpty())
109 delete d->m_messages.takeFirst();
110}
111
112QT_END_NAMESPACE
QQmlThreadPrivate(QQmlThread *q)
QFieldList< QQmlThread::Message, &QQmlThread::Message::next > MessageList
bool event(QEvent *e) override
This virtual function receives events to an object and should return true if the event e was recogniz...
\inmodule QtQml
QThread * thread() const
bool isThisThread() const
void waitForNextMessage()
bool isParentThread() const
virtual ~QQmlThread()
QObject * threadObject() const
Combined button and popup list for selecting options.