Get XDG activation token from native notification on Linux

This commit is contained in:
Ilya Fedin 2022-06-15 12:17:06 +04:00 committed by John Preston
parent fc98f9c0c5
commit 798998203a
2 changed files with 28 additions and 1 deletions

View File

@ -435,11 +435,13 @@ private:
uint _notificationId = 0;
uint _actionInvokedSignalId = 0;
uint _activationTokenSignalId = 0;
uint _notificationRepliedSignalId = 0;
uint _notificationClosedSignalId = 0;
void notificationClosed(uint id, uint reason);
void actionInvoked(uint id, const Glib::ustring &actionName);
void activationToken(uint id, const Glib::ustring &token);
void notificationReplied(uint id, const Glib::ustring &text);
};
@ -486,6 +488,14 @@ bool NotificationData::init(
parameters.get_child(1));
crl::on_main(weak, [=] { actionInvoked(id, actionName); });
} else if (signal_name == "ActivationToken") {
const auto id = GlibVariantCast<uint>(
parameters.get_child(0));
const auto token = GlibVariantCast<Glib::ustring>(
parameters.get_child(1));
crl::on_main(weak, [=] { activationToken(id, token); });
} else if (signal_name == "NotificationReplied") {
const auto id = GlibVariantCast<uint>(
parameters.get_child(0));
@ -558,6 +568,13 @@ bool NotificationData::init(
std::string(kInterface),
"ActionInvoked",
std::string(kObjectPath));
_activationTokenSignalId = _dbusConnection->signal_subscribe(
signalEmitted,
std::string(kService),
std::string(kInterface),
"ActivationToken",
std::string(kObjectPath));
}
if (capabilities.contains("action-icons")) {
@ -601,6 +618,10 @@ NotificationData::~NotificationData() {
_dbusConnection->signal_unsubscribe(_actionInvokedSignalId);
}
if (_activationTokenSignalId != 0) {
_dbusConnection->signal_unsubscribe(_activationTokenSignalId);
}
if (_notificationRepliedSignalId != 0) {
_dbusConnection->signal_unsubscribe(_notificationRepliedSignalId);
}
@ -738,6 +759,12 @@ void NotificationData::actionInvoked(
}
}
void NotificationData::activationToken(uint id, const Glib::ustring &token) {
if (id == _notificationId) {
qputenv("XDG_ACTIVATION_TOKEN", QByteArray::fromStdString(token));
}
}
void NotificationData::notificationReplied(
uint id,
const Glib::ustring &text) {

@ -1 +1 @@
Subproject commit 866d3618cf2518530589fccd60157138f611bbcd
Subproject commit 50d5fefb8ac3f12eb6de4cf29a733ecb70ea4f27