diff --git a/dataengines/devicenotifications/devicenotificationsengine.h b/dataengines/devicenotifications/devicenotificationsengine.h --- a/dataengines/devicenotifications/devicenotificationsengine.h +++ b/dataengines/devicenotifications/devicenotificationsengine.h @@ -23,6 +23,7 @@ #define DEVICENOTIFICATIONSENGINE_H #include +#include #include "ksolidnotify.h" @@ -39,9 +40,9 @@ private slots: void notify(Solid::ErrorType solidError, const QString& error, const QString& errorDetails, const QString &udi); + void clearNotification(const QString &udi); private: - uint m_id; KSolidNotify * m_solidNotify; }; diff --git a/dataengines/devicenotifications/devicenotificationsengine.cpp b/dataengines/devicenotifications/devicenotificationsengine.cpp --- a/dataengines/devicenotifications/devicenotificationsengine.cpp +++ b/dataengines/devicenotifications/devicenotificationsengine.cpp @@ -24,19 +24,19 @@ DeviceNotificationsEngine::DeviceNotificationsEngine( QObject* parent, const QVariantList& args ) : Plasma::DataEngine( parent, args ), - m_id(0), m_solidNotify(new KSolidNotify(this)) { connect(m_solidNotify, &KSolidNotify::notify, this, &DeviceNotificationsEngine::notify); + connect(m_solidNotify, &KSolidNotify::clearNotification, this, &DeviceNotificationsEngine::clearNotification); } DeviceNotificationsEngine::~DeviceNotificationsEngine() { } void DeviceNotificationsEngine::notify(Solid::ErrorType solidError, const QString& error, const QString& errorDetails, const QString &udi) { - const QString source = QStringLiteral("notification %1").arg(m_id++); + const QString source = QStringLiteral("%1 notification").arg(udi); Plasma::DataEngine::Data notificationData; notificationData.insert(QStringLiteral("solidError"), solidError); @@ -47,6 +47,11 @@ setData(source, notificationData ); } +void DeviceNotificationsEngine::clearNotification(const QString &udi) +{ + removeSource(QStringLiteral("%1 notification").arg(udi)); +} + K_EXPORT_PLASMA_DATAENGINE_WITH_JSON(devicenotifications, DeviceNotificationsEngine, "plasma-dataengine-devicenotifications.json") #include "devicenotificationsengine.moc" diff --git a/dataengines/devicenotifications/ksolidnotify.h b/dataengines/devicenotifications/ksolidnotify.h --- a/dataengines/devicenotifications/ksolidnotify.h +++ b/dataengines/devicenotifications/ksolidnotify.h @@ -48,6 +48,7 @@ signals: void notify(Solid::ErrorType solidError, const QString& error, const QString& errorDetails, const QString &udi); void blockingAppsReady(const QStringList &apps); + void clearNotification(const QString &udi); protected slots: void onDeviceAdded(const QString &udi); diff --git a/dataengines/devicenotifications/ksolidnotify.cpp b/dataengines/devicenotifications/ksolidnotify.cpp --- a/dataengines/devicenotifications/ksolidnotify.cpp +++ b/dataengines/devicenotifications/ksolidnotify.cpp @@ -72,6 +72,7 @@ } } m_devices.remove(udi); + emit clearNotification(udi); } bool KSolidNotify::isSafelyRemovable(const QString &udi) const @@ -148,6 +149,11 @@ void KSolidNotify::onSolidReply(SolidReplyType type, Solid::ErrorType error, const QVariant &errorData, const QString &udi) { + if ((error == Solid::ErrorType::NoError) && (type == SolidReplyType::Setup)) { + emit clearNotification(udi); + return; + } + QString errorMsg; switch (error) {