diff options
author | Robert Griebl <robert.griebl@pelagicore.com> | 2018-03-29 21:55:35 +0200 |
---|---|---|
committer | Bramastyo Harimukti Santoso <bramastyo.harimukti.santoso@pelagicore.com> | 2018-04-04 12:00:08 +0000 |
commit | b4b6adf4c0e915b399c02cb7b913f0bd3ff03ecc (patch) | |
tree | a67dc83485a158b6311ff82394d576808a24461c | |
parent | bb786fa9feb03d0633ba7697d3dac5235dda0636 (diff) | |
download | qtapplicationmanager-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.cpp | 17 | ||||
-rw-r--r-- | src/manager-lib/applicationmanager_p.h | 1 |
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; |