From: Dominik Schmidt Date: Tue, 16 Oct 2018 17:18:01 +0000 (-0700) Subject: Disable autostartCheckBox if autostart is configured system wide X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~12^2~21^2~468^2~457 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=5d9370594d9ed27f3f708f74f2572e56e12eaf60;p=nextcloud-desktop.git Disable autostartCheckBox if autostart is configured system wide --- diff --git a/src/common/utility.cpp b/src/common/utility.cpp index 3c6fe06b4..1225b6e4a 100644 --- a/src/common/utility.cpp +++ b/src/common/utility.cpp @@ -197,6 +197,15 @@ QByteArray Utility::friendlyUserAgentString() return userAgent.toUtf8(); } +bool Utility::hasSystemLaunchOnStartup(const QString &appName) +{ +#if defined(Q_OS_WIN) + return hasSystemLaunchOnStartup_private(appName); +#else + return false; +#endif +} + bool Utility::hasLaunchOnStartup(const QString &appName) { return hasLaunchOnStartup_private(appName); diff --git a/src/common/utility.h b/src/common/utility.h index fafc1b3bc..3985704e3 100644 --- a/src/common/utility.h +++ b/src/common/utility.h @@ -58,6 +58,15 @@ namespace Utility { OCSYNC_EXPORT QString octetsToString(qint64 octets); OCSYNC_EXPORT QByteArray userAgentString(); OCSYNC_EXPORT QByteArray friendlyUserAgentString(); + /** + * @brief Return whether launch on startup is enabled system wide. + * + * If this returns true, the checkbox for user specific launch + * on startup will be hidden. + * + * Currently only implemented on Windows. + */ + OCSYNC_EXPORT bool hasSystemLaunchOnStartup(const QString &appName); OCSYNC_EXPORT bool hasLaunchOnStartup(const QString &appName); OCSYNC_EXPORT void setLaunchOnStartup(const QString &appName, const QString &guiName, bool launch); OCSYNC_EXPORT uint convertSizeToUint(size_t &convertVar); diff --git a/src/common/utility_win.cpp b/src/common/utility_win.cpp index bfe9d7852..d8eae7931 100644 --- a/src/common/utility_win.cpp +++ b/src/common/utility_win.cpp @@ -25,6 +25,7 @@ #include #include +static const char systemRunPathC[] = R"(HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run)"; static const char runPathC[] = R"(HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run)"; namespace OCC { @@ -67,6 +68,12 @@ static void setupFavLink_private(const QString &folder) qCWarning(lcUtility) << "linking" << folder << "to" << linkName << "failed!"; } +bool hasSystemLaunchOnStartup_private(const QString &appName) +{ + QString runPath = QLatin1String(systemRunPathC); + QSettings settings(runPath, QSettings::NativeFormat); + return settings.contains(appName); +} bool hasLaunchOnStartup_private(const QString &appName) { diff --git a/src/gui/generalsettings.cpp b/src/gui/generalsettings.cpp index 2b37a2053..bb98f1db1 100644 --- a/src/gui/generalsettings.cpp +++ b/src/gui/generalsettings.cpp @@ -157,8 +157,14 @@ GeneralSettings::GeneralSettings(QWidget *parent) _ui->showInExplorerNavigationPaneCheckBox->setText(txt); #endif - _ui->autostartCheckBox->setChecked(Utility::hasLaunchOnStartup(Theme::instance()->appName())); - connect(_ui->autostartCheckBox, &QAbstractButton::toggled, this, &GeneralSettings::slotToggleLaunchOnStartup); + if(Utility::hasSystemLaunchOnStartup(Theme::instance()->appName())) { + _ui->autostartCheckBox->setChecked(true); + _ui->autostartCheckBox->setDisabled(true); + _ui->autostartCheckBox->setToolTip(tr("You cannot disable autostart because system-wide autostart is enabled.")); + } else { + _ui->autostartCheckBox->setChecked(Utility::hasLaunchOnStartup(Theme::instance()->appName())); + connect(_ui->autostartCheckBox, &QAbstractButton::toggled, this, &GeneralSettings::slotToggleLaunchOnStartup); + } // setup about section QString about = Theme::instance()->about();