diff options
author | Katja Marttila <katja.marttila@qt.io> | 2020-04-06 13:59:11 +0300 |
---|---|---|
committer | Katja Marttila <katja.marttila@qt.io> | 2020-04-09 09:50:03 +0300 |
commit | 90523cb44306949893b5ae0f3706185c7d364c6f (patch) | |
tree | 285ffe703d752caf91d108980b6c004ced07ffe0 /src | |
parent | a58ec153e6e2f91e7cfa89c15ecd222c29bf3fb9 (diff) |
Fix shortcut creation when installing from CLI
Change default button from Retry to Cancel if operation fails to avoid
infinite loop when running from command line interface.
Added also unit tests for shortcut operation.
Task-number: QTIFW-1666 QTIFW-1710
Change-Id: I171b6aecd9886acce0051b7082842f8f76b22046
Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/libs/installer/constants.h | 2 | ||||
-rw-r--r-- | src/libs/installer/createshortcutoperation.h | 4 | ||||
-rw-r--r-- | src/libs/installer/packagemanagercore_p.cpp | 18 | ||||
-rw-r--r-- | src/libs/installer/packagemanagercoredata.cpp | 4 | ||||
-rw-r--r-- | src/libs/installer/packagemanagergui.cpp | 2 |
5 files changed, 23 insertions, 7 deletions
diff --git a/src/libs/installer/constants.h b/src/libs/installer/constants.h index 8f3291b04..3759e6157 100644 --- a/src/libs/installer/constants.h +++ b/src/libs/installer/constants.h @@ -38,6 +38,8 @@ namespace QInstaller { static const QLatin1String scTrue("true"); static const QLatin1String scFalse("false"); static const QLatin1String scScript("script"); +static const QLatin1String scAllUsersStartMenuProgramsPath("AllUsersStartMenuProgramsPath"); +static const QLatin1String scUserStartMenuProgramsPath("UserStartMenuProgramsPath"); static const QLatin1String scName("Name"); static const QLatin1String scVersion("Version"); diff --git a/src/libs/installer/createshortcutoperation.h b/src/libs/installer/createshortcutoperation.h index dc2ac6ddb..9bf9ebdcb 100644 --- a/src/libs/installer/createshortcutoperation.h +++ b/src/libs/installer/createshortcutoperation.h @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2017 The Qt Company Ltd. +** Copyright (C) 2020 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -37,7 +37,7 @@ class INSTALLER_EXPORT CreateShortcutOperation : public Operation { Q_DECLARE_TR_FUNCTIONS(QInstaller::CreateShortcutOperation) public: - explicit CreateShortcutOperation(PackageManagerCore *core); + explicit CreateShortcutOperation(PackageManagerCore *core = nullptr); void backup(); bool performOperation(); diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp index dba96c222..e408db40e 100644 --- a/src/libs/installer/packagemanagercore_p.cpp +++ b/src/libs/installer/packagemanagercore_p.cpp @@ -593,6 +593,20 @@ void PackageManagerCorePrivate::initialize(const QHash<QString, QString> ¶ms } processFilesForDelayedDeletion(); + // Set shortcut path for command line interface, in GUI version + // we have a separate page where the whole path is set. +#ifdef Q_OS_WIN + if (m_core->isCommandLineInstance()) { + QString startMenuPath; + if (params.value(QLatin1String("AllUsers")) == scTrue) + startMenuPath = m_data.value(scAllUsersStartMenuProgramsPath).toString(); + else + startMenuPath = m_data.value(scUserStartMenuProgramsPath).toString(); + QString startMenuDir = m_core->value(scStartMenuDir, m_core->value(QLatin1String("ProductName"))); + m_data.setValue(scStartMenuDir, startMenuPath + QDir::separator() + startMenuDir); + } +#endif + disconnect(this, &PackageManagerCorePrivate::installationStarted, ProgressCoordinator::instance(), &ProgressCoordinator::reset); connect(this, &PackageManagerCorePrivate::installationStarted, @@ -1901,10 +1915,10 @@ void PackageManagerCorePrivate::installComponent(Component *component, double pr .join(QLatin1String("; ")), operation->errorString()); const QMessageBox::StandardButton button = MessageBoxHandler::warning(MessageBoxHandler::currentBestSuitParent(), - QLatin1String("installationErrorWithRetry"), tr("Installer Error"), + QLatin1String("installationErrorWithCancel"), tr("Installer Error"), tr("Error during installation process (%1):\n%2").arg(component->name(), operation->errorString()), - QMessageBox::Retry | QMessageBox::Ignore | QMessageBox::Cancel, QMessageBox::Retry); + QMessageBox::Retry | QMessageBox::Ignore | QMessageBox::Cancel, QMessageBox::Cancel); if (button == QMessageBox::Retry) ok = performOperationThreaded(operation); diff --git a/src/libs/installer/packagemanagercoredata.cpp b/src/libs/installer/packagemanagercoredata.cpp index df6d96a55..667e2f577 100644 --- a/src/libs/installer/packagemanagercoredata.cpp +++ b/src/libs/installer/packagemanagercoredata.cpp @@ -167,9 +167,9 @@ void PackageManagerCoreData::setDynamicPredefinedVariables() desktop = user.value(QLatin1String("Desktop")).toString(); } m_variables.insert(QLatin1String("DesktopDir"), replaceWindowsEnvironmentVariables(desktop)); - m_variables.insert(QLatin1String("UserStartMenuProgramsPath"), + m_variables.insert(scUserStartMenuProgramsPath, replaceWindowsEnvironmentVariables(programs)); - m_variables.insert(QLatin1String("AllUsersStartMenuProgramsPath"), + m_variables.insert(scAllUsersStartMenuProgramsPath, replaceWindowsEnvironmentVariables(allPrograms)); #endif #define QUOTE_(x) #x diff --git a/src/libs/installer/packagemanagergui.cpp b/src/libs/installer/packagemanagergui.cpp index 771b2720c..d80709416 100644 --- a/src/libs/installer/packagemanagergui.cpp +++ b/src/libs/installer/packagemanagergui.cpp @@ -2271,7 +2271,7 @@ StartMenuDirectoryPage::StartMenuDirectoryPage(PackageManagerCore *core) startMenuPath = core->value(QLatin1String("UserStartMenuProgramsPath")); QStringList dirs = QDir(startMenuPath).entryList(QDir::AllDirs | QDir::NoDotAndDotDot); if (core->value(scAllUsers, scFalse) == scTrue) { - startMenuPath = core->value(QLatin1String("AllUsersStartMenuProgramsPath")); + startMenuPath = core->value(scAllUsersStartMenuProgramsPath); dirs += QDir(startMenuPath).entryList(QDir::AllDirs | QDir::NoDotAndDotDot); } dirs.removeDuplicates(); |