diff --git a/model/syncthingicons.cpp b/model/syncthingicons.cpp index a8498b2..44d9182 100644 --- a/model/syncthingicons.cpp +++ b/model/syncthingicons.cpp @@ -248,6 +248,7 @@ StatusIcons::StatusIcons(const StatusIconSettings &settings) , error(QIcon(renderSvgImage(makeSyncthingIcon(settings.errorColor, StatusEmblem::Alert)))) , errorSync(QIcon(renderSvgImage(makeSyncthingIcon(settings.errorColor, StatusEmblem::Synchronizing)))) , newItem(QIcon(renderSvgImage(makeSyncthingIcon(settings.defaultColor, StatusEmblem::Add)))) + , isValid(true) { } diff --git a/model/syncthingicons.h b/model/syncthingicons.h index e8d9561..4eca95d 100644 --- a/model/syncthingicons.h +++ b/model/syncthingicons.h @@ -97,9 +97,11 @@ struct StatusIcons { QIcon error; QIcon errorSync; QIcon newItem; + bool isValid; }; inline StatusIcons::StatusIcons() + : isValid(false) { } @@ -137,7 +139,7 @@ public: const FontAwesomeIcons &fontAwesomeIconsForDarkTheme() const; Q_SIGNALS: - void statusIconsChanged(); + void statusIconsChanged(const StatusIcons &newStatusIcons); private: IconManager(); @@ -149,8 +151,7 @@ private: inline void IconManager::applySettings(const StatusIconSettings &settings) { - m_statusIcons = StatusIcons(settings); - emit statusIconsChanged(); + emit statusIconsChanged(m_statusIcons = StatusIcons(settings)); } inline const StatusIcons &IconManager::statusIcons() const diff --git a/widgets/misc/dbusstatusnotifier.cpp b/widgets/misc/dbusstatusnotifier.cpp index a6d6872..82bd8f2 100644 --- a/widgets/misc/dbusstatusnotifier.cpp +++ b/widgets/misc/dbusstatusnotifier.cpp @@ -28,29 +28,37 @@ DBusStatusNotifier::DBusStatusNotifier(QObject *parent) , m_newDevNotification(QStringLiteral(APP_NAME) + tr(" - new device"), NotificationIcon::Information, 5000) , m_newDirNotification(QStringLiteral(APP_NAME) + tr(" - new directory"), NotificationIcon::Information, 5000) { - const auto icons(statusIcons()); - m_disconnectedNotification.setMessage(tr("Disconnected from Syncthing")); m_disconnectedNotification.setActions(QStringList({ QStringLiteral("reconnect"), tr("Try to reconnect") })); connect(&m_disconnectedNotification, &DBusNotification::actionInvoked, this, &DBusStatusNotifier::connectRequested); - m_syncthingNotification.setImage(makeImage(icons.error)); - m_internalErrorNotification.setActions(QStringList({ QStringLiteral("details"), tr("View details") })); connect(&m_internalErrorNotification, &DBusNotification::actionInvoked, this, &DBusStatusNotifier::errorDetailsRequested); m_syncthingNotification.setActions(QStringList({ QStringLiteral("show"), tr("Show"), QStringLiteral("dismiss"), tr("Dismiss") })); - m_syncthingNotification.setImage(makeImage(icons.notify)); - m_syncCompleteNotification.setImage(makeImage(icons.syncComplete)); connect(&m_syncthingNotification, &DBusNotification::actionInvoked, this, &DBusStatusNotifier::handleSyncthingNotificationAction); - m_newDevNotification.setImage(makeImage(icons.newItem)); m_newDevNotification.setActions(QStringList({ QStringLiteral("webui"), tr("Open web UI") })); connect(&m_newDevNotification, &DBusNotification::actionInvoked, this, &DBusStatusNotifier::webUiRequested); - m_newDirNotification.setImage(m_newDevNotification.image()); m_newDirNotification.setActions(m_newDevNotification.actions()); connect(&m_newDirNotification, &DBusNotification::actionInvoked, this, &DBusStatusNotifier::webUiRequested); + + const auto &iconManager = IconManager::instance(); + connect(&iconManager, &Data::IconManager::statusIconsChanged, this, &DBusStatusNotifier::setIcons); + setIcons(iconManager.statusIcons()); +} + +void DBusStatusNotifier::setIcons(const StatusIcons &icons) +{ + if (!icons.isValid) { + return; + } + m_syncthingNotification.setImage(makeImage(icons.error)); + m_syncthingNotification.setImage(makeImage(icons.notify)); + m_syncCompleteNotification.setImage(makeImage(icons.syncComplete)); + m_newDevNotification.setImage(makeImage(icons.newItem)); + m_newDirNotification.setImage(m_newDevNotification.image()); } void DBusStatusNotifier::handleSyncthingNotificationAction(const QString &action) diff --git a/widgets/misc/dbusstatusnotifier.h b/widgets/misc/dbusstatusnotifier.h index 45c0acf..61d3130 100644 --- a/widgets/misc/dbusstatusnotifier.h +++ b/widgets/misc/dbusstatusnotifier.h @@ -11,7 +11,8 @@ namespace Data { enum class SyncthingErrorCategory; -} +struct StatusIcons; +} // namespace Data namespace QtGui { @@ -29,6 +30,7 @@ public Q_SLOTS: void showSyncComplete(const QString &message); void showNewDev(const QString &devId, const QString &message); void showNewDir(const QString &devId, const QString &dirId, const QString &message); + void setIcons(const Data::StatusIcons &icons); Q_SIGNALS: void connectRequested();