Commit d64e17ad authored by Eike Ziller's avatar Eike Ziller

Move mimetype definitions to plugin specs

- Avoids the hassle of QRC files and manually registering mime types
- Avoids performance regressions because of mime types that are
  registered after mime database has been used
- Makes it technically possible to detect that a disabled plugin could
  handle a mime type if it was enabled

Change-Id: I373008b1b56e9c6b4853055f20b3eeb112a6eff9
Reviewed-by: Christian Stenger's avatarChristian Stenger <christian.stenger@qt.io>
Reviewed-by: default avatarhjk <hjk@qt.io>
parent ca1d1dfb
...@@ -55,12 +55,6 @@ QtcProduct { ...@@ -55,12 +55,6 @@ QtcProduct {
fileTags: ["pluginJsonIn"] fileTags: ["pluginJsonIn"]
} }
Group {
name: "MimeTypes"
prefix: product.sourceDirectory + '/'
files: [ "*.mimetypes.xml" ]
}
Export { Export {
Depends { name: "ExtensionSystem" } Depends { name: "ExtensionSystem" }
Depends { name: "cpp" } Depends { name: "cpp" }
......
...@@ -360,6 +360,11 @@ QVector<PluginDependency> PluginSpec::dependencies() const ...@@ -360,6 +360,11 @@ QVector<PluginDependency> PluginSpec::dependencies() const
return d->dependencies; return d->dependencies;
} }
QJsonObject PluginSpec::metaData() const
{
return d->metaData;
}
/*! /*!
Returns a list of descriptions of command line arguments the plugin processes. Returns a list of descriptions of command line arguments the plugin processes.
*/ */
...@@ -539,6 +544,7 @@ bool PluginSpecPrivate::read(const QString &fileName) ...@@ -539,6 +544,7 @@ bool PluginSpecPrivate::read(const QString &fileName)
hasError = false; hasError = false;
errorString.clear(); errorString.clear();
dependencies.clear(); dependencies.clear();
metaData = QJsonObject();
QFileInfo fileInfo(fileName); QFileInfo fileInfo(fileName);
location = fileInfo.absolutePath(); location = fileInfo.absolutePath();
filePath = fileInfo.absoluteFilePath(); filePath = fileInfo.absoluteFilePath();
...@@ -650,11 +656,11 @@ static inline bool readMultiLineString(const QJsonValue &value, QString *out) ...@@ -650,11 +656,11 @@ static inline bool readMultiLineString(const QJsonValue &value, QString *out)
/*! /*!
\internal \internal
*/ */
bool PluginSpecPrivate::readMetaData(const QJsonObject &metaData) bool PluginSpecPrivate::readMetaData(const QJsonObject &pluginMetaData)
{ {
qCDebug(pluginLog) << "MetaData:" << QJsonDocument(metaData).toJson(); qCDebug(pluginLog) << "MetaData:" << QJsonDocument(pluginMetaData).toJson();
QJsonValue value; QJsonValue value;
value = metaData.value(QLatin1String("IID")); value = pluginMetaData.value(QLatin1String("IID"));
if (!value.isString()) { if (!value.isString()) {
qCDebug(pluginLog) << "Not a plugin (no string IID found)"; qCDebug(pluginLog) << "Not a plugin (no string IID found)";
return false; return false;
...@@ -664,19 +670,19 @@ bool PluginSpecPrivate::readMetaData(const QJsonObject &metaData) ...@@ -664,19 +670,19 @@ bool PluginSpecPrivate::readMetaData(const QJsonObject &metaData)
return false; return false;
} }
value = metaData.value(QLatin1String(PLUGIN_METADATA)); value = pluginMetaData.value(QLatin1String(PLUGIN_METADATA));
if (!value.isObject()) if (!value.isObject())
return reportError(tr("Plugin meta data not found")); return reportError(tr("Plugin meta data not found"));
QJsonObject pluginInfo = value.toObject(); metaData = value.toObject();
value = pluginInfo.value(QLatin1String(PLUGIN_NAME)); value = metaData.value(QLatin1String(PLUGIN_NAME));
if (value.isUndefined()) if (value.isUndefined())
return reportError(msgValueMissing(PLUGIN_NAME)); return reportError(msgValueMissing(PLUGIN_NAME));
if (!value.isString()) if (!value.isString())
return reportError(msgValueIsNotAString(PLUGIN_NAME)); return reportError(msgValueIsNotAString(PLUGIN_NAME));
name = value.toString(); name = value.toString();
value = pluginInfo.value(QLatin1String(PLUGIN_VERSION)); value = metaData.value(QLatin1String(PLUGIN_VERSION));
if (value.isUndefined()) if (value.isUndefined())
return reportError(msgValueMissing(PLUGIN_VERSION)); return reportError(msgValueMissing(PLUGIN_VERSION));
if (!value.isString()) if (!value.isString())
...@@ -685,32 +691,32 @@ bool PluginSpecPrivate::readMetaData(const QJsonObject &metaData) ...@@ -685,32 +691,32 @@ bool PluginSpecPrivate::readMetaData(const QJsonObject &metaData)
if (!isValidVersion(version)) if (!isValidVersion(version))
return reportError(msgInvalidFormat(PLUGIN_VERSION, version)); return reportError(msgInvalidFormat(PLUGIN_VERSION, version));
value = pluginInfo.value(QLatin1String(PLUGIN_COMPATVERSION)); value = metaData.value(QLatin1String(PLUGIN_COMPATVERSION));
if (!value.isUndefined() && !value.isString()) if (!value.isUndefined() && !value.isString())
return reportError(msgValueIsNotAString(PLUGIN_COMPATVERSION)); return reportError(msgValueIsNotAString(PLUGIN_COMPATVERSION));
compatVersion = value.toString(version); compatVersion = value.toString(version);
if (!value.isUndefined() && !isValidVersion(compatVersion)) if (!value.isUndefined() && !isValidVersion(compatVersion))
return reportError(msgInvalidFormat(PLUGIN_COMPATVERSION, compatVersion)); return reportError(msgInvalidFormat(PLUGIN_COMPATVERSION, compatVersion));
value = pluginInfo.value(QLatin1String(PLUGIN_REQUIRED)); value = metaData.value(QLatin1String(PLUGIN_REQUIRED));
if (!value.isUndefined() && !value.isBool()) if (!value.isUndefined() && !value.isBool())
return reportError(msgValueIsNotABool(PLUGIN_REQUIRED)); return reportError(msgValueIsNotABool(PLUGIN_REQUIRED));
required = value.toBool(false); required = value.toBool(false);
qCDebug(pluginLog) << "required =" << required; qCDebug(pluginLog) << "required =" << required;
value = pluginInfo.value(QLatin1String(PLUGIN_HIDDEN_BY_DEFAULT)); value = metaData.value(QLatin1String(PLUGIN_HIDDEN_BY_DEFAULT));
if (!value.isUndefined() && !value.isBool()) if (!value.isUndefined() && !value.isBool())
return reportError(msgValueIsNotABool(PLUGIN_HIDDEN_BY_DEFAULT)); return reportError(msgValueIsNotABool(PLUGIN_HIDDEN_BY_DEFAULT));
hiddenByDefault = value.toBool(false); hiddenByDefault = value.toBool(false);
qCDebug(pluginLog) << "hiddenByDefault =" << hiddenByDefault; qCDebug(pluginLog) << "hiddenByDefault =" << hiddenByDefault;
value = pluginInfo.value(QLatin1String(PLUGIN_EXPERIMENTAL)); value = metaData.value(QLatin1String(PLUGIN_EXPERIMENTAL));
if (!value.isUndefined() && !value.isBool()) if (!value.isUndefined() && !value.isBool())
return reportError(msgValueIsNotABool(PLUGIN_EXPERIMENTAL)); return reportError(msgValueIsNotABool(PLUGIN_EXPERIMENTAL));
experimental = value.toBool(false); experimental = value.toBool(false);
qCDebug(pluginLog) << "experimental =" << experimental; qCDebug(pluginLog) << "experimental =" << experimental;
value = pluginInfo.value(QLatin1String(PLUGIN_DISABLED_BY_DEFAULT)); value = metaData.value(QLatin1String(PLUGIN_DISABLED_BY_DEFAULT));
if (!value.isUndefined() && !value.isBool()) if (!value.isUndefined() && !value.isBool())
return reportError(msgValueIsNotABool(PLUGIN_DISABLED_BY_DEFAULT)); return reportError(msgValueIsNotABool(PLUGIN_DISABLED_BY_DEFAULT));
enabledByDefault = !value.toBool(false); enabledByDefault = !value.toBool(false);
...@@ -720,35 +726,35 @@ bool PluginSpecPrivate::readMetaData(const QJsonObject &metaData) ...@@ -720,35 +726,35 @@ bool PluginSpecPrivate::readMetaData(const QJsonObject &metaData)
enabledByDefault = false; enabledByDefault = false;
enabledBySettings = enabledByDefault; enabledBySettings = enabledByDefault;
value = pluginInfo.value(QLatin1String(VENDOR)); value = metaData.value(QLatin1String(VENDOR));
if (!value.isUndefined() && !value.isString()) if (!value.isUndefined() && !value.isString())
return reportError(msgValueIsNotAString(VENDOR)); return reportError(msgValueIsNotAString(VENDOR));
vendor = value.toString(); vendor = value.toString();
value = pluginInfo.value(QLatin1String(COPYRIGHT)); value = metaData.value(QLatin1String(COPYRIGHT));
if (!value.isUndefined() && !value.isString()) if (!value.isUndefined() && !value.isString())
return reportError(msgValueIsNotAString(COPYRIGHT)); return reportError(msgValueIsNotAString(COPYRIGHT));
copyright = value.toString(); copyright = value.toString();
value = pluginInfo.value(QLatin1String(DESCRIPTION)); value = metaData.value(QLatin1String(DESCRIPTION));
if (!value.isUndefined() && !readMultiLineString(value, &description)) if (!value.isUndefined() && !readMultiLineString(value, &description))
return reportError(msgValueIsNotAString(DESCRIPTION)); return reportError(msgValueIsNotAString(DESCRIPTION));
value = pluginInfo.value(QLatin1String(URL)); value = metaData.value(QLatin1String(URL));
if (!value.isUndefined() && !value.isString()) if (!value.isUndefined() && !value.isString())
return reportError(msgValueIsNotAString(URL)); return reportError(msgValueIsNotAString(URL));
url = value.toString(); url = value.toString();
value = pluginInfo.value(QLatin1String(CATEGORY)); value = metaData.value(QLatin1String(CATEGORY));
if (!value.isUndefined() && !value.isString()) if (!value.isUndefined() && !value.isString())
return reportError(msgValueIsNotAString(CATEGORY)); return reportError(msgValueIsNotAString(CATEGORY));
category = value.toString(); category = value.toString();
value = pluginInfo.value(QLatin1String(LICENSE)); value = metaData.value(QLatin1String(LICENSE));
if (!value.isUndefined() && !readMultiLineString(value, &license)) if (!value.isUndefined() && !readMultiLineString(value, &license))
return reportError(msgValueIsNotAMultilineString(LICENSE)); return reportError(msgValueIsNotAMultilineString(LICENSE));
value = pluginInfo.value(QLatin1String(PLATFORM)); value = metaData.value(QLatin1String(PLATFORM));
if (!value.isUndefined() && !value.isString()) if (!value.isUndefined() && !value.isString())
return reportError(msgValueIsNotAString(PLATFORM)); return reportError(msgValueIsNotAString(PLATFORM));
const QString platformSpec = value.toString().trimmed(); const QString platformSpec = value.toString().trimmed();
...@@ -759,7 +765,7 @@ bool PluginSpecPrivate::readMetaData(const QJsonObject &metaData) ...@@ -759,7 +765,7 @@ bool PluginSpecPrivate::readMetaData(const QJsonObject &metaData)
.arg(platformSpec, platformSpecification.errorString())); .arg(platformSpec, platformSpecification.errorString()));
} }
value = pluginInfo.value(QLatin1String(DEPENDENCIES)); value = metaData.value(QLatin1String(DEPENDENCIES));
if (!value.isUndefined() && !value.isArray()) if (!value.isUndefined() && !value.isArray())
return reportError(msgValueIsNotAObjectArray(DEPENDENCIES)); return reportError(msgValueIsNotAObjectArray(DEPENDENCIES));
if (!value.isUndefined()) { if (!value.isUndefined()) {
...@@ -806,7 +812,7 @@ bool PluginSpecPrivate::readMetaData(const QJsonObject &metaData) ...@@ -806,7 +812,7 @@ bool PluginSpecPrivate::readMetaData(const QJsonObject &metaData)
} }
} }
value = pluginInfo.value(QLatin1String(ARGUMENTS)); value = metaData.value(QLatin1String(ARGUMENTS));
if (!value.isUndefined() && !value.isArray()) if (!value.isUndefined() && !value.isArray())
return reportError(msgValueIsNotAObjectArray(ARGUMENTS)); return reportError(msgValueIsNotAObjectArray(ARGUMENTS));
if (!value.isUndefined()) { if (!value.isUndefined()) {
......
...@@ -104,6 +104,7 @@ public: ...@@ -104,6 +104,7 @@ public:
bool isForceEnabled() const; bool isForceEnabled() const;
bool isForceDisabled() const; bool isForceDisabled() const;
QVector<PluginDependency> dependencies() const; QVector<PluginDependency> dependencies() const;
QJsonObject metaData() const;
typedef QVector<PluginArgumentDescription> PluginArgumentDescriptions; typedef QVector<PluginArgumentDescription> PluginArgumentDescriptions;
PluginArgumentDescriptions argumentDescriptions() const; PluginArgumentDescriptions argumentDescriptions() const;
......
...@@ -82,6 +82,7 @@ public: ...@@ -82,6 +82,7 @@ public:
QString category; QString category;
QRegExp platformSpecification; QRegExp platformSpecification;
QVector<PluginDependency> dependencies; QVector<PluginDependency> dependencies;
QJsonObject metaData;
bool enabledBySettings = true; bool enabledBySettings = true;
bool enabledIndirectly = false; bool enabledIndirectly = false;
bool forceEnabled = false; bool forceEnabled = false;
...@@ -104,7 +105,7 @@ public: ...@@ -104,7 +105,7 @@ public:
void enableDependenciesIndirectly(); void enableDependenciesIndirectly();
bool readMetaData(const QJsonObject &metaData); bool readMetaData(const QJsonObject &pluginMetaData);
private: private:
PluginSpec *q; PluginSpec *q;
......
...@@ -331,7 +331,7 @@ MimeDatabase::~MimeDatabase() ...@@ -331,7 +331,7 @@ MimeDatabase::~MimeDatabase()
d = 0; d = 0;
} }
void MimeDatabase::addMimeTypes(const QString &fileName) void MimeDatabase::addMimeTypes(const QString &fileName, const QByteArray &data)
{ {
auto d = MimeDatabasePrivate::instance(); auto d = MimeDatabasePrivate::instance();
QMutexLocker locker(&d->mutex); QMutexLocker locker(&d->mutex);
...@@ -341,7 +341,7 @@ void MimeDatabase::addMimeTypes(const QString &fileName) ...@@ -341,7 +341,7 @@ void MimeDatabase::addMimeTypes(const QString &fileName)
qPrintable(fileName)); qPrintable(fileName));
auto xmlProvider = static_cast<MimeXMLProvider *>(d->provider()); auto xmlProvider = static_cast<MimeXMLProvider *>(d->provider());
xmlProvider->addFile(fileName); xmlProvider->addData(fileName, data);
} }
QString MimeDatabase::allFiltersString(QString *allFilesFilter) QString MimeDatabase::allFiltersString(QString *allFilesFilter)
......
...@@ -89,7 +89,7 @@ public: ...@@ -89,7 +89,7 @@ public:
QList<MimeType> allMimeTypes() const; QList<MimeType> allMimeTypes() const;
// Qt Creator additions // Qt Creator additions
static void addMimeTypes(const QString &fileName); static void addMimeTypes(const QString &id, const QByteArray &data);
static QString allFiltersString(QString *allFilesFilter = 0); static QString allFiltersString(QString *allFilesFilter = 0);
static QString allFilesFilterString(); static QString allFilesFilterString();
static QStringList allGlobPatterns(); static QStringList allGlobPatterns();
......
...@@ -782,16 +782,16 @@ void MimeXMLProvider::setMagicRulesForMimeType(const MimeType &mimeType, const Q ...@@ -782,16 +782,16 @@ void MimeXMLProvider::setMagicRulesForMimeType(const MimeType &mimeType, const Q
void MimeXMLProvider::ensureLoaded() void MimeXMLProvider::ensureLoaded()
{ {
if (!m_loaded /*|| shouldCheck()*/) { if (!m_loaded /*|| shouldCheck()*/) {
m_loaded = true;
// bool fdoXmlFound = false; // bool fdoXmlFound = false;
// add custom mime types first, which overrides any default from freedesktop.org.xml QStringList allFiles;
QStringList allFiles = m_additionalFiles;
// const QStringList packageDirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QLatin1String("mime/packages"), QStandardPaths::LocateDirectory); // const QStringList packageDirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QLatin1String("mime/packages"), QStandardPaths::LocateDirectory);
// //qDebug() << "packageDirs=" << packageDirs; // //qDebug() << "packageDirs=" << packageDirs;
// foreach (const QString &packageDir, packageDirs) { // for (const QString &packageDir : packageDirs) {
// QDir dir(packageDir); // QDir dir(packageDir);
// const QStringList files = dir.entryList(QDir::Files | QDir::NoDotAndDotDot); // const QStringList files = dir.entryList(QDir::Files | QDir::NoDotAndDotDot);
// //qDebug() << static_cast<const void *>(this) << Q_FUNC_INFO << packageDir << files; // //qDebug() << static_cast<const void *>(this) << packageDir << files;
// if (!fdoXmlFound) // if (!fdoXmlFound)
// fdoXmlFound = files.contains(QLatin1String("freedesktop.org.xml")); // fdoXmlFound = files.contains(QLatin1String("freedesktop.org.xml"));
// QStringList::const_iterator endIt(files.constEnd()); // QStringList::const_iterator endIt(files.constEnd());
...@@ -802,13 +802,9 @@ void MimeXMLProvider::ensureLoaded() ...@@ -802,13 +802,9 @@ void MimeXMLProvider::ensureLoaded()
// if (!fdoXmlFound) { // if (!fdoXmlFound) {
// // We could instead install the file as part of installing Qt? // // We could instead install the file as part of installing Qt?
allFiles.append(QLatin1String(":/qt-project.org/qmime/freedesktop.org.xml")); allFiles.prepend(QLatin1String(":/qt-project.org/qmime/freedesktop.org.xml"));
// } // }
if (m_allFiles == allFiles)
return;
m_allFiles = allFiles;
m_nameMimeTypeMap.clear(); m_nameMimeTypeMap.clear();
m_aliases.clear(); m_aliases.clear();
m_parents.clear(); m_parents.clear();
...@@ -817,6 +813,17 @@ void MimeXMLProvider::ensureLoaded() ...@@ -817,6 +813,17 @@ void MimeXMLProvider::ensureLoaded()
//qDebug() << "Loading" << m_allFiles; //qDebug() << "Loading" << m_allFiles;
// add custom mime types first, which override any default from freedesktop.org.xml
MimeTypeParser parser(*this);
QHashIterator<QString, QByteArray> it(m_additionalData);
while (it.hasNext()) {
it.next();
QString errorMessage;
if (!parser.parse(it.value(), it.key(), &errorMessage)) {
qWarning("MimeDatabase: Error loading %s\n%s", qPrintable(it.key()),
qPrintable(errorMessage));
}
}
foreach (const QString &file, allFiles) foreach (const QString &file, allFiles)
load(file); load(file);
} }
...@@ -904,8 +911,10 @@ void MimeXMLProvider::addMagicMatcher(const MimeMagicRuleMatcher &matcher) ...@@ -904,8 +911,10 @@ void MimeXMLProvider::addMagicMatcher(const MimeMagicRuleMatcher &matcher)
m_magicMatchers.append(matcher); m_magicMatchers.append(matcher);
} }
void MimeXMLProvider::addFile(const QString &filePath) void MimeXMLProvider::addData(const QString &id, const QByteArray &data)
{ {
m_additionalFiles.append(filePath); if (m_additionalData.contains(id))
qWarning("Overwriting data in mime database, id '%s'", qPrintable(id));
m_additionalData.insert(id, data);
m_loaded = false; // force reload to ensure correct load order for overridden mime types m_loaded = false; // force reload to ensure correct load order for overridden mime types
} }
...@@ -160,7 +160,7 @@ public: ...@@ -160,7 +160,7 @@ public:
void addMagicMatcher(const MimeMagicRuleMatcher &matcher); void addMagicMatcher(const MimeMagicRuleMatcher &matcher);
// Qt Creator additions // Qt Creator additions
void addFile(const QString &filePath); void addData(const QString &id, const QByteArray &data);
QMap<int, QList<MimeMagicRule> > magicRulesForMimeType(const MimeType &mimeType); QMap<int, QList<MimeMagicRule> > magicRulesForMimeType(const MimeType &mimeType);
void setGlobPatternsForMimeType(const MimeType &mimeType, const QStringList &patterns); void setGlobPatternsForMimeType(const MimeType &mimeType, const QStringList &patterns);
void setMagicRulesForMimeType(const MimeType &mimeType, const QMap<int, QList<MimeMagicRule> > &rules); void setMagicRulesForMimeType(const MimeType &mimeType, const QMap<int, QList<MimeMagicRule> > &rules);
...@@ -182,10 +182,9 @@ private: ...@@ -182,10 +182,9 @@ private:
MimeAllGlobPatterns m_mimeTypeGlobs; MimeAllGlobPatterns m_mimeTypeGlobs;
QList<MimeMagicRuleMatcher> m_magicMatchers; QList<MimeMagicRuleMatcher> m_magicMatchers;
QStringList m_allFiles;
// Qt Creator additions // Qt Creator additions
QStringList m_additionalFiles; QHash<QString, QByteArray> m_additionalData; // id -> data
}; };
} // Internal } // Internal
......
...@@ -15,5 +15,16 @@ ...@@ -15,5 +15,16 @@
\"Category\" : \"Device Support\", \"Category\" : \"Device Support\",
\"Description\" : \"Support for deployment to and execution on Android Devices.\", \"Description\" : \"Support for deployment to and execution on Android Devices.\",
\"Url\" : \"http://necessitas.kde.org\", \"Url\" : \"http://necessitas.kde.org\",
$$dependencyList $$dependencyList,
\"Mimetypes\" : \"
<?xml version=\'1.0\'?>
<mime-info xmlns=\'http://www.freedesktop.org/standards/shared-mime-info\'>
<mime-type type=\'application/vnd.google.android.android_manifest\'>
<comment>Android manifest file</comment>
<sub-class-of type=\'application/xml\'/>
<glob pattern=\'AndroidManifest.xml\'/>
</mime-type>
</mime-info>
\"
} }
<?xml version="1.0"?>
<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
<mime-type type="application/vnd.google.android.android_manifest">
<comment>Android manifest file</comment>
<sub-class-of type="application/xml"/>
<glob pattern="AndroidManifest.xml"/>
</mime-type>
</mime-info>
...@@ -5,6 +5,5 @@ ...@@ -5,6 +5,5 @@
<file>images/androiddevicesmall.png</file> <file>images/androiddevicesmall.png</file>
<file>images/androiddevicesmall@2x.png</file> <file>images/androiddevicesmall@2x.png</file>
<file>images/download.png</file> <file>images/download.png</file>
<file>Android.mimetypes.xml</file>
</qresource> </qresource>
</RCC> </RCC>
...@@ -52,8 +52,6 @@ ...@@ -52,8 +52,6 @@
#include <qtsupport/qtversionmanager.h> #include <qtsupport/qtversionmanager.h>
#include <utils/mimetypes/mimedatabase.h>
#include <QtPlugin> #include <QtPlugin>
using namespace ProjectExplorer; using namespace ProjectExplorer;
...@@ -81,8 +79,6 @@ bool AndroidPlugin::initialize(const QStringList &arguments, QString *errorMessa ...@@ -81,8 +79,6 @@ bool AndroidPlugin::initialize(const QStringList &arguments, QString *errorMessa
addAutoReleasedObject(new Internal::JavaEditorFactory); addAutoReleasedObject(new Internal::JavaEditorFactory);
KitManager::registerKitInformation(new Internal::AndroidGdbServerKitInformation); KitManager::registerKitInformation(new Internal::AndroidGdbServerKitInformation);
Utils::MimeDatabase::addMimeTypes(QLatin1String(":/android/Android.mimetypes.xml"));
addAutoReleasedObject(new Internal::AndroidManifestEditorFactory); addAutoReleasedObject(new Internal::AndroidManifestEditorFactory);
connect(KitManager::instance(), &KitManager::kitsLoaded, connect(KitManager::instance(), &KitManager::kitsLoaded,
......
...@@ -16,5 +16,15 @@ ...@@ -16,5 +16,15 @@
\"Category\" : \"Version Control\", \"Category\" : \"Version Control\",
\"Description\" : \"ClearCase integration.\", \"Description\" : \"ClearCase integration.\",
\"Url\" : \"http://www.qt.io\", \"Url\" : \"http://www.qt.io\",
$$dependencyList $$dependencyList,
\"Mimetypes\" : \"
<?xml version=\'1.0\'?>
<mime-info xmlns=\'http://www.freedesktop.org/standards/shared-mime-info\'>
<mime-type type=\'application/vnd.audc.text.clearcase.submit\'>
<comment>ClearCase submit template</comment>
<sub-class-of type=\'text/plain\'/>
</mime-type>
</mime-info>
\"
} }
...@@ -31,5 +31,3 @@ FORMS += checkoutdialog.ui \ ...@@ -31,5 +31,3 @@ FORMS += checkoutdialog.ui \
settingspage.ui \ settingspage.ui \
undocheckout.ui \ undocheckout.ui \
versionselector.ui versionselector.ui
RESOURCES += clearcase.qrc
...@@ -21,7 +21,6 @@ QtcPlugin { ...@@ -21,7 +21,6 @@ QtcPlugin {
"checkoutdialog.cpp", "checkoutdialog.cpp",
"checkoutdialog.h", "checkoutdialog.h",
"checkoutdialog.ui", "checkoutdialog.ui",
"clearcase.qrc",
"clearcaseconstants.h", "clearcaseconstants.h",
"clearcasecontrol.cpp", "clearcasecontrol.cpp",
"clearcasecontrol.h", "clearcasecontrol.h",
......
<RCC>
<qresource prefix="/clearcase">