diff --git a/Telegram/SourceFiles/platform/linux/notifications_manager_linux.cpp b/Telegram/SourceFiles/platform/linux/notifications_manager_linux.cpp index 464887bfb8..ab5d1c1466 100644 --- a/Telegram/SourceFiles/platform/linux/notifications_manager_linux.cpp +++ b/Telegram/SourceFiles/platform/linux/notifications_manager_linux.cpp @@ -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( + parameters.get_child(0)); + + const auto token = GlibVariantCast( + parameters.get_child(1)); + + crl::on_main(weak, [=] { activationToken(id, token); }); } else if (signal_name == "NotificationReplied") { const auto id = GlibVariantCast( 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) { diff --git a/Telegram/lib_waylandshells b/Telegram/lib_waylandshells index 866d3618cf..50d5fefb8a 160000 --- a/Telegram/lib_waylandshells +++ b/Telegram/lib_waylandshells @@ -1 +1 @@ -Subproject commit 866d3618cf2518530589fccd60157138f611bbcd +Subproject commit 50d5fefb8ac3f12eb6de4cf29a733ecb70ea4f27