Simplify GNotification actions

This commit is contained in:
Ilya Fedin
2025-02-18 13:24:35 +00:00
committed by John Preston
parent 2ab9587f5f
commit cf61dedc79
4 changed files with 80 additions and 119 deletions
@@ -10,10 +10,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "platform/platform_integration.h"
#include "base/platform/base_platform_info.h"
#include "base/platform/linux/base_linux_xdp_utilities.h"
#include "window/notifications_manager.h"
#include "core/sandbox.h"
#include "core/application.h"
#include "core/core_settings.h"
#include "base/random.h"
#include <QtCore/QAbstractEventDispatcher>
@@ -27,32 +25,6 @@ namespace {
using namespace gi::repository;
namespace GObject = gi::repository::GObject;
std::vector<std::any> AnyVectorFromVariant(GLib::Variant value) {
std::vector<std::any> result;
GLib::VariantIter iter;
iter.allocate_();
iter.init(value);
const auto uint64Type = GLib::VariantType::new_("t");
const auto int64Type = GLib::VariantType::new_("x");
while (auto value = iter.next_value()) {
value = value.get_variant();
if (value.is_of_type(uint64Type)) {
result.push_back(std::make_any<uint64>(value.get_uint64()));
} else if (value.is_of_type(int64Type)) {
result.push_back(std::make_any<int64>(value.get_int64()));
} else if (value.is_container()) {
result.push_back(
std::make_any<std::vector<std::any>>(
AnyVectorFromVariant(value)));
}
}
return result;
}
class Application : public Gio::impl::ApplicationImpl {
public:
Application();
@@ -125,42 +97,18 @@ Application::Application()
});
actionMap.add_action(quitAction);
using Window::Notifications::Manager;
using NotificationId = Manager::NotificationId;
const auto notificationIdVariantType = GLib::VariantType::new_("av");
const auto notificationIdVariantType = GLib::VariantType::new_("a{sv}");
auto notificationActivateAction = Gio::SimpleAction::new_(
"notification-activate",
notificationIdVariantType);
notificationActivateAction.signal_activate().connect([](
Gio::SimpleAction,
GLib::Variant parameter) {
Core::Sandbox::Instance().customEnterFromEventLoop([&] {
Core::App().notifications().manager().notificationActivated(
NotificationId::FromAnyVector(
AnyVectorFromVariant(parameter)));
});
});
actionMap.add_action(notificationActivateAction);
auto notificationMarkAsReadAction = Gio::SimpleAction::new_(
"notification-mark-as-read",
notificationIdVariantType);
notificationMarkAsReadAction.signal_activate().connect([](
Gio::SimpleAction,
GLib::Variant parameter) {
Core::Sandbox::Instance().customEnterFromEventLoop([&] {
Core::App().notifications().manager().notificationReplied(
NotificationId::FromAnyVector(
AnyVectorFromVariant(parameter)),
{});
});
});
actionMap.add_action(notificationMarkAsReadAction);
}