GLib.Notification 无法使用非空 VariantType 激活操作

Posted

技术标签:

【中文标题】GLib.Notification 无法使用非空 VariantType 激活操作【英文标题】:GLib.Notification fails to activate action with a non-null VariantType 【发布时间】:2022-01-03 22:38:41 【问题描述】:

我正在尝试从我的应用程序发送GLib.Notification 并传递string 参数。

动作名称为action-show-chat-view,注册在我的主应用类的activate ()方法中:

public class MyApplication : Gtk.Application 

    protected override void activate () 
        // ...
        var show_chat_view_action = new GLib.SimpleAction ("action-show-chat-view", GLib.VariantType.STRING);
        show_chat_view_action.activate.connect ((parameter) => 
            debug ("beep boop");
            debug (parameter.get_string ());
        );
        add_action (show_chat_view_action);
        // ...
    


要发送通知,我执行以下操作:

var notification = new GLib.Notification ("Hello, world");
var target = new GLib.Variant.string ("foobar");
notification.set_default_action_and_target_value ("app.action-show-chat-view", target);
app.send_notification (null, notification); // app is the instance of the MyApplication class above

通知已正确发送并按预期显示,但是当单击通知激活操作时,我收到以下错误:

GLib-GIO-CRITICAL **: 13:04:37.169: g_simple_action_activate: assertion 'simple->parameter_type == NULL ? parameter == NULL : (parameter != NULL && g_variant_is_of_type (parameter, simple->parameter_type))' failed

我尝试过的其他方法:

    如果我将GLib.VariantType.STRING 替换为null,并将null 作为通知上的目标值传递(并删除parameter.get_string ()),我会看到“哔哔”控制台输出,所以我知道一切都在最少连接正确并调用正确的方法。

    我也尝试使用 app. 前缀注册操作,但是我在文档中的某处读到,当通过 Application.add_action () 添加时,这是隐含的。

    我尝试使用类型字符串 s 创建一个操作组,但遇到了同样的错误。

    我尝试过使用除STRING 之外的其他Variant 类型

    我尝试在发送通知之前添加以下检查以查看类型是否对齐,他们做到了:app.get_action_parameter_type ("action-show-chat-view").equal (target.get_type ())。如果我使用 app. 前缀,这将失败,但是我认为这是预期的行为,因为它是在没有前缀的情况下注册的?

    我查看了 Flatpak 沙盒权限(这部分对我来说是全新的),但由于通知发送成功,我认为这不是问题。

【问题讨论】:

【参考方案1】:

这似乎是 xdg-desktop-portal-gtk: https://github.com/flatpak/xdg-desktop-portal-gtk/pull/359 的一个错误。尽管已修复,但尚未包含在版本中。

关于使用基本/通知记录的问题的一些相关讨论:https://github.com/elementary/notifications/issues/153

【讨论】:

以上是关于GLib.Notification 无法使用非空 VariantType 激活操作的主要内容,如果未能解决你的问题,请参考以下文章

指定为非空的参数为空:无法更新 Spring Boot jpa 中的单个实体字段。导致指定为非空的参数为空

无法启用约束。一行或多行包含违反非空、唯一或外键约束的值

如何使用 PowerShell 删除 OneDrive 中的非空文件夹?

无法启用约束。一行或多行包含违反非空、唯一或外键约束的值。 ASP.NET C#

返回 MIN 和 MAX 值并忽略空值 - 使用前面的非空值填充空值

从 NSXPCConnection 传递非空参数时未调用应用回复