GLib.Notification 无法激活具有非空 VariantType 的操作

GLib.Notification fails to activate action with a non-null VariantType

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

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

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

我尝试过的其他事情:

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

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

  3. 我尝试创建类型为字符串 s 的操作组,但遇到了同样的错误。

  4. 除了 STRING

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

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

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

关于 elementary/notifications 记录的问题的一些相关讨论:https://github.com/elementary/notifications/issues/153