(GLib) Как создавать и излучать GSignals? - PullRequest
0 голосов
/ 23 сентября 2018

Я пытаюсь создать wm на основе XCB. Я использую GApplication для своего базового объекта. Я пытаюсь создать новый GSignal и создать его на основе определенных событий xcb. Программа компилируется нормально, но когда я запускаю его исобытие происходит, я получаю ошибку: GLib-GObject-WARNING **: 09: 45: 01.395: ../glib/gobject/gsignal.c:3492: имя сигнала 'pointer-motion' недопустимо для экземпляра '0x5597bbb9e890' типа'GApplication.Вот как я создаю сигнал:

  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. Может кто-нибудь указать мнечто я делаю не так.

1 Ответ

0 голосов
/ 23 сентября 2018

Код сигнала выглядит нормально.Проблема, на которую намекает сообщение об ошибке "Недопустимый сигнал для экземпляра типа 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.

...