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
qqmlinspectorservice.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 <private/qqmldebugserviceinterfaces_p.h>
6#include <private/qqmldebugservicefactory_p.h>
7
10
11#include <QtGui/QWindow>
12
14
16{
18public:
20
21 void addWindow(QQuickWindow *window) override;
22 void setParentWindow(QQuickWindow *window, QWindow *parent) override;
23 void removeWindow(QQuickWindow *window) override;
24
27
28protected:
29 void messageReceived(const QByteArray &) override;
30
31private:
33
34 QmlJSDebugger::GlobalInspector *checkInspector();
35 QmlJSDebugger::GlobalInspector *m_globalInspector;
36 QHash<QQuickWindow *, QWindow *> m_waitingWindows;
37
38 void messageFromClient(const QByteArray &message);
39};
40
41QQmlInspectorServiceImpl::QQmlInspectorServiceImpl(QObject *parent):
42 QQmlInspectorService(1, parent), m_globalInspector(nullptr)
43{
44 connect(this, &QQmlInspectorServiceImpl::scheduleMessage,
45 this, &QQmlInspectorServiceImpl::messageFromClient, Qt::QueuedConnection);
46}
47
49{
50 if (state() == Enabled) {
51 if (!m_globalInspector) {
52 m_globalInspector = new QmlJSDebugger::GlobalInspector(this);
53 connect(m_globalInspector, &QmlJSDebugger::GlobalInspector::messageToClient,
54 this, &QQmlDebugService::messageToClient);
55 for (QHash<QQuickWindow *, QWindow *>::ConstIterator i = m_waitingWindows.constBegin();
56 i != m_waitingWindows.constEnd(); ++i) {
57 m_globalInspector->addWindow(i.key());
58 if (i.value() != 0)
59 m_globalInspector->setParentWindow(i.key(), i.value());
60 }
61 m_waitingWindows.clear();
62 }
63 } else if (m_globalInspector) {
64 delete m_globalInspector;
65 m_globalInspector = nullptr;
66 }
67 return m_globalInspector;
68}
69
70void QQmlInspectorServiceImpl::addWindow(QQuickWindow *window)
71{
72 if (QmlJSDebugger::GlobalInspector *inspector = checkInspector())
73 inspector->addWindow(window);
74 else
75 m_waitingWindows.insert(window, 0);
76}
77
78void QQmlInspectorServiceImpl::removeWindow(QQuickWindow *window)
79{
80 if (QmlJSDebugger::GlobalInspector *inspector = checkInspector())
81 inspector->removeWindow(window);
82 else
83 m_waitingWindows.remove(window);
84}
85
86void QQmlInspectorServiceImpl::setParentWindow(QQuickWindow *window, QWindow *parent)
87{
88 if (QmlJSDebugger::GlobalInspector *inspector = checkInspector())
89 inspector->setParentWindow(window, parent);
90 else
91 m_waitingWindows[window] = parent;
92}
93
94void QQmlInspectorServiceImpl::messageReceived(const QByteArray &message)
95{
96 // Move the message to the right thread via queued signal
97 emit scheduleMessage(message);
98}
99
100void QQmlInspectorServiceImpl::messageFromClient(const QByteArray &message)
101{
102 if (QmlJSDebugger::GlobalInspector *inspector = checkInspector())
103 inspector->processMessage(message);
104}
105
107{
108 Q_OBJECT
109 Q_PLUGIN_METADATA(IID QQmlDebugServiceFactory_iid FILE "qqmlinspectorservice.json")
110public:
112};
113
114QQmlDebugService *QQmlInspectorServiceFactory::create(const QString &key)
115{
116 return key == QQmlInspectorServiceImpl::s_key ? new QQmlInspectorServiceImpl(this) : nullptr;
117}
118
119QT_END_NAMESPACE
120
121#include "qqmlinspectorservice.moc"
void setParentWindow(QQuickWindow *window, QWindow *parent) override
void messageReceived(const QByteArray &) override
void removeWindow(QQuickWindow *window) override
void addWindow(QQuickWindow *window) override
void setParentWindow(QQuickWindow *window, QWindow *parentWindow)
void removeWindow(QQuickWindow *window)
void addWindow(QQuickWindow *window)
Combined button and popup list for selecting options.