From 55b17f8908a81a0341d404dc88452814544c8209 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Wed, 14 Sep 2022 15:34:49 +0200 Subject: [PATCH] UpdateInfo: add action to start maintenance tool Change-Id: Icb37dc0f5634ccd11aa34aa8dc256bf796301b2f Reviewed-by: Reviewed-by: Eike Ziller --- .../actionmanager/actioncontainer.cpp | 4 +- src/plugins/updateinfo/updateinfoplugin.cpp | 41 ++++++++++++++----- src/plugins/updateinfo/updateinfoplugin.h | 5 ++- 3 files changed, 37 insertions(+), 13 deletions(-) diff --git a/src/plugins/coreplugin/actionmanager/actioncontainer.cpp b/src/plugins/coreplugin/actionmanager/actioncontainer.cpp index 0e6e1131a39..df4b37814c4 100644 --- a/src/plugins/coreplugin/actionmanager/actioncontainer.cpp +++ b/src/plugins/coreplugin/actionmanager/actioncontainer.cpp @@ -476,7 +476,9 @@ bool MenuActionContainer::updateInternal() } } else if (auto command = qobject_cast(item)) { actions.removeAll(command->action()); - if (command->isActive()) { + if (command->isActive() + && !(HostOsInfo::isMacHost() + && command->action()->menuRole() == QAction::ApplicationSpecificRole)) { hasitems = true; break; } diff --git a/src/plugins/updateinfo/updateinfoplugin.cpp b/src/plugins/updateinfo/updateinfoplugin.cpp index f6e80f5799e..021f0b9cce1 100644 --- a/src/plugins/updateinfo/updateinfoplugin.cpp +++ b/src/plugins/updateinfo/updateinfoplugin.cpp @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 #include "updateinfoplugin.h" +#include "updateinfotr.h" #include "settingspage.h" #include "updateinfotools.h" @@ -47,6 +48,7 @@ const quint32 OneMinute = 60000; const quint32 OneHour = 3600000; const char InstallUpdates[] = "UpdateInfo.InstallUpdates"; const char InstallQtUpdates[] = "UpdateInfo.InstallQtUpdates"; +const char M_MAINTENANCE_TOOL[] = "QtCreator.Menu.Tools.MaintenanceTool"; using namespace Core; using namespace Utils; @@ -324,12 +326,28 @@ bool UpdateInfoPlugin::initialize(const QStringList & /* arguments */, QString * (void) new SettingsPage(this); + auto mtools = ActionManager::actionContainer(Constants::M_TOOLS); + ActionContainer *mmaintenanceTool = ActionManager::createMenu(M_MAINTENANCE_TOOL); + mmaintenanceTool->setOnAllDisabledBehavior(Core::ActionContainer::Hide); + mmaintenanceTool->menu()->setTitle(Tr::tr("Qt Maintenance Tool")); mtools->addMenu(mmaintenanceTool); + QAction *checkForUpdatesAction = new QAction(tr("Check for Updates"), this); checkForUpdatesAction->setMenuRole(QAction::ApplicationSpecificRole); - Core::Command *checkForUpdatesCommand = Core::ActionManager::registerAction(checkForUpdatesAction, "Updates.CheckForUpdates"); - connect(checkForUpdatesAction, &QAction::triggered, this, &UpdateInfoPlugin::startCheckForUpdates); - ActionContainer *const helpContainer = ActionManager::actionContainer(Core::Constants::M_HELP); - helpContainer->addAction(checkForUpdatesCommand, Constants::G_HELP_UPDATES); + Core::Command *checkForUpdatesCommand + = Core::ActionManager::registerAction(checkForUpdatesAction, "Updates.CheckForUpdates"); + connect(checkForUpdatesAction, &QAction::triggered, + this, &UpdateInfoPlugin::startCheckForUpdates); + mmaintenanceTool->addAction(checkForUpdatesCommand); + + QAction *startMaintenanceToolAction = new QAction(Tr::tr("Start Maintenance Tool"), this); + startMaintenanceToolAction->setMenuRole(QAction::ApplicationSpecificRole); + Core::Command *startMaintenanceToolCommand + = Core::ActionManager::registerAction(startMaintenanceToolAction, + "Updates.StartMaintenanceTool"); + connect(startMaintenanceToolAction, &QAction::triggered, this, [this]() { + startMaintenanceTool({}); + }); + mmaintenanceTool->addAction(startMaintenanceToolCommand); return true; } @@ -458,16 +476,19 @@ QDate UpdateInfoPlugin::nextCheckDate(CheckUpdateInterval interval) const return d->m_lastCheckDate.addMonths(1); } -void UpdateInfoPlugin::startUpdater() +void UpdateInfoPlugin::startMaintenanceTool(const QStringList &args) const { - Utils::QtcProcess::startDetached( - {Utils::FilePath::fromString(d->m_maintenanceTool), {"--updater"}}); + QtcProcess::startDetached(CommandLine{FilePath::fromString(d->m_maintenanceTool), args}); } -void UpdateInfoPlugin::startPackageManager() +void UpdateInfoPlugin::startUpdater() const { - Utils::QtcProcess::startDetached( - {Utils::FilePath::fromString(d->m_maintenanceTool), {"--start-package-manager"}}); + startMaintenanceTool({"--updater"}); +} + +void UpdateInfoPlugin::startPackageManager() const +{ + startMaintenanceTool({"--start-package-manager"}); } } //namespace Internal diff --git a/src/plugins/updateinfo/updateinfoplugin.h b/src/plugins/updateinfo/updateinfoplugin.h index 2a4de2d317f..42b4bedb589 100644 --- a/src/plugins/updateinfo/updateinfoplugin.h +++ b/src/plugins/updateinfo/updateinfoplugin.h @@ -63,8 +63,9 @@ private: void stopAutoCheckForUpdates(); void doAutoCheckForUpdates(); - void startUpdater(); - void startPackageManager(); + void startMaintenanceTool(const QStringList &args) const; + void startUpdater() const; + void startPackageManager() const; void stopCheckForUpdates(); void checkForUpdatesFinished();