Make use of KNotification's quick reply feature
It can make use of Plasma's native quick reply. If that is not available then it get's turned into a regular action that we hook up with
This commit is contained in:
parent
31ca3cbf4f
commit
2fef3b925d
4 changed files with 22 additions and 0 deletions
|
@ -8,6 +8,8 @@ set (RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE
|
||||||
|
|
||||||
project(kdeconnect VERSION ${RELEASE_SERVICE_VERSION})
|
project(kdeconnect VERSION ${RELEASE_SERVICE_VERSION})
|
||||||
|
|
||||||
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
|
||||||
if (SAILFISHOS)
|
if (SAILFISHOS)
|
||||||
set(KF5_MIN_VERSION "5.36.0")
|
set(KF5_MIN_VERSION "5.36.0")
|
||||||
set(QT_MIN_VERSION "5.6.0")
|
set(QT_MIN_VERSION "5.6.0")
|
||||||
|
|
|
@ -8,6 +8,10 @@
|
||||||
#include "plugin_notification_debug.h"
|
#include "plugin_notification_debug.h"
|
||||||
|
|
||||||
#include <KNotification>
|
#include <KNotification>
|
||||||
|
#include "knotifications_version.h"
|
||||||
|
#if KNOTIFICATIONS_VERSION >= QT_VERSION_CHECK(5, 81, 0)
|
||||||
|
#include <KNotificationReplyAction>
|
||||||
|
#endif
|
||||||
#include <QtGlobal>
|
#include <QtGlobal>
|
||||||
#include <QIcon>
|
#include <QIcon>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
@ -45,10 +49,13 @@ Notification::Notification(const NetworkPacket& np, const Device* device, QObjec
|
||||||
createKNotification(np);
|
createKNotification(np);
|
||||||
|
|
||||||
connect(m_notification, QOverload<unsigned int>::of(&KNotification::activated), this, [this] (unsigned int actionIndex) {
|
connect(m_notification, QOverload<unsigned int>::of(&KNotification::activated), this, [this] (unsigned int actionIndex) {
|
||||||
|
// Since 5.81 we use KNotification's inline reply instead of our own action
|
||||||
|
#if KNOTIFICATIONS_VERSION < QT_VERSION_CHECK(5, 81, 0)
|
||||||
// Do nothing for our own reply action
|
// Do nothing for our own reply action
|
||||||
if(!m_requestReplyId.isEmpty() && actionIndex == 1) {
|
if(!m_requestReplyId.isEmpty() && actionIndex == 1) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
// Notification action indices start at 1
|
// Notification action indices start at 1
|
||||||
Q_EMIT actionTriggered(m_internalId, m_actions[actionIndex - 1]);
|
Q_EMIT actionTriggered(m_internalId, m_actions[actionIndex - 1]);
|
||||||
});
|
});
|
||||||
|
@ -115,8 +122,17 @@ void Notification::createKNotification(const NetworkPacket& np)
|
||||||
m_notification->setHint(QStringLiteral("x-kde-origin-name"), m_device->name());
|
m_notification->setHint(QStringLiteral("x-kde-origin-name"), m_device->name());
|
||||||
|
|
||||||
if (!m_requestReplyId.isEmpty()) {
|
if (!m_requestReplyId.isEmpty()) {
|
||||||
|
#if KNOTIFICATIONS_VERSION >= QT_VERSION_CHECK(5, 81, 0)
|
||||||
|
auto replyAction = std::make_unique<KNotificationReplyAction>(i18nc("@action:button", "Reply"));
|
||||||
|
replyAction->setPlaceholderText(i18nc("@info:placeholder", "Reply to %1...", m_appName));
|
||||||
|
replyAction->setFallbackBehavior(KNotificationReplyAction::FallbackBehavior::UseRegularAction);
|
||||||
|
QObject::connect(replyAction.get(), &KNotificationReplyAction::replied, this, &Notification::replied);
|
||||||
|
QObject::connect(replyAction.get(), &KNotificationReplyAction::activated, this, &Notification::reply);
|
||||||
|
m_notification->setReplyAction(std::move(replyAction));
|
||||||
|
#else
|
||||||
m_actions.prepend(i18n("Reply"));
|
m_actions.prepend(i18n("Reply"));
|
||||||
connect(m_notification, &KNotification::action1Activated, this, &Notification::reply, Qt::UniqueConnection);
|
connect(m_notification, &KNotification::action1Activated, this, &Notification::reply, Qt::UniqueConnection);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
m_notification->setActions(m_actions);
|
m_notification->setActions(m_actions);
|
||||||
|
|
|
@ -60,6 +60,7 @@ Q_SIGNALS:
|
||||||
void replyRequested();
|
void replyRequested();
|
||||||
Q_SCRIPTABLE void ready();
|
Q_SCRIPTABLE void ready();
|
||||||
void actionTriggered(const QString& key, const QString& action);
|
void actionTriggered(const QString& key, const QString& action);
|
||||||
|
void replied(const QString& message);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString m_internalId;
|
QString m_internalId;
|
||||||
|
|
|
@ -96,6 +96,9 @@ void NotificationsPlugin::addNotification(Notification* noti)
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(noti, &Notification::actionTriggered, this, &NotificationsPlugin::sendAction);
|
connect(noti, &Notification::actionTriggered, this, &NotificationsPlugin::sendAction);
|
||||||
|
connect(noti, &Notification::replied, this, [this, noti](const QString& message){
|
||||||
|
sendReply(noti->replyId(), message);
|
||||||
|
});
|
||||||
|
|
||||||
const QString& publicId = newId();
|
const QString& publicId = newId();
|
||||||
m_notifications[publicId] = noti;
|
m_notifications[publicId] = noti;
|
||||||
|
|
Loading…
Reference in a new issue