c - (GLib) 如何创建和发出 GSignals?
问题描述
我正在尝试基于 XCB 创建一个 wm。我使用 GApplication 作为我的基础对象。我尝试创建一个新的 GSignal 并根据某些 xcb 事件发出它。程序编译得很好,但是当我运行它并且事件发生时我收到错误:GLib-GObject-WARNING **: 09:45:01.395: ../glib/gobject/gsignal.c:3492: 信号名称 'pointer-motion' 无效,例如 'GApplication' 类型的 '0x5597bbb9e890' . 这是我创建信号的方式:
g_signal_new ("pointer-motion",
G_TYPE_FROM_CLASS (class),
G_SIGNAL_DETAILED |
G_SIGNAL_ACTION |
G_SIGNAL_RUN_FIRST,
0,
NULL,
NULL,
NULL,
G_TYPE_NONE,
1,
G_TYPE_POINTER);
这是我发出它的方式:
g_signal_emit_by_name (fairy,
"pointer-motion",
motion_notify_event);
这是完整的来源: https ://pastebin.com/TMtQFwAb 。有人可以指出我做错了什么。
解决方案
信号代码看起来不错。错误消息“信号对于 GApplication 类型的实例无效”暗示的问题是您从未实际实例化您的对象:
fairy_wm_new (const gchar *id, GApplicationFlags flags)
{
return g_object_new (G_TYPE_APPLICATION,"application-id",id,"flags",flags,NULL);
}
这将返回一个指向 GApplication 而不是 FairyWM 的指针。改为使用FAIRY_TYPE_WM
。
推荐阅读
- clojure - clojure 中比使用实例更惯用的模式?发送类型
- python - 正确转义所需字符而不复制反斜杠
- javascript - 是的,日期验证没有按预期工作
- c# - 如何使用 C# 计算 xy 轴上的时钟角?
- css - 如何隐藏 mat-checkbox 不确定状态图标并改用背景颜色?
- javascript - UnitTest 抛出 TypeError:componentFactory.create 不是函数
- excel - 如何将表格转换为新行并将多列合并为一?
- reactjs - TypeScript React,导出样式化组件函数
- r - 带对数变量的曲线()函数
- c - 接收到的 IP 数据包标头与wireshark 不同