aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/extensionmanager/extensionmanagerwidget.cpp37
1 files changed, 26 insertions, 11 deletions
diff --git a/src/plugins/extensionmanager/extensionmanagerwidget.cpp b/src/plugins/extensionmanager/extensionmanagerwidget.cpp
index 0c367adc5ea..a6a284d80fd 100644
--- a/src/plugins/extensionmanager/extensionmanagerwidget.cpp
+++ b/src/plugins/extensionmanager/extensionmanagerwidget.cpp
@@ -32,7 +32,9 @@
#include <utils/infolabel.h>
#include <utils/layoutbuilder.h>
#include <utils/markdownbrowser.h>
+#include <utils/mimeutils.h>
#include <utils/networkaccessmanager.h>
+#include <utils/stringutils.h>
#include <utils/styledbar.h>
#include <utils/stylehelper.h>
#include <utils/temporarydirectory.h>
@@ -243,6 +245,17 @@ private:
const char kRestartSetting[] = "RestartAfterPluginEnabledChanged";
+// Copy paste from Core::Internal::CorePlugin::loadMimeFromPlugin
+// TODO make code usable by other plugins.
+static void loadMimeFromPlugin(const ExtensionSystem::PluginSpec *plugin)
+{
+ const QJsonObject metaData = plugin->metaData();
+ const QJsonValue mimetypes = metaData.value("Mimetypes");
+ QString mimetypeString;
+ if (Utils::readMultiLineString(mimetypes, &mimetypeString))
+ Utils::addMimeTypes(plugin->name() + ".mimetypes", mimetypeString.trimmed().toUtf8());
+}
+
class PluginStatusWidget : public QWidget
{
public:
@@ -266,17 +279,19 @@ public:
return;
const bool doIt = m_pluginView.data().setPluginsEnabled({spec}, checked);
if (doIt) {
- if (!ICore::infoBar()->canInfoBeAdded(kRestartSetting))
- return;
-
- Utils::InfoBarEntry info(
- kRestartSetting,
- Core::Tr::tr("Plugin changes will take effect after restart."));
- info.addCustomButton(Tr::tr("Restart Now"), [] {
- ICore::infoBar()->removeInfo(kRestartSetting);
- QTimer::singleShot(0, ICore::instance(), &ICore::restart);
- });
- ICore::infoBar()->addInfo(info);
+ if (checked && spec->isEffectivelySoftloadable()) {
+ ExtensionSystem::PluginManager::loadPluginsAtRuntime({spec});
+ loadMimeFromPlugin(spec);
+ } else if (ICore::infoBar()->canInfoBeAdded(kRestartSetting)) {
+ Utils::InfoBarEntry info(
+ kRestartSetting,
+ Core::Tr::tr("Plugin changes will take effect after restart."));
+ info.addCustomButton(Tr::tr("Restart Now"), [] {
+ ICore::infoBar()->removeInfo(kRestartSetting);
+ QTimer::singleShot(0, ICore::instance(), &ICore::restart);
+ });
+ ICore::infoBar()->addInfo(info);
+ }
ExtensionSystem::PluginManager::writeSettings();
} else {