diff options
author | Alessandro Portale <[email protected]> | 2024-11-12 15:40:54 +0100 |
---|---|---|
committer | Alessandro Portale <[email protected]> | 2024-11-18 09:17:11 +0000 |
commit | 809e7010a0a5bbab3ecfe57d41d176a987357201 (patch) | |
tree | 9c68e0669c0fdf2aeca0d73580d758d7c4bc9ac0 /src/plugins/extensionmanager/extensionmanagerwidget.cpp | |
parent | caec806d8b080e0e7d4774924df0ebd2f4d884e3 (diff) |
ExtensionsManager: Omit reloading for softloadable plugins
This change avoids the "Reload now" info bar if a disabled and
softloadable plugin gets enabled.
Fixes: QTCREATORBUG-31123
Change-Id: Ia60f1f645e034888df6e2cc8468db41d3810c9ff
Reviewed-by: Marcus Tillmanns <[email protected]>
Diffstat (limited to 'src/plugins/extensionmanager/extensionmanagerwidget.cpp')
-rw-r--r-- | src/plugins/extensionmanager/extensionmanagerwidget.cpp | 37 |
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 { |