setQuitOnLastWindowClosed(false);
+ _theme->setSystrayUseMonoIcons(cfg.monoIcons());
+ connect(_theme, &Theme::systrayUseMonoIconsChanged, this, &Application::slotUseMonoIconsChanged);
+
// Setting up the gui class will allow tray notifications for the
// setup that follows, like folder setup
_gui = new ownCloudGui(this);
qCInfo(lcApplication) << "Arguments:" << qApp->arguments();
}
+void Application::slotUseMonoIconsChanged(bool)
+{
+ _gui->slotComputeOverallSyncStatus();
+}
+
void Application::slotParseMessage(const QString &msg, QObject *)
{
if (msg.startsWith(QLatin1String("MSG_PARSEOPTIONS:"))) {
protected slots:
void slotParseMessage(const QString &, QObject *);
void slotCheckConnection();
+ void slotUseMonoIconsChanged(bool);
void slotCleanup();
void slotAccountStateAdded(OCC::AccountState *accountState);
void slotAccountStateRemoved(OCC::AccountState *accountState);
//slotUpdateInfo();
// misc
+ connect(_ui->monoIconsCheckBox, &QAbstractButton::toggled, this, &GeneralSettings::saveMiscSettings);
connect(_ui->crashreporterCheckBox, &QAbstractButton::toggled, this, &GeneralSettings::saveMiscSettings);
connect(_ui->newFolderLimitCheckBox, &QAbstractButton::toggled, this, &GeneralSettings::saveMiscSettings);
connect(_ui->newFolderLimitSpinBox, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &GeneralSettings::saveMiscSettings);
_ui->horizontalLayout_3->getContentsMargins(&m0, &m1, &m2, &m3);
_ui->horizontalLayout_3->setContentsMargins(0, m1, m2, m3);
+ // OEM themes are not obliged to ship mono icons, so there
+ // is no point in offering an option
+ _ui->monoIconsCheckBox->setVisible(Theme::instance()->monoIconsAvailable());
+
connect(_ui->ignoredFilesButton, &QAbstractButton::clicked, this, &GeneralSettings::slotIgnoreFilesEditor);
connect(_ui->debugArchiveButton, &QAbstractButton::clicked, this, &GeneralSettings::slotCreateDebugArchive);
{
QScopedValueRollback<bool> scope(_currentlyLoading, true);
ConfigFile cfgFile;
+ _ui->monoIconsCheckBox->setChecked(cfgFile.monoIcons());
_ui->serverNotificationsCheckBox->setChecked(cfgFile.optionalServerNotifications());
_ui->callNotificationsCheckBox->setEnabled(_ui->serverNotificationsCheckBox->isEnabled());
_ui->callNotificationsCheckBox->setChecked(cfgFile.showCallNotifications());
_ui->newFolderLimitCheckBox->setChecked(newFolderLimit.first);
_ui->newFolderLimitSpinBox->setValue(newFolderLimit.second);
_ui->newExternalStorage->setChecked(cfgFile.confirmExternalStorage());
+ _ui->monoIconsCheckBox->setChecked(cfgFile.monoIcons());
}
#if defined(BUILD_UPDATER)
if (_currentlyLoading)
return;
ConfigFile cfgFile;
+ bool isChecked = _ui->monoIconsCheckBox->isChecked();
+ cfgFile.setMonoIcons(isChecked);
+ Theme::instance()->setSystrayUseMonoIcons(isChecked);
cfgFile.setCrashReporter(_ui->crashreporterCheckBox->isChecked());
cfgFile.setNewBigFolderSizeLimit(_ui->newFolderLimitCheckBox->isChecked(),
<x>0</x>
<y>0</y>
<width>556</width>
- <height>573</height>
+ <height>563</height>
</rect>
</property>
<property name="windowTitle">
<string>General Settings</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
+ <item row="1" column="0">
+ <widget class="QCheckBox" name="monoIconsCheckBox">
+ <property name="toolTip">
+ <string>For System Tray</string>
+ </property>
+ <property name="text">
+ <string>Use &Monochrome Icons</string>
+ </property>
+ </widget>
+ </item>
<item row="0" column="0">
<widget class="QCheckBox" name="autostartCheckBox">
<property name="text">
<tabstops>
<tabstop>autostartCheckBox</tabstop>
<tabstop>serverNotificationsCheckBox</tabstop>
+ <tabstop>monoIconsCheckBox</tabstop>
<tabstop>ignoredFilesButton</tabstop>
<tabstop>newFolderLimitCheckBox</tabstop>
<tabstop>newFolderLimitSpinBox</tabstop>
static constexpr char forceSyncIntervalC[] = "forceSyncInterval";
static constexpr char fullLocalDiscoveryIntervalC[] = "fullLocalDiscoveryInterval";
static constexpr char notificationRefreshIntervalC[] = "notificationRefreshInterval";
+static constexpr char monoIconsC[] = "monoIcons";
static constexpr char promptDeleteC[] = "promptDeleteAllFiles";
static constexpr char crashReporterC[] = "crashReporter";
static constexpr char optionalServerNotificationsC[] = "optionalServerNotifications";
settings.setValue(QLatin1String(promptDeleteC), promptDeleteFiles);
}
+bool ConfigFile::monoIcons() const
+{
+ QSettings settings(configFile(), QSettings::IniFormat);
+ bool monoDefault = false; // On Mac we want bw by default
+#ifdef Q_OS_MAC
+ // OEM themes are not obliged to ship mono icons
+ monoDefault = QByteArrayLiteral("Nextcloud") == QByteArrayLiteral(APPLICATION_NAME);
+#endif
+ return settings.value(QLatin1String(monoIconsC), monoDefault).toBool();
+}
+
+void ConfigFile::setMonoIcons(bool useMonoIcons)
+{
+ QSettings settings(configFile(), QSettings::IniFormat);
+ settings.setValue(QLatin1String(monoIconsC), useMonoIcons);
+}
+
bool ConfigFile::crashReporter() const
{
QSettings settings(configFile(), QSettings::IniFormat);
*/
[[nodiscard]] std::chrono::milliseconds fullLocalDiscoveryInterval() const;
+ [[nodiscard]] bool monoIcons() const;
+ void setMonoIcons(bool);
+
[[nodiscard]] bool promptDeleteFiles() const;
void setPromptDeleteFiles(bool promptDeleteFiles);
return flavor;
}
+void Theme::setSystrayUseMonoIcons(bool mono)
+{
+ _mono = mono;
+ emit systrayUseMonoIconsChanged(mono);
+}
+
+bool Theme::systrayUseMonoIcons() const
+{
+ return _mono;
+}
+
+bool Theme::monoIconsAvailable() const
+{
+ QString themeDir = QString(Theme::themePrefix) + QString::fromLatin1("%1/").arg(Theme::instance()->systrayIconFlavor(true));
+ return QDir(themeDir).exists();
+}
+
QString Theme::updateCheckUrl() const
{
return APPLICATION_UPDATE_URL;
*/
virtual QString aboutDetails() const;
+ /**
+ * Define if the systray icons should be using mono design
+ */
+ void setSystrayUseMonoIcons(bool mono);
+
+ /**
+ * Retrieve wether to use mono icons for systray
+ */
+ bool systrayUseMonoIcons() const;
+
+ /**
+ * Check if mono icons are available
+ */
+ bool monoIconsAvailable() const;
+
/**
* @brief Where to check for new Updates.
*/
Theme();
signals:
+ void systrayUseMonoIconsChanged(bool);
void systemPaletteChanged(const QPalette &palette);
void darkModeChanged();
void overrideServerUrlChanged();