diff options
author | Ulf Hermann <ulf.hermann@theqtcompany.com> | 2015-07-21 16:11:16 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@theqtcompany.com> | 2015-08-04 13:35:25 +0000 |
commit | 5652c4163f94aaf4bd9cef994be2ae8e7f4096c5 (patch) | |
tree | a42e882963b3e7b328dfd23da275c4e825bfb544 | |
parent | f8e5cfcfc26499eef30fc222e24957a753651cbc (diff) |
Move debugger-specific services into a common plugin
Change-Id: Icd4e6a6c57bc3ac65cb43d2329d236012b988678
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
16 files changed, 175 insertions, 73 deletions
diff --git a/src/qml/debugger/qdebugmessageservice.cpp b/src/plugins/qmltooling/qmldbg_debugger/qdebugmessageservice.cpp index 6b0f184951..6bccec08b1 100644 --- a/src/qml/debugger/qdebugmessageservice.cpp +++ b/src/plugins/qmltooling/qmldbg_debugger/qdebugmessageservice.cpp @@ -31,15 +31,13 @@ ** ****************************************************************************/ -#include "qdebugmessageservice_p.h" +#include "qdebugmessageservice.h" #include <private/qqmldebugconnector_p.h> #include <QDataStream> QT_BEGIN_NAMESPACE -Q_GLOBAL_STATIC(QDebugMessageService, qmlDebugMessageService) - const QString QDebugMessageService::s_key = QStringLiteral("DebugMessages"); void DebugMessageHandler(QtMsgType type, const QMessageLogContext &ctxt, @@ -60,11 +58,6 @@ QDebugMessageService::QDebugMessageService(QObject *parent) : } } -QDebugMessageService *QDebugMessageService::instance() -{ - return qmlDebugMessageService(); -} - void QDebugMessageService::sendDebugMessage(QtMsgType type, const QMessageLogContext &ctxt, const QString &buf) diff --git a/src/qml/debugger/qdebugmessageservice_p.h b/src/plugins/qmltooling/qmldbg_debugger/qdebugmessageservice.h index 3d0d8a79a5..c0dc41bcd0 100644 --- a/src/qml/debugger/qdebugmessageservice_p.h +++ b/src/plugins/qmltooling/qmldbg_debugger/qdebugmessageservice.h @@ -31,8 +31,8 @@ ** ****************************************************************************/ -#ifndef QDEBUGMESSAGESERVICE_P_H -#define QDEBUGMESSAGESERVICE_P_H +#ifndef QDEBUGMESSAGESERVICE_H +#define QDEBUGMESSAGESERVICE_H // // W A R N I N G @@ -45,7 +45,7 @@ // We mean it. // -#include "qqmldebugservice_p.h" +#include <private/qqmldebugservice_p.h> #include <QtCore/qlogging.h> #include <QtCore/qmutex.h> @@ -60,8 +60,6 @@ class QDebugMessageService : public QQmlDebugService public: QDebugMessageService(QObject *parent = 0); - static QDebugMessageService *instance(); - void sendDebugMessage(QtMsgType type, const QMessageLogContext &ctxt, const QString &buf); @@ -72,6 +70,7 @@ protected: private: friend class QQmlDebugConnector; + friend class QQmlDebuggerServiceFactory; QtMessageHandler oldMsgHandler; QQmlDebugService::State prevState; @@ -80,4 +79,4 @@ private: QT_END_NAMESPACE -#endif // QDEBUGMESSAGESERVICE_P_H +#endif // QDEBUGMESSAGESERVICE_H diff --git a/src/plugins/qmltooling/qmldbg_debugger/qmldbg_debugger.pro b/src/plugins/qmltooling/qmldbg_debugger/qmldbg_debugger.pro new file mode 100644 index 0000000000..951b212d17 --- /dev/null +++ b/src/plugins/qmltooling/qmldbg_debugger/qmldbg_debugger.pro @@ -0,0 +1,27 @@ +TARGET = qmldbg_debugger +QT = qml-private core-private + +PLUGIN_TYPE = qmltooling +PLUGIN_CLASS_NAME = QQmlDebuggerServiceFactory +load(qt_plugin) + +SOURCES += \ + $$PWD/qdebugmessageservice.cpp \ + $$PWD/qqmldebuggerservicefactory.cpp \ + $$PWD/qqmlenginedebugservice.cpp \ + $$PWD/qqmlwatcher.cpp \ + $$PWD/qv4debugservice.cpp + +HEADERS += \ + $$PWD/qdebugmessageservice.h \ + $$PWD/qqmldebuggerservicefactory.h \ + $$PWD/qqmlenginedebugservice.h \ + $$PWD/qqmlwatcher.h \ + $$PWD/qv4debugservice.h + +INCLUDEPATH += $$PWD \ + $$PWD/../shared + +OTHER_FILES += \ + $$PWD/qqmldebuggerservice.json + diff --git a/src/plugins/qmltooling/qmldbg_debugger/qqmldebuggerservice.json b/src/plugins/qmltooling/qmldbg_debugger/qqmldebuggerservice.json new file mode 100644 index 0000000000..b1e90364d5 --- /dev/null +++ b/src/plugins/qmltooling/qmldbg_debugger/qqmldebuggerservice.json @@ -0,0 +1,3 @@ +{ + "Keys": [ "DebugMessages", "QmlDebugger", "V8Debugger" ] +} diff --git a/src/plugins/qmltooling/qmldbg_debugger/qqmldebuggerservicefactory.cpp b/src/plugins/qmltooling/qmldbg_debugger/qqmldebuggerservicefactory.cpp new file mode 100644 index 0000000000..7ba2aeecb0 --- /dev/null +++ b/src/plugins/qmltooling/qmldbg_debugger/qqmldebuggerservicefactory.cpp @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtQml module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qqmldebuggerservicefactory.h" +#include "qqmlenginedebugservice.h" +#include "qdebugmessageservice.h" +#include "qv4debugservice.h" +#include <private/qqmldebugserviceinterfaces_p.h> + +QT_BEGIN_NAMESPACE + +QQmlDebugService *QQmlDebuggerServiceFactory::create(const QString &key) +{ + if (key == QDebugMessageService::s_key) + return new QDebugMessageService(this); + + if (key == QQmlEngineDebugServiceImpl::s_key) + return new QQmlEngineDebugServiceImpl(this); + + if (key == QV4DebugServiceImpl::s_key) + return new QV4DebugServiceImpl(this); + + return 0; +} + +QT_END_NAMESPACE diff --git a/src/plugins/qmltooling/qmldbg_debugger/qqmldebuggerservicefactory.h b/src/plugins/qmltooling/qmldbg_debugger/qqmldebuggerservicefactory.h new file mode 100644 index 0000000000..2c7509ba12 --- /dev/null +++ b/src/plugins/qmltooling/qmldbg_debugger/qqmldebuggerservicefactory.h @@ -0,0 +1,51 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtQml module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQMLDEBUGGERSERVICEFACTORY_H +#define QQMLDEBUGGERSERVICEFACTORY_H + +#include <private/qqmldebugservicefactory_p.h> + +QT_BEGIN_NAMESPACE + +class QQmlDebuggerServiceFactory : public QQmlDebugServiceFactory +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID QQmlDebugServiceFactory_iid FILE "qqmldebuggerservice.json") +public: + QQmlDebugService *create(const QString &key); +}; + +QT_END_NAMESPACE + +#endif // QQMLDEBUGGERSERVICEFACTORY_H diff --git a/src/qml/debugger/qqmlenginedebugservice.cpp b/src/plugins/qmltooling/qmldbg_debugger/qqmlenginedebugservice.cpp index 30d2f32e2c..8f53dc6d50 100644 --- a/src/qml/debugger/qqmlenginedebugservice.cpp +++ b/src/plugins/qmltooling/qmldbg_debugger/qqmlenginedebugservice.cpp @@ -31,9 +31,10 @@ ** ****************************************************************************/ -#include "qqmlenginedebugservice_p.h" +#include "qqmlenginedebugservice.h" +#include "qqmlwatcher.h" -#include "qqmldebugstatesdelegate_p.h" +#include <private/qqmldebugstatesdelegate_p.h> #include <private/qqmlboundsignal_p.h> #include <qqmlengine.h> #include <private/qqmlmetatype_p.h> @@ -41,7 +42,6 @@ #include <private/qqmlproperty_p.h> #include <private/qqmlbinding_p.h> #include <private/qqmlcontext_p.h> -#include <private/qqmlwatcher_p.h> #include <private/qqmlvaluetype_p.h> #include <private/qqmlvmemetaobject_p.h> #include <private/qqmlexpression_p.h> @@ -53,13 +53,6 @@ QT_BEGIN_NAMESPACE -Q_GLOBAL_STATIC(QQmlEngineDebugServiceImpl, qmlEngineDebugService) - -QQmlEngineDebugServiceImpl *QQmlEngineDebugServiceImpl::instance() -{ - return qmlEngineDebugService(); -} - QQmlEngineDebugServiceImpl::QQmlEngineDebugServiceImpl(QObject *parent) : QQmlEngineDebugService(2, parent), m_watch(new QQmlWatcher(this)), m_statesDelegate(0) { diff --git a/src/qml/debugger/qqmlenginedebugservice_p.h b/src/plugins/qmltooling/qmldbg_debugger/qqmlenginedebugservice.h index 99a98e1f12..19a4827f89 100644 --- a/src/qml/debugger/qqmlenginedebugservice_p.h +++ b/src/plugins/qmltooling/qmldbg_debugger/qqmlenginedebugservice.h @@ -31,8 +31,8 @@ ** ****************************************************************************/ -#ifndef QQMLENGINEDEBUGSERVICE_P_H -#define QQMLENGINEDEBUGSERVICE_P_H +#ifndef QQMLENGINEDEBUGSERVICE_H +#define QQMLENGINEDEBUGSERVICE_H // // W A R N I N G @@ -60,7 +60,7 @@ class QQmlWatcher; class QDataStream; class QQmlDebugStatesDelegate; -class Q_QML_PRIVATE_EXPORT QQmlEngineDebugServiceImpl : public QQmlEngineDebugService +class QQmlEngineDebugServiceImpl : public QQmlEngineDebugService { Q_OBJECT public: @@ -95,8 +95,6 @@ public: void setStatesDelegate(QQmlDebugStatesDelegate *); - static QQmlEngineDebugServiceImpl *instance(); - protected: virtual void messageReceived(const QByteArray &); @@ -105,6 +103,8 @@ private Q_SLOTS: void propertyChanged(int id, int objectId, const QMetaProperty &property, const QVariant &value); private: + friend class QQmlDebuggerServiceFactory; + void prepareDeferredObjects(QObject *); void buildObjectList(QDataStream &, QQmlContext *, const QList<QPointer<QObject> > &instances); @@ -124,12 +124,12 @@ private: QQmlWatcher *m_watch; QQmlDebugStatesDelegate *m_statesDelegate; }; -Q_QML_PRIVATE_EXPORT QDataStream &operator<<(QDataStream &, const QQmlEngineDebugServiceImpl::QQmlObjectData &); -Q_QML_PRIVATE_EXPORT QDataStream &operator>>(QDataStream &, QQmlEngineDebugServiceImpl::QQmlObjectData &); -Q_QML_PRIVATE_EXPORT QDataStream &operator<<(QDataStream &, const QQmlEngineDebugServiceImpl::QQmlObjectProperty &); -Q_QML_PRIVATE_EXPORT QDataStream &operator>>(QDataStream &, QQmlEngineDebugServiceImpl::QQmlObjectProperty &); +QDataStream &operator<<(QDataStream &, const QQmlEngineDebugServiceImpl::QQmlObjectData &); +QDataStream &operator>>(QDataStream &, QQmlEngineDebugServiceImpl::QQmlObjectData &); +QDataStream &operator<<(QDataStream &, const QQmlEngineDebugServiceImpl::QQmlObjectProperty &); +QDataStream &operator>>(QDataStream &, QQmlEngineDebugServiceImpl::QQmlObjectProperty &); QT_END_NAMESPACE -#endif // QQMLENGINEDEBUGSERVICE_P_H +#endif // QQMLENGINEDEBUGSERVICE_H diff --git a/src/qml/qml/qqmlwatcher.cpp b/src/plugins/qmltooling/qmldbg_debugger/qqmlwatcher.cpp index 9726b6f3b9..9f9a6eb33b 100644 --- a/src/qml/qml/qqmlwatcher.cpp +++ b/src/plugins/qmltooling/qmldbg_debugger/qqmlwatcher.cpp @@ -31,15 +31,15 @@ ** ****************************************************************************/ -#include "qqmlwatcher_p.h" +#include "qqmlwatcher.h" #include "qqmlexpression.h" #include "qqmlcontext.h" #include "qqml.h" #include <private/qqmldebugservice_p.h> -#include "qqmlproperty_p.h" -#include "qqmlvaluetype_p.h" +#include <private/qqmlproperty_p.h> +#include <private/qqmlvaluetype_p.h> #include <QtCore/qmetaobject.h> #include <QtCore/qdebug.h> diff --git a/src/qml/qml/qqmlwatcher_p.h b/src/plugins/qmltooling/qmldbg_debugger/qqmlwatcher.h index a7bb3c3418..329aee77d2 100644 --- a/src/qml/qml/qqmlwatcher_p.h +++ b/src/plugins/qmltooling/qmldbg_debugger/qqmlwatcher.h @@ -31,8 +31,8 @@ ** ****************************************************************************/ -#ifndef QQMLWATCHER_P_H -#define QQMLWATCHER_P_H +#ifndef QQMLWATCHER_H +#define QQMLWATCHER_H // // W A R N I N G @@ -83,4 +83,4 @@ private: QT_END_NAMESPACE -#endif // QQMLWATCHER_P_H +#endif // QQMLWATCHER_H diff --git a/src/qml/debugger/qv4debugservice.cpp b/src/plugins/qmltooling/qmldbg_debugger/qv4debugservice.cpp index 94755bd35e..0aaa6e7e92 100644 --- a/src/qml/debugger/qv4debugservice.cpp +++ b/src/plugins/qmltooling/qmldbg_debugger/qv4debugservice.cpp @@ -31,11 +31,11 @@ ** ****************************************************************************/ -#include "qv4debugservice_p.h" +#include "qv4debugservice.h" #include "qqmlengine.h" -#include "qv4engine_p.h" -#include "qv4function_p.h" -#include "qqmldebugconnector_p.h" +#include <private/qv4engine_p.h> +#include <private/qv4function_p.h> +#include <private/qqmldebugconnector_p.h> #include <private/qv8engine_p.h> @@ -58,8 +58,6 @@ const char *const V4_PAUSE = "interrupt"; QT_BEGIN_NAMESPACE -Q_GLOBAL_STATIC(QV4DebugServiceImpl, v4ServiceInstance) - class V8CommandHandler; class UnknownV8CommandHandler; @@ -855,11 +853,6 @@ QV4DebugServiceImpl::~QV4DebugServiceImpl() qDeleteAll(handlers); } -QV4DebugServiceImpl *QV4DebugServiceImpl::instance() -{ - return v4ServiceInstance(); -} - void QV4DebugServiceImpl::engineAboutToBeAdded(QQmlEngine *engine) { QMutexLocker lock(&m_configMutex); @@ -872,7 +865,6 @@ void QV4DebugServiceImpl::engineAboutToBeAdded(QQmlEngine *engine) debuggerMap.insert(debuggerIndex++, debugger); debuggerAgent.addDebugger(debugger); debuggerAgent.moveToThread(server->thread()); - moveToThread(server->thread()); } } } diff --git a/src/qml/debugger/qv4debugservice_p.h b/src/plugins/qmltooling/qmldbg_debugger/qv4debugservice.h index fee0e0ac89..b009a0fead 100644 --- a/src/qml/debugger/qv4debugservice_p.h +++ b/src/plugins/qmltooling/qmldbg_debugger/qv4debugservice.h @@ -31,8 +31,8 @@ ** ****************************************************************************/ -#ifndef QV4DEBUGSERVICE_P_H -#define QV4DEBUGSERVICE_P_H +#ifndef QV4DEBUGSERVICE_H +#define QV4DEBUGSERVICE_H // // W A R N I N G @@ -45,8 +45,8 @@ // We mean it. // -#include "qqmlconfigurabledebugservice_p.h" -#include "qqmldebugserviceinterfaces_p.h" +#include <private/qqmlconfigurabledebugservice_p.h> +#include <private/qqmldebugserviceinterfaces_p.h> #include <private/qv4debugging_p.h> #include <QtCore/QJsonValue> @@ -86,7 +86,6 @@ public: explicit QV4DebugServiceImpl(QObject *parent = 0); ~QV4DebugServiceImpl(); - static QV4DebugServiceImpl *instance(); void engineAboutToBeAdded(QQmlEngine *engine); void engineAboutToBeRemoved(QQmlEngine *engine); @@ -112,6 +111,8 @@ protected: void sendSomethingToSomebody(const char *type, int magicNumber = 1); private: + friend class QQmlDebuggerServiceFactory; + void handleV8Request(const QByteArray &payload); static QByteArray packMessage(const QByteArray &command, const QByteArray &message = QByteArray()); @@ -135,4 +136,4 @@ private: QT_END_NAMESPACE -#endif // QV4DEBUGSERVICE_P_H +#endif // QV4DEBUGSERVICE_H diff --git a/src/plugins/qmltooling/qmltooling.pro b/src/plugins/qmltooling/qmltooling.pro index cfcf631f1a..ae13826a4c 100644 --- a/src/plugins/qmltooling/qmltooling.pro +++ b/src/plugins/qmltooling/qmltooling.pro @@ -1,6 +1,7 @@ TEMPLATE = subdirs SUBDIRS += \ + qmldbg_debugger \ qmldbg_local \ qmldbg_profiler \ qmldbg_server \ diff --git a/src/qml/debugger/debugger.pri b/src/qml/debugger/debugger.pri index 9734e07a1d..728394916c 100644 --- a/src/qml/debugger/debugger.pri +++ b/src/qml/debugger/debugger.pri @@ -5,9 +5,6 @@ SOURCES += \ $$PWD/qqmldebugconnector.cpp \ $$PWD/qqmldebugservice.cpp \ $$PWD/qqmldebugserviceinterfaces.cpp \ - $$PWD/qqmlenginedebugservice.cpp \ - $$PWD/qdebugmessageservice.cpp \ - $$PWD/qv4debugservice.cpp \ $$PWD/qqmlabstractprofileradapter.cpp \ $$PWD/qqmlprofiler.cpp @@ -18,10 +15,7 @@ HEADERS += \ $$PWD/qqmldebugservicefactory_p.h \ $$PWD/qqmldebugserviceinterfaces_p.h \ $$PWD/qqmldebugstatesdelegate_p.h \ - $$PWD/qqmlenginedebugservice_p.h \ $$PWD/qqmldebug.h \ - $$PWD/qdebugmessageservice_p.h \ - $$PWD/qv4debugservice_p.h \ $$PWD/qqmlconfigurabledebugservice_p.h \ $$PWD/qqmlprofilerdefinitions_p.h \ $$PWD/qqmlabstractprofileradapter_p.h \ diff --git a/src/qml/debugger/qqmldebugconnector.cpp b/src/qml/debugger/qqmldebugconnector.cpp index 9565f19563..393185bf0d 100644 --- a/src/qml/debugger/qqmldebugconnector.cpp +++ b/src/qml/debugger/qqmldebugconnector.cpp @@ -33,9 +33,6 @@ #include "qqmldebugpluginmanager_p.h" #include "qqmldebugconnector_p.h" -#include "qdebugmessageservice_p.h" -#include "qqmlenginedebugservice_p.h" -#include "qv4debugservice_p.h" #include "qqmldebugservicefactory_p.h" #include <QtCore/QPluginLoader> #include <QtCore/QCoreApplication> @@ -55,6 +52,7 @@ Q_QML_IMPORT_DEBUG_PLUGIN(QQmlDebugServerFactory) Q_QML_DEBUG_PLUGIN_LOADER(QQmlDebugService) Q_QML_IMPORT_DEBUG_PLUGIN(QQmlInspectorServiceFactory) Q_QML_IMPORT_DEBUG_PLUGIN(QQmlProfilerServiceFactory) +Q_QML_IMPORT_DEBUG_PLUGIN(QQmlDebuggerServiceFactory) struct QQmlDebugConnectorParams { QString pluginKey; @@ -118,10 +116,6 @@ QQmlDebugConnector *QQmlDebugConnector::instance() } params->instance = loadQQmlDebugConnector(QLatin1String("QQmlDebugServer")); if (params->instance) { - QQmlEngineDebugServiceImpl::instance(); - QV4DebugServiceImpl::instance(); - QDebugMessageService::instance(); - foreach (const QJsonObject &object, metaDataForQQmlDebugService()) { foreach (const QJsonValue &key, object.value(QLatin1String("MetaData")).toObject() .value(QLatin1String("Keys")).toArray()) { diff --git a/src/qml/qml/qml.pri b/src/qml/qml/qml.pri index 10ae9f0e52..4d84cc82ae 100644 --- a/src/qml/qml/qml.pri +++ b/src/qml/qml/qml.pri @@ -23,7 +23,6 @@ SOURCES += \ $$PWD/qqmlvaluetype.cpp \ $$PWD/qqmlaccessors.cpp \ $$PWD/qqmlxmlhttprequest.cpp \ - $$PWD/qqmlwatcher.cpp \ $$PWD/qqmlcleanup.cpp \ $$PWD/qqmlpropertycache.cpp \ $$PWD/qqmlnotifier.cpp \ @@ -91,7 +90,6 @@ HEADERS += \ $$PWD/qqmlvaluetype_p.h \ $$PWD/qqmlaccessors_p.h \ $$PWD/qqmlxmlhttprequest_p.h \ - $$PWD/qqmlwatcher_p.h \ $$PWD/qqmlcleanup_p.h \ $$PWD/qqmlpropertycache_p.h \ $$PWD/qqmlnotifier_p.h \ |