summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKai Koehne <kai.koehne@nokia.com>2011-11-22 09:28:25 (GMT)
committerKai Koehne <kai.koehne@nokia.com>2011-11-22 09:28:25 (GMT)
commit787a9ce07accfcaddada8235ae204a5aa2025309 (patch)
tree7ff5a95274e0f75deb5b1750efd1ad4823462461
parentc0f782bc6c7eeebc5f6119c70248ac4be55dcc74 (diff)
parent6d221f4bd6a775a4af29997da3c1af23860b9643 (diff)
downloadQt-787a9ce07accfcaddada8235ae204a5aa2025309.zip
Qt-787a9ce07accfcaddada8235ae204a5aa2025309.tar.gz
Qt-787a9ce07accfcaddada8235ae204a5aa2025309.tar.bz2
Merge remote-tracking branch 'qt-qml-review/master' into master-qml-staging
-rw-r--r--src/declarative/debugger/qdeclarativedebugserver.cpp15
-rw-r--r--tools/qmlplugindump/main.cpp35
2 files changed, 38 insertions, 12 deletions
diff --git a/src/declarative/debugger/qdeclarativedebugserver.cpp b/src/declarative/debugger/qdeclarativedebugserver.cpp
index 3e0c326..05f63c7 100644
--- a/src/declarative/debugger/qdeclarativedebugserver.cpp
+++ b/src/declarative/debugger/qdeclarativedebugserver.cpp
@@ -96,7 +96,7 @@ public:
private:
// private slot
void _q_deliverMessage(const QString &serviceName, const QByteArray &message);
- static QDeclarativeDebugServerConnection *loadConnectionPlugin(const QString &pluginName);
+ static QDeclarativeDebugServerConnection *loadConnectionPlugin(QPluginLoader *loader, const QString &pluginName);
};
QDeclarativeDebugServerPrivate::QDeclarativeDebugServerPrivate() :
@@ -120,7 +120,7 @@ void QDeclarativeDebugServerPrivate::advertisePlugins()
}
QDeclarativeDebugServerConnection *QDeclarativeDebugServerPrivate::loadConnectionPlugin(
- const QString &pluginName)
+ QPluginLoader *loader, const QString &pluginName)
{
#ifndef QT_NO_LIBRARY
QStringList pluginCandidates;
@@ -137,17 +137,17 @@ QDeclarativeDebugServerConnection *QDeclarativeDebugServerPrivate::loadConnectio
}
foreach (const QString &pluginPath, pluginCandidates) {
- QPluginLoader loader(pluginPath);
- if (!loader.load()) {
+ loader->setFileName(pluginPath);
+ if (!loader->load()) {
continue;
}
QDeclarativeDebugServerConnection *connection = 0;
- if (QObject *instance = loader.instance())
+ if (QObject *instance = loader->instance())
connection = qobject_cast<QDeclarativeDebugServerConnection*>(instance);
if (connection)
return connection;
- loader.unload();
+ loader->unload();
}
#endif
return 0;
@@ -202,8 +202,9 @@ QDeclarativeDebugServer *QDeclarativeDebugServer::instance()
if (ok) {
server = new QDeclarativeDebugServer();
+ QPluginLoader *loader = new QPluginLoader(server);
QDeclarativeDebugServerConnection *connection
- = QDeclarativeDebugServerPrivate::loadConnectionPlugin(pluginName);
+ = QDeclarativeDebugServerPrivate::loadConnectionPlugin(loader, pluginName);
if (connection) {
server->d_func()->connection = connection;
diff --git a/tools/qmlplugindump/main.cpp b/tools/qmlplugindump/main.cpp
index 6bef8d4..4f523b9 100644
--- a/tools/qmlplugindump/main.cpp
+++ b/tools/qmlplugindump/main.cpp
@@ -147,6 +147,31 @@ QByteArray convertToId(const QByteArray &cppName)
return cppToId.value(cppName, cppName);
}
+QByteArray convertToId(const QMetaObject *mo)
+{
+ QByteArray className(mo->className());
+ if (!className.isEmpty())
+ return convertToId(className);
+
+ // likely a metaobject generated for an extended qml object
+ if (mo->superClass()) {
+ className = convertToId(mo->superClass());
+ className.append("_extended");
+ return className;
+ }
+
+ static QHash<const QMetaObject *, QByteArray> generatedNames;
+ className = generatedNames.value(mo);
+ if (!className.isEmpty())
+ return className;
+
+ qWarning() << "Found a QMetaObject without a className, generating a random name";
+ className = QByteArray("error-unknown-name-");
+ className.append(QByteArray::number(generatedNames.size()));
+ generatedNames.insert(mo, className);
+ return className;
+}
+
QSet<const QMetaObject *> collectReachableMetaObjects(const QList<QDeclarativeType *> &skip = QList<QDeclarativeType *>())
{
QSet<const QMetaObject *> metas;
@@ -241,7 +266,7 @@ public:
{
qml->writeStartObject("Component");
- QByteArray id = convertToId(meta->className());
+ QByteArray id = convertToId(meta);
qml->writeScriptBinding(QLatin1String("name"), enquote(id));
for (int index = meta->classInfoCount() - 1 ; index >= 0 ; --index) {
@@ -253,7 +278,7 @@ public:
}
if (meta->superClass())
- qml->writeScriptBinding(QLatin1String("prototype"), enquote(convertToId(meta->superClass()->className())));
+ qml->writeScriptBinding(QLatin1String("prototype"), enquote(convertToId(meta->superClass())));
QSet<const QDeclarativeType *> qmlTypes = qmlTypesByCppName.value(meta->className());
if (!qmlTypes.isEmpty()) {
@@ -284,7 +309,7 @@ public:
if (const QMetaObject *attachedType = (*qmlTypes.begin())->attachedPropertiesType()) {
qml->writeScriptBinding(QLatin1String("attachedType"), enquote(
- convertToId(attachedType->className())));
+ convertToId(attachedType)));
}
}
@@ -624,7 +649,7 @@ int main(int argc, char *argv[])
// put the metaobjects into a map so they are always dumped in the same order
QMap<QString, const QMetaObject *> nameToMeta;
foreach (const QMetaObject *meta, metas)
- nameToMeta.insert(convertToId(meta->className()), meta);
+ nameToMeta.insert(convertToId(meta), meta);
Dumper dumper(&qml);
if (relocatable)
@@ -641,7 +666,7 @@ int main(int argc, char *argv[])
qml.writeEndObject();
qml.writeEndDocument();
- std::cout << bytes.constData();
+ std::cout << bytes.constData() << std::flush;
// workaround to avoid crashes on exit
QTimer timer;