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
我尝试过的其他事情:
如果我将 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 沙箱权限(这部分对我来说是全新的),但由于通知已成功发送,我认为这不是问题所在。
这似乎是 xdg-desktop-portal-gtk
的错误:https://github.com/flatpak/xdg-desktop-portal-gtk/pull/359。尽管已修复,但尚未包含在版本中。
关于 elementary/notifications 记录的问题的一些相关讨论:https://github.com/elementary/notifications/issues/153
我正在尝试从我的应用程序发送 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
我尝试过的其他事情:
如果我将
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 沙箱权限(这部分对我来说是全新的),但由于通知已成功发送,我认为这不是问题所在。
这似乎是 xdg-desktop-portal-gtk
的错误:https://github.com/flatpak/xdg-desktop-portal-gtk/pull/359。尽管已修复,但尚未包含在版本中。
关于 elementary/notifications 记录的问题的一些相关讨论:https://github.com/elementary/notifications/issues/153