我正在尝试基于XCB创建wm。我对我的基本对象使用gaapplication。我尝试创建一个新的GSignal,并基于某些XCB事件发出它。程序编译得很好,但当我运行它并发生事件时,我会得到一个错误:
GLib GObject警告**:09:45:01.395:../GLib/GObject/gsignal.c:3492:信号名称“指针移动”对“gaapplication”类型的实例“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 gaapplication”暗示的问题是,您从未实际实例化对象:
fairy_wm_new (const gchar *id, GApplicationFlags flags)
{
return g_object_new (G_TYPE_APPLICATION,"application-id",id,"flags",flags,NULL);
}
这将返回指向一个gaapplication的指针,而不是一个FairyWM。改为使用
FAIRY_TYPE_WM
。