summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Griebl <robert.griebl@pelagicore.com>2018-03-29 21:55:35 +0200
committerBramastyo Harimukti Santoso <bramastyo.harimukti.santoso@pelagicore.com>2018-04-04 12:00:08 +0000
commitb4b6adf4c0e915b399c02cb7b913f0bd3ff03ecc (patch)
treea67dc83485a158b6311ff82394d576808a24461c
parentbb786fa9feb03d0633ba7697d3dac5235dda0636 (diff)
downloadqtapplicationmanager-b4b6adf4c0e915b399c02cb7b913f0bd3ff03ecc.tar.gz
(Un)register MIME types with QtGui on application (un)installation
This fixes x-scheme-handler/foo MIME-types not working directly after installation in single-process mode. Change-Id: I023a88f6ca420a1c72b2e0dcf99c3f382e02658d Reviewed-by: Alexandra Betouni <ABetouni@luxoft.com> Reviewed-by: Bramastyo Harimukti Santoso <bramastyo.harimukti.santoso@pelagicore.com>
-rw-r--r--src/manager-lib/applicationmanager.cpp17
-rw-r--r--src/manager-lib/applicationmanager_p.h1
2 files changed, 15 insertions, 3 deletions
diff --git a/src/manager-lib/applicationmanager.cpp b/src/manager-lib/applicationmanager.cpp
index 29a46b9e..e47d9689 100644
--- a/src/manager-lib/applicationmanager.cpp
+++ b/src/manager-lib/applicationmanager.cpp
@@ -605,7 +605,8 @@ QVector<const Application *> ApplicationManager::mimeTypeHandlers(const QString
void ApplicationManager::registerMimeTypes()
{
- QVector<QString> schemes;
+#if defined(QT_GUI_LIB)
+ QSet<QString> schemes;
schemes << qSL("file") << qSL("http") << qSL("https");
for (const Application *app : qAsConst(d->apps)) {
@@ -620,9 +621,17 @@ void ApplicationManager::registerMimeTypes()
schemes << mime.mid(pos + 1);
}
}
-#if defined(QT_GUI_LIB)
- for (const QString &scheme : qAsConst(schemes))
+ QSet<QString> registerSchemes = schemes;
+ registerSchemes.subtract(d->registeredMimeSchemes);
+ QSet<QString> unregisterSchemes = d->registeredMimeSchemes;
+ unregisterSchemes.subtract(schemes);
+
+ for (const QString &scheme : qAsConst(unregisterSchemes))
+ QDesktopServices::unsetUrlHandler(scheme);
+ for (const QString &scheme : qAsConst(registerSchemes))
QDesktopServices::setUrlHandler(scheme, this, "openUrlRelay");
+
+ d->registeredMimeSchemes = schemes;
#endif
}
@@ -1294,6 +1303,7 @@ bool ApplicationManager::finishedApplicationInstall(const QString &id)
return false;
}
const_cast<Application *>(app)->setInstallationReport(ir.take());
+ registerMimeTypes();
app->m_state = Application::Installed;
emit app->stateChanged(app->m_state);
app->m_progress = 0;
@@ -1321,6 +1331,7 @@ bool ApplicationManager::finishedApplicationInstall(const QString &id)
endRemoveRows();
}
delete app;
+ registerMimeTypes();
try {
if (d->database)
d->database->write(d->apps);
diff --git a/src/manager-lib/applicationmanager_p.h b/src/manager-lib/applicationmanager_p.h
index 95e08451..0e7e0b6b 100644
--- a/src/manager-lib/applicationmanager_p.h
+++ b/src/manager-lib/applicationmanager_p.h
@@ -70,6 +70,7 @@ public:
QList<QPair<QString, QString>> containerSelectionConfig;
QJSValue containerSelectionFunction;
+ QSet<QString> registeredMimeSchemes;
struct OpenUrlRequest
{
QString requestId;