c - (GLib) 如何创建和发出 GSignals?

标签 c gtk gtk3 glib

我正在尝试创建一个基于 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 . 有人可以指出我做错了什么。

最佳答案

信号代码看起来不错。错误消息“signal is invalid for instance of 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);
}

这会返回一个指向 GApplication 的指针,而不是 FairyWM。请改用 FAIRY_TYPE_WM

关于c - (GLib) 如何创建和发出 GSignals?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52463881/

相关文章:

c - 错误C2371,重新定义;不同的基本类型

c++ - MPI_Gather()、MPI_Scatter()中发送计数和接收计数有什么区别?

java - NPE 使用 GTK LAF 运行 Netbeans 时

c - 使用 gtk c++ 更新多个进度条

c - GtkStatusBar 卡在一个/随机/位置并希望我将鼠标悬停按钮

css - Gtk3 Css 按钮状态

c - 以二进制形式读取 mid 文件以进行进一步分析

c - 如何确定这个c程序的时间复杂度

c - 为什么 GTK 编译不起作用?

multithreading - 如何在 Gtk3 的另一个线程中从阻塞读取中检索数据?