(GLib) 如何创建和发出 GSignals?
(GLib) How to create and emit GSignals?
我正在尝试创建一个基于 XCB.I 的 wm,使用 GApplication 作为我的基础 object.I 尝试创建一个新的 GSignal 并基于某些 xcb 发出它 events.The 程序编译正常,但是当我 运行 它和事件发生时,我得到一个错误:
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。
谁能指出我做错了什么。
信号代码看起来不错。错误消息 "signal is invalid for instance of type GApplication" 暗示的问题是您从未实际实例化您的对象:
fairy_wm_new (const gchar *id, GApplicationFlags flags)
{
return g_object_new (G_TYPE_APPLICATION,"application-id",id,"flags",flags,NULL);
}
此 returns 指向 GApplication 的指针,而不是 FairyWM。请改用 FAIRY_TYPE_WM
。
我正在尝试创建一个基于 XCB.I 的 wm,使用 GApplication 作为我的基础 object.I 尝试创建一个新的 GSignal 并基于某些 xcb 发出它 events.The 程序编译正常,但是当我 运行 它和事件发生时,我得到一个错误: 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。 谁能指出我做错了什么。
信号代码看起来不错。错误消息 "signal is invalid for instance of type GApplication" 暗示的问题是您从未实际实例化您的对象:
fairy_wm_new (const gchar *id, GApplicationFlags flags)
{
return g_object_new (G_TYPE_APPLICATION,"application-id",id,"flags",flags,NULL);
}
此 returns 指向 GApplication 的指针,而不是 FairyWM。请改用 FAIRY_TYPE_WM
。