Revert "Merge pull request #5366 from nextcloud/bugfix/remove-mono-icons-setting"
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Fri, 27 Jan 2023 11:00:40 +0000 (12:00 +0100)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Fri, 27 Jan 2023 11:23:11 +0000 (12:23 +0100)
This reverts commit 5c42da4de5facbea9b06cf7086bee17005be59b2, reversing
changes made to e4b24490307f4337b390b6b484e8d77befffaf1b.

Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
src/gui/application.cpp
src/gui/application.h
src/gui/generalsettings.cpp
src/gui/generalsettings.ui
src/libsync/configfile.cpp
src/libsync/configfile.h
src/libsync/theme.cpp
src/libsync/theme.h

index 907d87facd2a03871d724035e210b1f6004eaecb..3a262a305b6712991cb23af8cf29ce2227eb86b5 100644 (file)
@@ -360,6 +360,9 @@ Application::Application(int &argc, char **argv)
 
     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);
@@ -568,6 +571,11 @@ void Application::setupLogging()
     qCInfo(lcApplication) << "Arguments:" << qApp->arguments();
 }
 
+void Application::slotUseMonoIconsChanged(bool)
+{
+    _gui->slotComputeOverallSyncStatus();
+}
+
 void Application::slotParseMessage(const QString &msg, QObject *)
 {
     if (msg.startsWith(QLatin1String("MSG_PARSEOPTIONS:"))) {
index 67fd836e9471ad8a9f8f7a5dfcbb6bca05ee213d..5bd412077eda40c9fd80a94cbc3472cbd51008a1 100644 (file)
@@ -100,6 +100,7 @@ signals:
 protected slots:
     void slotParseMessage(const QString &, QObject *);
     void slotCheckConnection();
+    void slotUseMonoIconsChanged(bool);
     void slotCleanup();
     void slotAccountStateAdded(OCC::AccountState *accountState);
     void slotAccountStateRemoved(OCC::AccountState *accountState);
index 429c759272f79d0c4cac0bcf4fe7cf6da4170a94..6a5164a265382299e5e61a03aa6ed5f8197214c6 100644 (file)
@@ -182,6 +182,7 @@ GeneralSettings::GeneralSettings(QWidget *parent)
     //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);
@@ -215,6 +216,10 @@ GeneralSettings::GeneralSettings(QWidget *parent)
     _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);
 
@@ -241,6 +246,7 @@ void GeneralSettings::loadMiscSettings()
 {
     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());
@@ -250,6 +256,7 @@ void GeneralSettings::loadMiscSettings()
     _ui->newFolderLimitCheckBox->setChecked(newFolderLimit.first);
     _ui->newFolderLimitSpinBox->setValue(newFolderLimit.second);
     _ui->newExternalStorage->setChecked(cfgFile.confirmExternalStorage());
+    _ui->monoIconsCheckBox->setChecked(cfgFile.monoIcons());
 }
 
 #if defined(BUILD_UPDATER)
@@ -413,6 +420,9 @@ void GeneralSettings::saveMiscSettings()
     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(),
index 2e61fc0c9d833da7ac2bf7f3dc23ae48725a17de..00cbeb14953b256d03774a719156077b6edca6ea 100644 (file)
@@ -7,7 +7,7 @@
     <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 &amp;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>
index 16cb45576a3962a7a0331689e09edabf0458ae05..08064026f405875327bb65ffff8e0a29d1d7a660 100644 (file)
@@ -56,6 +56,7 @@ static constexpr char remotePollIntervalC[] = "remotePollInterval";
 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";
@@ -946,6 +947,23 @@ void ConfigFile::setPromptDeleteFiles(bool promptDeleteFiles)
     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);
index d7d6f4ebeabb283ba35baecb0fa0444df10317c7..719cce0835ada0e981e845bac75092ee1cd605e6 100644 (file)
@@ -83,6 +83,9 @@ public:
      */
     [[nodiscard]] std::chrono::milliseconds fullLocalDiscoveryInterval() const;
 
+    [[nodiscard]] bool monoIcons() const;
+    void setMonoIcons(bool);
+
     [[nodiscard]] bool promptDeleteFiles() const;
     void setPromptDeleteFiles(bool promptDeleteFiles);
 
index 732bd0948682f7c9fbfa543d2ffecb59c176b33c..caee23bc361e6050b51bc77bd2a6514626c1d155 100644 (file)
@@ -480,6 +480,23 @@ QString Theme::systrayIconFlavor(bool mono) const
     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;
index 7c6e42ba37a1b3bf76ef5febd46ae3c57d3c7519..de721f71c273a5e8f94f84e6fa5a383e8226d663 100644 (file)
@@ -340,6 +340,21 @@ public:
      */
     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.
      */
@@ -597,6 +612,7 @@ protected:
     Theme();
 
 signals:
+    void systrayUseMonoIconsChanged(bool);
     void systemPaletteChanged(const QPalette &palette);
     void darkModeChanged();
     void overrideServerUrlChanged();