Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
qqmlenginecontrolservice.cpp
Go to the documentation of this file.
1
// Copyright (C) 2016 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
"qqmlenginecontrolservice.h"
6
#
include
<
private
/
qqmldebugconnector_p
.
h
>
7
#
include
<
private
/
qversionedpacket_p
.
h
>
8
#
include
<
QJSEngine
>
9
10
QT_BEGIN_NAMESPACE
11
12
using
QQmlDebugPacket = QVersionedPacket<QQmlDebugConnector>;
13
14
QQmlEngineControlServiceImpl::QQmlEngineControlServiceImpl(QObject *parent) :
15
QQmlEngineControlService(1, parent)
16
{
17
blockingMode = QQmlDebugConnector::instance()->blockingMode();
18
}
19
20
void
QQmlEngineControlServiceImpl::messageReceived(
const
QByteArray &message)
21
{
22
QMutexLocker lock(&dataMutex);
23
QQmlDebugPacket d(message);
24
qint32 command;
25
qint32 engineId;
26
d >> command >> engineId;
27
QJSEngine *engine = qobject_cast<QJSEngine *>(objectForId(engineId));
28
if
(command == StartWaitingEngine && startingEngines.contains(engine)) {
29
startingEngines.removeOne(engine);
30
emit attachedToEngine(engine);
31
}
else
if
(command == StopWaitingEngine && stoppingEngines.contains(engine)) {
32
stoppingEngines.removeOne(engine);
33
emit detachedFromEngine(engine);
34
}
35
}
36
37
void
QQmlEngineControlServiceImpl::engineAboutToBeAdded(QJSEngine *engine)
38
{
39
QMutexLocker lock(&dataMutex);
40
if
(blockingMode && state() == Enabled) {
41
Q_ASSERT(!stoppingEngines.contains(engine));
42
Q_ASSERT(!startingEngines.contains(engine));
43
startingEngines.append(engine);
44
sendMessage(EngineAboutToBeAdded, engine);
45
}
else
{
46
emit attachedToEngine(engine);
47
}
48
}
49
50
void
QQmlEngineControlServiceImpl::engineAboutToBeRemoved(QJSEngine *engine)
51
{
52
QMutexLocker lock(&dataMutex);
53
if
(blockingMode && state() == Enabled) {
54
Q_ASSERT(!stoppingEngines.contains(engine));
55
Q_ASSERT(!startingEngines.contains(engine));
56
stoppingEngines.append(engine);
57
sendMessage(EngineAboutToBeRemoved, engine);
58
}
else
{
59
emit detachedFromEngine(engine);
60
}
61
}
62
63
void
QQmlEngineControlServiceImpl::engineAdded(QJSEngine *engine)
64
{
65
if
(state() == Enabled) {
66
QMutexLocker lock(&dataMutex);
67
Q_ASSERT(!startingEngines.contains(engine));
68
Q_ASSERT(!stoppingEngines.contains(engine));
69
sendMessage(EngineAdded, engine);
70
}
71
}
72
73
void
QQmlEngineControlServiceImpl::engineRemoved(QJSEngine *engine)
74
{
75
if
(state() == Enabled) {
76
QMutexLocker lock(&dataMutex);
77
Q_ASSERT(!startingEngines.contains(engine));
78
Q_ASSERT(!stoppingEngines.contains(engine));
79
sendMessage(EngineRemoved, engine);
80
}
81
}
82
83
void
QQmlEngineControlServiceImpl::sendMessage(QQmlEngineControlServiceImpl::MessageType type,
84
QJSEngine *engine)
85
{
86
QQmlDebugPacket d;
87
d <<
static_cast
<qint32>(type) << idForObject(engine);
88
emit messageToClient(name(), d.data());
89
}
90
91
void
QQmlEngineControlServiceImpl::stateChanged(State)
92
{
93
// We flush everything for any kind of state change, to avoid complicated timing issues.
94
QMutexLocker lock(&dataMutex);
95
for
(QJSEngine *engine : std::as_const(startingEngines))
96
emit attachedToEngine(engine);
97
startingEngines.clear();
98
for
(QJSEngine *engine : std::as_const(stoppingEngines))
99
emit detachedFromEngine(engine);
100
stoppingEngines.clear();
101
}
102
103
QT_END_NAMESPACE
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
qtdeclarative
src
plugins
qmltooling
qmldbg_profiler
qqmlenginecontrolservice.cpp
Generated on
for Qt by
1.18.0