diff --git a/fileitemactionplugin/syncthingfileitemactionstaticdata.cpp b/fileitemactionplugin/syncthingfileitemactionstaticdata.cpp index a253c48..f53fe97 100644 --- a/fileitemactionplugin/syncthingfileitemactionstaticdata.cpp +++ b/fileitemactionplugin/syncthingfileitemactionstaticdata.cpp @@ -66,6 +66,9 @@ void SyncthingFileItemActionStaticData::initialize() connect(&m_connection, &SyncthingConnection::statusChanged, this, &SyncthingFileItemActionStaticData::logConnectionStatus); } + // use default icon settings + IconManager::instance().applySettings(StatusIconSettings()); + m_initialized = true; } diff --git a/model/syncthingdevicemodel.cpp b/model/syncthingdevicemodel.cpp index 0b0eb48..bc7304f 100644 --- a/model/syncthingdevicemodel.cpp +++ b/model/syncthingdevicemodel.cpp @@ -351,6 +351,11 @@ void SyncthingDeviceModel::devStatusChanged(const SyncthingDev &, int index) emit dataChanged(this->index(0, 0, modelIndex1), this->index(5, 0, modelIndex1), modelRoles4); } +void SyncthingDeviceModel::handleStatusIconsChanged() +{ + emit dataChanged(index(0, 0), index(static_cast(m_devs.size()) - 1, 0), QVector({ Qt::DecorationRole })); +} + QString SyncthingDeviceModel::devStatusString(const SyncthingDev &dev) { if (dev.paused) { diff --git a/model/syncthingdevicemodel.h b/model/syncthingdevicemodel.h index d941a50..212ed53 100644 --- a/model/syncthingdevicemodel.h +++ b/model/syncthingdevicemodel.h @@ -41,6 +41,7 @@ public Q_SLOTS: private Q_SLOTS: void devStatusChanged(const SyncthingDev &, int index); + void handleStatusIconsChanged() override; private: static QString devStatusString(const SyncthingDev &dev); diff --git a/model/syncthingdirectorymodel.cpp b/model/syncthingdirectorymodel.cpp index 17dd861..8bbb156 100644 --- a/model/syncthingdirectorymodel.cpp +++ b/model/syncthingdirectorymodel.cpp @@ -441,6 +441,11 @@ void SyncthingDirectoryModel::handleNewConfigAvailable() endResetModel(); } +void SyncthingDirectoryModel::handleStatusIconsChanged() +{ + emit dataChanged(index(0, 0), index(static_cast(m_dirs.size()) - 1, 0), QVector({ Qt::DecorationRole })); +} + QString SyncthingDirectoryModel::dirStatusString(const SyncthingDir &dir) { if (dir.paused && dir.status != SyncthingDirStatus::OutOfSync) { diff --git a/model/syncthingdirectorymodel.h b/model/syncthingdirectorymodel.h index 7a77c49..ca87161 100644 --- a/model/syncthingdirectorymodel.h +++ b/model/syncthingdirectorymodel.h @@ -44,6 +44,7 @@ private Q_SLOTS: void dirStatusChanged(const SyncthingDir &dir, int index); void handleConfigInvalidated() override; void handleNewConfigAvailable() override; + void handleStatusIconsChanged() override; private: static QString dirStatusString(const SyncthingDir &dir); diff --git a/model/syncthingicons.cpp b/model/syncthingicons.cpp index 1de62c9..339cfde 100644 --- a/model/syncthingicons.cpp +++ b/model/syncthingicons.cpp @@ -260,16 +260,16 @@ FontAwesomeIcons::FontAwesomeIcons(const QColor &color, const QSize &size, int m { } -IconManager::IconManager(const StatusIconSettings *settings) - : m_statusIcons(settings ? *settings : StatusIconSettings()) +IconManager::IconManager() + : m_statusIcons() , m_fontAwesomeIconsForLightTheme(QColor(10, 10, 10), QSize(64, 64), 8) , m_fontAwesomeIconsForDarkTheme(Qt::white, QSize(64, 64), 8) { } -IconManager &IconManager::instance(const StatusIconSettings *settingsForFirstTimeSetup) +IconManager &IconManager::instance() { - static IconManager iconManager(settingsForFirstTimeSetup); + static IconManager iconManager; return iconManager; } diff --git a/model/syncthingicons.h b/model/syncthingicons.h index 8afa0ef..43213e7 100644 --- a/model/syncthingicons.h +++ b/model/syncthingicons.h @@ -81,7 +81,8 @@ struct LIB_SYNCTHING_MODEL_EXPORT StatusIconSettings { }; struct StatusIcons { - StatusIcons(const StatusIconSettings &settings = StatusIconSettings()); + StatusIcons(); + StatusIcons(const StatusIconSettings &settings); QIcon disconnected; QIcon idling; QIcon scanninig; @@ -94,6 +95,10 @@ struct StatusIcons { QIcon newItem; }; +inline StatusIcons::StatusIcons() +{ +} + struct FontAwesomeIcons { FontAwesomeIcons(const QColor &color, const QSize &size, int margin); QIcon hashtag; @@ -117,17 +122,21 @@ struct FontAwesomeIcons { QIcon tag; }; -class LIB_SYNCTHING_MODEL_EXPORT IconManager { +class LIB_SYNCTHING_MODEL_EXPORT IconManager : public QObject { + Q_OBJECT public: - static IconManager &instance(const StatusIconSettings *settingsForFirstTimeSetup = nullptr); + static IconManager &instance(); void applySettings(const StatusIconSettings &settings); const StatusIcons &statusIcons() const; const FontAwesomeIcons &fontAwesomeIconsForLightTheme() const; const FontAwesomeIcons &fontAwesomeIconsForDarkTheme() const; +Q_SIGNALS: + void statusIconsChanged(); + private: - IconManager(const StatusIconSettings *settings = nullptr); + IconManager(); StatusIcons m_statusIcons; FontAwesomeIcons m_fontAwesomeIconsForLightTheme; @@ -137,6 +146,7 @@ private: inline void IconManager::applySettings(const StatusIconSettings &settings) { m_statusIcons = StatusIcons(settings); + emit statusIconsChanged(); } inline const StatusIcons &IconManager::statusIcons() const diff --git a/model/syncthingmodel.cpp b/model/syncthingmodel.cpp index ff9b481..d7df68d 100644 --- a/model/syncthingmodel.cpp +++ b/model/syncthingmodel.cpp @@ -1,4 +1,5 @@ #include "./syncthingmodel.h" +#include "./syncthingicons.h" #include "../connector/syncthingconnection.h" @@ -11,6 +12,7 @@ SyncthingModel::SyncthingModel(SyncthingConnection &connection, QObject *parent) { connect(&m_connection, &SyncthingConnection::newConfig, this, &SyncthingModel::handleConfigInvalidated); connect(&m_connection, &SyncthingConnection::newConfigApplied, this, &SyncthingModel::handleNewConfigAvailable); + connect(&IconManager::instance(), &IconManager::statusIconsChanged, this, &SyncthingModel::handleStatusIconsChanged); } const QVector &SyncthingModel::colorRoles() const @@ -55,4 +57,8 @@ void SyncthingModel::handleNewConfigAvailable() endResetModel(); } +void SyncthingModel::handleStatusIconsChanged() +{ +} + } // namespace Data diff --git a/model/syncthingmodel.h b/model/syncthingmodel.h index a259b0c..5310e98 100644 --- a/model/syncthingmodel.h +++ b/model/syncthingmodel.h @@ -27,6 +27,7 @@ protected: private Q_SLOTS: virtual void handleConfigInvalidated(); virtual void handleNewConfigAvailable(); + virtual void handleStatusIconsChanged(); protected: Data::SyncthingConnection &m_connection; diff --git a/plasmoid/lib/syncthingapplet.cpp b/plasmoid/lib/syncthingapplet.cpp index b0a62a4..5818687 100644 --- a/plasmoid/lib/syncthingapplet.cpp +++ b/plasmoid/lib/syncthingapplet.cpp @@ -102,6 +102,7 @@ void SyncthingApplet::init() connect(&m_dbusNotifier, &DBusStatusNotifier::showNotificationsRequested, this, &SyncthingApplet::showNotificationsDialog); connect(&m_dbusNotifier, &DBusStatusNotifier::errorDetailsRequested, this, &SyncthingApplet::showInternalErrorsDialog); connect(&m_dbusNotifier, &DBusStatusNotifier::webUiRequested, this, &SyncthingApplet::showWebUI); + connect(&IconManager::instance(), &IconManager::statusIconsChanged, this, &SyncthingApplet::connectionStatusChanged); // restore settings Settings::restore(); diff --git a/tray/gui/trayicon.cpp b/tray/gui/trayicon.cpp index dd61685..8d214c9 100644 --- a/tray/gui/trayicon.cpp +++ b/tray/gui/trayicon.cpp @@ -96,6 +96,7 @@ TrayIcon::TrayIcon(const QString &connectionConfig, QObject *parent) connect(&connection, &SyncthingConnection::statusChanged, this, &TrayIcon::updateStatusIconAndText); connect(&connection, &SyncthingConnection::newDevices, this, &TrayIcon::updateStatusIconAndText); connect(&connection, &SyncthingConnection::devStatusChanged, this, &TrayIcon::updateStatusIconAndText); + connect(&IconManager::instance(), &IconManager::statusIconsChanged, this, &TrayIcon::updateStatusIconAndText); #ifdef QT_UTILITIES_SUPPORT_DBUS_NOTIFICATIONS connect(&m_dbusNotifier, &DBusStatusNotifier::connectRequested, &connection, static_cast(&SyncthingConnection::connect)); diff --git a/widgets/settings/iconsoptionpage.ui b/widgets/settings/iconsoptionpage.ui index 20d3d4f..efde843 100644 --- a/widgets/settings/iconsoptionpage.ui +++ b/widgets/settings/iconsoptionpage.ui @@ -6,7 +6,7 @@ 0 0 - 390 + 538 167 @@ -70,13 +70,6 @@ - - - - Requires (so far) a restart to be applied. - - - @@ -96,7 +89,8 @@ Restore previous settings - + + ..